【问题标题】:Passing arguments to a different controller or alternatives将参数传递给不同的控制器或替代品
【发布时间】:2016-11-04 14:52:21
【问题描述】:

在我的 extbase 扩展程序中,我有一个约会模型,用户可以就约会的情况写反馈。
所以我创建了一个不同领域的反馈模型。
现在,当用户单击“创建反馈”按钮时,我应该实现什么?
到目前为止,我得到了这个,但它不起作用:

<f:link.action action="edit" controller="Feedback" arguments="{appointment:appointment}">

我得到错误:

参数 1 传递给 ...Controller\FeedbackController::newAction() 必须是 ...\Model\Appointment,没有给出

反馈控制器:

     /**
     * action new
     * @param ...\Domain\Model\Appointment $appointment
     * @return void
     */
    public function newAction(...\Domain\Model\Appointment $appointment) {
        $this->view->assign('appointment', $appointment);
    }

为什么会出现此错误? (约会对象肯定在那里,我调试过了)
我认为它一定与从 AppointmentController 到 FeedbackController 的切换有关。

实现这一点的最佳方法是什么?

【问题讨论】:

  • 生成的链接是什么样子的?是否有约会 uid?您的插件/控制器是否允许访问保存约会记录的存储文件夹?

标签: typo3 extbase typo3-6.2.x


【解决方案1】:

如果您使用不同的插件,您需要在链接生成中使用 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' => '',
    )
);

【讨论】:

  • 我想我也需要它 - 不使用不同的插件?!因为这确实是它显然无法正常工作的原因,即使我只使用一个插件(我认为):) 谢谢!
【解决方案2】:

检查 ext_localconf.php 中的 plugin-controller-action 数组并发布。也许有什么问题。

【讨论】:

    【解决方案3】:

    如果您收到此错误:

    参数 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);
        }
    

    这很奇怪,因为在您的链接中,您调用了一个操作“编辑”,而您在“newAction”控制器而不是“editAction”控制器中有错误,您应该允许您的插件使用“编辑”操作(可缓存或不是):

    \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}">
    

    弗洛里安

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-14
      • 1970-01-01
      • 2015-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多