我注意到我的孩子视图由于某些原因被渲染了两次。 这是一个简单的测试用例:
假设我有两个控制器,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上发布了一个问题,他们无法重现它。