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
Configuration/TCA/EventText.phpPHP-Code:$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'
)
);
Classes/Controller/Domain/Model/EventText.phpPHP-Code:$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/Domain/Repository/EventTestRepository.phpPHP-Code:/**
* @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;
}
}
Wenn ich dann versuche im Controller einen Datensatz abzuspeichernPHP-Code:/**
* @api
*/
class Tx_Tsext_Domain_Repository_EventTextRepository extends Tx_Extbase_Persistence_Repository {
}
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?PHP-Code:$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);
Hast Du einen Testcase geschrieben mit dem Du das Model prüfen kannst? Wenn ein Datensatz in der DB landet aber alles auf NULL steht funktioniert entweder Dein Model nicht oder Du unterbrichst den Programmcode bevor das Object persisitiert wird.
Ausserdem solltest Du die Repository injecten:
In der Action heisst es dann:PHP-Code:/**
* @var Tx_Tsext_Domain_Repository_EventTextRepository
*/
protected $eventTextRepository;
/**
* @param Tx_Tsext_Domain_Repository_EventTextRepository $eventTextRepository;
* @return void
*/
public function injectEventTextRepository(Tx_Tsext_Domain_Repository_EventTextRepository $eventTextRepository;){ $this->eventTextRepository; = $eventTextRepository; }
danach kannst Du zusätzlich noch prüfen ob du mit $t->setField(".."); und mit $t->getField() den Wert zurückbekommst.PHP-Code:$t = t3lib_div::makeInstance("Tx_Tsext_Domain_Model_EventText");
(Code ohne gewähr da nur hier reingeschrieben)
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
Lesezeichen