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
_______________________________________________
TYPO3-german mailing list
TYPO3-german@lists.typo3.org
http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-german

Antwort per Email an