子视图呈现两次

时间:2017-05-26 13:04:13

标签: forward zend-framework3

我注意到我的孩子视图由于某些原因被渲染了两次。 这是一个简单的测试用例:

假设我有两个控制器,ControllerA和ControllerB。我将动作forwardTestAction从ControllerA转发到ControllerB,并将从ControllerB返回的视图显示为子视图。

ControllerA :: forwardTestAction()

public function forwardTestAction()
{
    $childView = $this->forward()->dispatch(ControllerB::class, [
        'action' => 'forward-test',
    ]);

    $mainView = new ViewModel();
    $mainView->addChild($childView, 'content');

    return $mainView;
}

ControllerB :: forwardTestAction()

public function forwardTestAction()
{
    $number = new \stdClass();
    $number->a = 10.4;

    $view = new ViewModel([
        'number' => $number,
    ]);
    return $view;
}

ControllerA的模板forward-test.phtml

<?= $content; ?>

ControllerB的模板forward-test.phtml

<?php
    $number->a = $this->currencyFormat($number->a);
    echo $number->a;

currencyFormat插件会抛出异常,因为number会被格式化两次。原因是因为子视图本身被渲染了两次。

这是一种非常奇怪的行为,不仅会导致性能问题,还会导致许多其他问题,例如: numberFormatting等。

我做错了什么?

另外我应该提一下,html只输出一次,但模板会被渲染两次。也许它只是我当前设置中的一个奇怪的星座。我还在Github上发布了一个问题,他们无法重现它。

0 个答案:

没有答案