在我的extbase扩展程序中,我有一个约会模型,用户可以写出有关约会的反馈
所以我创建了一个包含不同领域的反馈模型
现在,当用户点击"创建反馈"按钮?
到目前为止,我得到了这个,但它没有工作:
<f:link.action action="edit" controller="Feedback" arguments="{appointment:appointment}">
我收到错误:
参数1传递给 ... Controller \ FeedbackController :: newAction()必须是一个实例 ... \ Model \ Appointment,none given
FeedbackController:
/**
* action new
* @param ...\Domain\Model\Appointment $appointment
* @return void
*/
public function newAction(...\Domain\Model\Appointment $appointment) {
$this->view->assign('appointment', $appointment);
}
为什么会出现此错误? (约会对象肯定在那里,我调试了它)
我认为它必须与从AppointmentController切换到FeedbackController有关。
实现此目标的最佳方式是什么?
答案 0 :(得分:4)
如果使用不同的插件,则需要在链接生成中使用pluginName参数。
<f:link.action action="edit" controller="Feedback" pluginName="your_plugin" arguments="{appointment:appointment}">
当生成链接时,TYPO3会为链接的参数添加“名称空间”,如下所示:tx_myplugin [action] = new。确保pluginName与您在ext_localconf.php中定义的相同。在这种情况下,pluginName将是your_plugin。
\TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin(
'Vendor.' . $_EXTKEY,
'your_plugin',
array(
'Feedback' => 'new',
),
// non-cacheable actions
array(
'Feedback' => '',
)
);
答案 1 :(得分:0)
检查ext_localconf.php中的plugin-controller-action数组并发布它。也许有些不对劲。
答案 2 :(得分:0)
如果您收到此错误:
参数1传递给... Controller \ FeedbackController :: newAction() 必须是... \ Model \ Appointment的实例,没有给出
这是因为你给控制器一个NULL对象,并且你的控制器不允许这样做。
要避免此错误,您可以在控制器中允许NULL对象:
/**
* action new
* @param ...\Domain\Model\Appointment $appointment
* @return void
*/
public function newAction(...\Domain\Model\Appointment $appointment=NULL) {
$this->view->assign('appointment', $appointment);
}
这很奇怪,因为在你的链接中,你调用了一个动作'edit'而你在'newAction'控制器而不是'editAction'控制器中有一个错误,你应该允许你的插件允许'编辑'动作(cachable或不):
\TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin(
'Vendor.' . $_EXTKEY,
'your_plugin',
array(
'Feedback' => 'edit',
),
// non-cacheable actions
array(
'Feedback' => 'edit',
)
);
并且如Natalia所写,如果您要调用的操作属于另一个插件,请添加插件名称。
<f:link.action action="edit" controller="Feedback" pluginName="your_plugin" arguments="{appointment:appointment}">
弗洛里安