Я столкнулся со следующей проблемой в Typo3 6.2.9:
Когда я передаю некоторые объекты контроллеру, используя действие и аргументы f: link, объекты поступают в контроллер, но он не регистрирует их как отправленные мной. Для лучшего объяснения здесь приведены отдельные разделы кода:
в частичном:
<f:link.action action="new" controller="ForeignProductMeasuring" arguments="{planRow : planRow, plan:plan}">neue Dosierung anlegen</f:link.action>
сгенерированная ссылка на сайте:
"index.php?id=1&tx_desinfektionsplan_desinfektionsplan%5BplanRow%5D=12&tx_desinfektionsplan_desinfektionsplan%5Bplan%5D=16&tx_desinfektionsplan_desinfektionsplan%5Baction%5D=new&tx_desinfektionsplan_desinfektionsplan%5Bcontroller%5D=ForeignProductMeasuring&cHash=2adafaba9c56b134d4d5ae382ee5d57b"
что показывает аргументы правильные на мой взгляд.
Вот действие у контроллера:
public function newAction(\Orochemie\Desinfektionsplan\Domain\Model\ForeignProductMeasuring $newForeignProductMeasuring = NULL,
\Orochemie\Desinfektionsplan\Domain\Model\PlanRow $planRow,
\Orochemie\Desinfektionsplan\Domain\Model\Plan $plan) {
\TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump( $this->request->getArguments());
$this->view->assign('newForeignProductMeasuring',$newForeignProductMeasuring);
$this->view->assign('planRow', $planRow);
$this->view->assign('plan', $plan);
}
Ошибка выглядит так:
#1: PHP Catchable Fatal Error: Argument 2 passed to
Orochemie\Desinfektionsplan\Controller\ForeignProductMeasuringController::newAction()
must be an instance of Orochemie\Desinfektionsplan\Domain\Model\PlanRow,
none given in /kunden/137629_70806/typo3/typo3conf/ext/desinfektionsplan/Classes/Controller/ForeignProductMeasuringController.php line 46
Для меня это выглядит так, будто он не знает, какие предметы он получает. Но если я проверяю аргументы с помощью $ this-> request-> getArguments (), то вижу, что все аргументы поступают в контроллер.
У кого-нибудь есть представление о том, в чем здесь проблема?
Вы определили свои параметры в аннотациях PHPDoc?
/**
* @param \Orochemie\Desinfektionsplan\Domain\Model\ForeignProductMeasuring newForeignProductMeasuring
* @param \Orochemie\Desinfektionsplan\Domain\Model\PlanRow $planRow
* @param \Orochemie\Desinfektionsplan\Domain\Model\Plan $plan
* @return void
*/
public function newAction(\Orochemie\Desinfektionsplan\Domain\Model\ForeignProductMeasuring $newForeignProductMeasuring = NULL,
\Orochemie\Desinfektionsplan\Domain\Model\PlanRow $planRow,
\Orochemie\Desinfektionsplan\Domain\Model\Plan $plan) {
...
}
Это очень важно для ObjectMapper.
Других решений пока нет …