Я создал расширение typo3 с внешним плагином, где вы можете создавать новые записи.
Одно поле представляет собой поле выбора со значениями из другой таблицы. В ТС это выглядит так:
'shoeref' => array(
'exclude' => 0,
'label' => 'Shoe Ref Test',
'config' => array(
'type' => 'select',
'foreign_table' => 'tx_testcollection_domain_model_testcollection',
'foreign_table_where' => 'and tx_testcollection_domain_model_testcollection.pid = 96 and tx_testcollection_domain_model_testcollection.sys_language_uid = 0',
'minitems' => 0,
'maxitems' => 1,
),
),
Это работает в бэкенде. Я могу выбрать запись из таблицы tx_testcollection_domain_model_testcollection
, а также во внешнем интерфейсе я могу получить доступ к этому элементу.
Но на странице «Новая» (где вы можете создать новый элемент) я понятия не имею, как заполнить поле выбора.
Я только что попробовал:
<f:form.select property="shoeref" />
Но он говорит, что мне нужны «варианты».
Примерно так:
<f:form.select property="shoeref" options="{0: 'test1', 1: 'test2'}"/>
Но, конечно, мне нужны значения из таблицы tx_testcollection_domain_model_testcollection
в этом поле выбора.
Итак, как я могу получить значения этой таблицы (с тем же условием) в это поле выбора?
Редактировать Я близок:
я заполняю переменную в своем контроллере в newAction:
$collection = $this->objectManager->get('Test\TestCollection\Domain\Repository\TestCollectionRepository');
$querySettings = $this->objectManager->get('TYPO3\\CMS\\Extbase\\Persistence\\Generic\\Typo3QuerySettings');
$querySettings->setRespectStoragePage(FALSE);
$querySettings->setStoragePageIds(array(96)); //Looks like he dont care about this and just finds all..
$collection->setDefaultQuerySettings($querySettings);
$this->view->assign('collecton',$collection->findAll());
И в шаблоне:
<f:form.select property="shoeref" options="{collecton}" optionLabelField="name"/>
Я вижу правильные варианты, но когда я хочу сохранить, я получаю:
Exception while property mapping at property path "": PHP Catchable Fatal Error: Argument 1 passed to Test\TestCustomerfeedback\Domain\Model\Customerfeedback::setShoeref() must be an instance of
Test\TestCustomerfeedback\Domain\Model\Test\TestCollection\Domain\Model\TestCollection
, instance of
Test\TestCollection\Domain\Model\TestCollection
given
, called in /home/www-data/typo3_src-7.6.4_dev/typo3/sysext/extbase/Classes/Reflection/ObjectAccess.php on line 209 and defined in /home/www-data/mydomain/typo3conf/ext/test_customerfeedback/Classes/Domain/Model/Customerfeedback.php line 32