[TYPO3-german] Extbase: FE-Editing und m:n Relationen
Raphael Weber
mailinglisten at screensolutions.de
Wed May 30 10:59:32 CEST 2012
Hallo,
ich mache gerade die ersten Gehversuche bei der Extension-Entwicklung
mit Extbase/ Fluid. Das erste Versuchsobjekt ist ein Formular, mithilfe
dessen FE-User einen Club eintragen können. Ein solcher Club-Datensatz
enthält u.a. ein Feld ("administrator"), in dem eine Referenz zu dem
FE-User gesetzt wird, damit dieser den Datensatz später administrieren
kann. Da auch mehrere FE-User als Admins eines Datensatzes denkbar sind
und ein FE-User theoretisch mehrere Clubs administrieren kann, muss die
Eigenschaft "administrator" in einer m:n Beziehung stehen.
Soweit die Theorie ;) In der Praxis siehts leider so aus, dass die
Zuweisung dieser Eigenschaft beim Bearbeiten der Datensätze im Backend
problemlos funktioniert, im FE leider nicht.
Das Formular, das den FE-Eintrag ermöglicht, hat zu diesem Zweck ein
hidden-Feld, das die ID des FE-Users enthält. Beim Abschicken des
Formulars wird allerdings kein Eintrag in der mm-Tabelle erzeugt und das
Feld "administrator" des Club-Datensatzes hat den Wert 0.
Habe ich etwas entscheidendes übersehen, das beim FE-editing zwingend
beachtet werden muss, damit solche m:n Beziehungen persistiert werden
können?
Ich wäre sehr dankbar über jeden Tipp, da ich hier im Moment nicht
weiterkomme. Habe das Problem bereits auf der TYPO3-mvc Liste gepostet,
aber leider keine Rückmeldung erhalten - daher entschuldige bitte den
"Doppel-Post".
Falls Dir das zum Nachvollziehen hilft, füge ich hier noch Auszüge aus
meinem Code ein:
MODEL Club:
class Tx_Extkey_Domain_Model_Club extends
Tx_Extbase_DomainObject_AbstractEntity {
/**
* FE user who is permitted to edit the club data
*
* @var
Tx_Extbase_Persistence_ObjectStorage<Tx_Extkey_Domain_Model_Administrator>
*/
protected $administrator;
/**
* FE user who is permitted to edit the club data
*
* @var Tx_Extkey_Domain_Model_Country
*/
protected $country;
/**
* __construct
*
* @param $title
* @param $established
* @param $brandRelated
* @param $termsAccepted
* @param $city
* @param $country
* @param $zip
* @return void
*/
public function __construct($title = NULL, $established = 0,
$brandRelated = true, $termsAccepted = true, $city = NULL, $zip = NULL) {
//Do not remove the next line: It would break the functionality
$this->initStorageObjects();
$this->setTitle($title);
$this->setEstablished($established);
$this->setBrandRelated($brandRelated);
$this->setTermsAccepted($termsAccepted);
$this->setCity($city);
$this->setZip($zip);
}
/**
* Initializes all Tx_Extbase_Persistence_ObjectStorage properties.
*
* @return void
*/
protected function initStorageObjects() {
/**
* Do not modify this method!
* It will be rewritten on each save in the extension builder
* You may modify the constructor of this class instead
*/
$this->administrator = new Tx_Extbase_Persistence_ObjectStorage();
}
/**
* Adds a Administrator
*
* @param Tx_Extkey_Domain_Model_Administrator $administrator
* @return void
*/
public function addAdministrator(Tx_Extkey_Domain_Model_Administrator
$administrator) {
$this->administrator->attach($administrator);
}
/**
* Removes a Administrator
*
* @param Tx_Extkey_Domain_Model_Administrator $administratorToRemove
The Administrator to be removed
* @return void
*/
public function removeAdministrator(Tx_Extkey_Domain_Model_Administrator
$administratorToRemove) {
$this->administrator->detach($administratorToRemove);
}
/**
* Returns the administrator
*
* @return
Tx_Extbase_Persistence_ObjectStorage<Tx_Extkey_Domain_Model_Administrator>
$administrator
*/
public function getAdministrator() {
return $this->administrator;
}
/**
* Sets the administrator
*
* @param
Tx_Extbase_Persistence_ObjectStorage<Tx_Extkey_Domain_Model_Administrator>
$administrator
* @return void
*/
public function setAdministrator(Tx_Extbase_Persistence_ObjectStorage
$administrator) {
$this->administrator = $administrator;
}
}
TCA Club:
$TCA['tx_extkey_domain_model_club'] = array(
'columns' => array(
'administrator' => array(
'exclude' => 1,
'label' =>
'LLL:EXT:extkey/Resources/Private/Language/locallang_db.xml:tx_extkey_domain_model_club.administrator',
'config' => array(
'type' => 'select',
'foreign_table' => 'fe_users',
'MM' => 'tx_extkey_club_administrator_mm',
'size' => 10,
'autoSizeMax' => 30,
'maxitems' => 9999,
'multiple' => 0,
'wizards' => array(
),
),
),
),
);
Grüße,
raphael
More information about the TYPO3-german
mailing list