Zum Inhalt springen

Werte werden nicht gespeichert

Erstellt am 8. Februar 2012 · 2 Antworten · letzte Antwort am 8. Februar 2012

Tags: TCA, Frage

mato ·

Hallo zusammen

Ich versuche gerade eine Extension mit Extbase umzusetzen. Jetzt habe ich das Problem, dass es keine Werte übernimmt wenn ich verusche über ein Repository einen Datensatz zu speichern.

ext_tables.php

$TCA['tx_tsext_domain_model_eventtext'] = array (
    'ctrl' => array (
        'title' => 'Event Text',
        'transOrigPointerField' => 'i18n_parent',
        'transOrigDiffSourceField' => 'i18n_diffsource',
        'languageField' => 'sys_language_uid',
        'enablecolumns' => array(),
        'dynamicConfigFile' => t3lib_extMgm::extPath($_EXTKEY).'Configuration/TCA/EventText.php'
    )
);

Configuration/TCA/EventText.php

$TCA['tx_tsext_domain_model_eventtext'] = array(
    'ctrl' => $TCA['tx_tsext_domain_model_eventtext']['ctrl'],
    'columns' => array(
        'sys_language_uid' => array(
            'label' => 'LLL:EXT:lang/locallang_general.xml:LGL.language',
            'config' => array(
                'type' => 'select',
                'foreign_table' => 'sys_language',
                'foreign_table_where' => 'ORDER BY sys_language.title',
                'items' => array(
                    array(
                        'LLL:EXT:lang/locallang_general.xml:LGL.default_value',
                        0,
                    ),
                ),
            ),
        ),

        'i18n_parent' => array(
            'displayCond' => 'FIELD:sys_language_uid:>:0',
            'label' => 'LLL:EXT:lang/locallang_general.xml:LGL.l18n_parent',
            'config' => array(
                'type' => 'select',
                'items' => array(
                    array(
                        '',
                        0,
                    ),
                ),
                'foreign_table' => 'tx_tsext_domain_model_eventtext',
                'foreign_table_where' => 'AND tx_tsext_domain_model_eventtext.sys_language_uid IN (-1,0)',
            ),
        ),

        'i18n_diffsource' => array(
            'config'=>array(
                'type'=>'passthrough',
            ),
        ),

        'event_name' => array(
            'label' => 'LLL:EXT:tsext/Resources/Language/locallang.xml:eventText.event_name',
            'config' => array(
                'type' => 'input',
                'size' => '30',
                'eval' => 'trim,required'
            )
        ),

        'description' => array(
            'label' => 'LLL:EXT:tsext/Resources/Language/locallang.xml:eventText.description',
            'config' => array(
                'type' => 'text',
                'eval' => 'trim'
            )
        ),

        'infos' => array(
            'label' => 'LLL:EXT:tsext/Resources/Language/locallang.xml:eventText.infos',
            'config' => array(
                'type' => 'text',
                'eval' => 'trim'
            )
        )
    )
);

Classes/Controller/Domain/Model/EventText.php

/**
 * @scope prototype
 * @entity
 * @api
 */
class Tx_Tsext_Domain_Model_EventText extends Tx_Extbase_DomainObject_AbstractEntity {
    /**
     * @var string
     */
    private $description;

    /**
     * @var string
     */
    private $eventName;

    /**
     * @var string
     */
    private $i18nDiffsource;

    /**
     * @var int
     */
    private $i18nParent = 0;

    /**
     * @var string
     */
    private $infos;

    /**
     * @var int
     */
    private $sysLanguageUid;

    /**
     * @return string
     */
    public function getDescription() {
        return $this->description;
    }

    /**
     * @return string
     * @api
     */
    public function getEventName() {
        return $this->eventName;
    }

    /**
     * @return string
     */
    public function getI18nDiffsource() {
        return $this->i18nDiffsource;
    }

    /**
     * @return int
     */
    public function getI18nParent() {
        return $this->i18nParent;
    }

    /**
     * @return string
     */
    public function getInfos() {
        return $this->infos;
    }

    /**
     * @return int
     */
    public function getLanguage() {
        return $this->sysLanguageUid;
    }

    /**
     * @param string $description
     */
    public function setDescription($description) {
        $this->description = $description;
    }

    /**
     * @param string $name
     * @return void
     * @api
     */
    public function setEventName($name) {
        $this->eventName = $name;
    }

    /**
     * @param string $i18nDiffsource
     */
    public function setI18nDiffsource($i18nDiffsource) {
        $this->i18nDiffsource = $i18nDiffsource;
    }

    /**
     * @param int $i18nParent
     */
    public function setI18nParent($i18nParent) {
        $this->i18nParent = $i18nParent;
    }

    /**
     * @param string $infos
     */
    public function setInfos($infos) {
        $this->infos = $infos;
    }

    /**
     * @param int $lang
     */
    public function setLanguage($lang) {
        $this->sysLanguageUid = $lang;
    }
}

Classes/Domain/Repository/EventTestRepository.php

/**
 * @api
 */
class Tx_Tsext_Domain_Repository_EventTextRepository extends Tx_Extbase_Persistence_Repository {

}

Wenn ich dann versuche im Controller einen Datensatz abzuspeichern

$r = $this->objectManager->get('Tx_Tsext_Domain_Repository_EventTextRepository');
$t = $this->objectManager->create('Tx_Tsext_Domain_Model_EventText');
$t->setEventName('Test Event');
$t->setDescription('Hello world');
$t->setInfos('Some information');
$t->setLanguage(2);
$r->add($t);

dann werden nur NULL-Werte in die Datenbank geschrieben. Ich habe meinen Code mit anderen Extensions verglichen und kann den Fehler einfach nicht finden. Kann mir jemand sagen, was ich hier falsch mache?

BFSven ·

Genau das gleiche Problem hatte ich auch, bei mir lags aber daran, dass ich gar kein TCA definiert hatte. :o

Ich kann auf den ersten Blick aber auch keinen Fehler entdecken.

Probiere doch einfach mal das Model mit dem Extension-Builder zu erstellen und vergleiche dann die generierten Dateien mit Deinen, eventuell ist es nur ein kleiner Schreibfehler

Gruß,
Sven

mato ·

Danke für den Tip mit dem Extension-Builder. Es lag nicht an der TCA sondern am Model. Die Sichtbarkeit der Attribute muss auf protected sein da sonst die Basisklasse nicht auf diese zugreiffen kann.