You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TYPO3 Extbase:控制器分配对象至视图后传递到局部模板时出现Null错误

TYPO3 Extbase: 关联对象在视图中传递时为Null的问题解决

问题背景

我在TYPO3 Extbase的Termin控制器中编写了showAction,不仅把Termin对象分配给视图,还通过getter方法获取了关联的Kaufmnnisch对象并赋值:

public function showAction(\...\Kundentermine\Domain\Model\Termin $termin) {
    $this->view->assign('termin', $termin);
    $this->view->assign('kaufmnnisch', $termin->getZugewkaufmaennisch());
}

对应的模板里需要展示Termin详情,同时添加链接调用Kaufmnnisch控制器的showAction,传入这个关联对象:

<tr>
    <td>
        <f:link.action action="show" controller="Kaufmnnisch" arguments="{kaufmnnisch : kaufmnnisch}">
            <f:translate key="tx_kundentermine_domain_model_termin.kaufmaennisch" />
        </f:link.action>
        {termin.kaufmaennisch}
    </td>
    <td>
    </td>
</tr>

但运行时出现错误:

Argument 1 passed to ...\Kundentermine\Controller\KaufmnnischController::showAction() must be an instance of ...\Kundentermine\Domain\Model\Kaufmnnisch, null given

奇怪的是,在控制器里用var_dump($termin->getZugewkaufmaennisch())能得到正确的对象实例,但视图里传递时却变成了Null。

补充:Kaufmnnisch控制器的showAction代码如下:

/**
 * action show
 *
 * @param \...\Kundentermine\Domain\Model\Kaufmnnisch $kaufmnnisch
 * @return void
 */
public function showAction(\...\Kundentermine\Domain\Model\Kaufmnnisch $kaufmnnisch) {
    $this->view->assign('kaufmnnisch', $kaufmnnisch);
}

问题根源

这个问题其实是视图变量作用域导致的:虽然我们在控制器里把kaufmnnisch分配给了主视图,但如果这段模板代码是写在一个被<f:render>调用的partial里,而调用partial时没有把kaufmnnisch作为参数传递进去,那么partial内部是访问不到这个变量的,自然就会传入Null给控制器的showAction。

解决方法

在调用partial的时候,务必把需要用到的所有变量都通过arguments参数传递进去,修改后的调用代码如下:

<f:render partial="Termin/Properties" arguments="{termin:termin, kaufmnnisch:kaufmnnisch}" />

这样partial里就能正常获取到kaufmnnisch对象,链接传参也就恢复正常了。

内容的提问来源于stack exchange,提问作者Mondblut

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:33:08