0

有不同的模块,它们都在操作中返回 ViewModel。但不知何故,ViewModel 在其中一个模块中表现得有些奇怪。

我在说;

$view = new ViewModel(array('data' => $someContent));
$view->setTemplate('a valid path to template');

return $view;

并得到一个空白页面。

如果我在相关模板的末尾放置一个 exit() 语句,例如

<!DOCTYPE html>
<html>
    ...
</html>
<?php exit(); ?>

我可以获得预期的输出,因为脚本在那里结束,但否则我会丢失输出。

如果我说 *var_dump($view)*,我可以看到 $view 是Zend\View\Model\ViewModel的一个实例。

没有错误,只是一个空输出,甚至可以看到通知警告。因此,它不会抛出任何异常、错误、警告、通知等。

再次提醒一下,它只发生在特定模块中,但该模块实际上与其他模块没有什么不同。

我不是 ZF 专家,我正在研究其他人的代码,所以请给我一个能够找到该问题的起点。

提前致谢。

编辑:我有一个额外的信息;

如果我使用 JsonModel 而不是 ViewModel,它会起作用,并且您可能知道,JsonModel 扩展了 ViewModel。

4

1 回答 1

1

由于您没有正确发布您的控制器操作,这就是我可以对您的问题做些什么的猜测。

在 Zend 框架 2 中有各种类型的控制器,您可以从这些控制器中扩展您的模块中的控制器。

例如,如果您从 AbstractActionController 扩展您的控制器,您的视图将被正确返回。

所以这里的问题是你的其他模块有扩展 AbstractActionController 的控制器。这个没有正确返回视图的模块可能没有扩展它。相反,它可能会扩展其他控制器,例如 restfulcontrollers

您还应该检查模块的 module.php 文件,以检查您是否有任何策略,例如从 module.config.php 为该模块的引导程序应用 json 策略。

例如。

return array(
    'view_manager' => array(
        'strategies' => array(
           'ViewJsonStrategy',
        ),
    ),
)

此外,您还检查了您的 module.config.php 文件,您的 viewmanager 是否对您的模板有适当的规范。

例如。

'view_manager' => array(
        'template_path_stack' => array(
            'album' => __DIR__ . '/../view',
        ),
    ),

希望这可以帮助 。

于 2013-03-07T18:07:49.497 回答