[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