Zend Framework 2无法呈现视图,解析器无法解析为文件。为什么?

时间:2015-04-03 11:21:53

标签: php zend-framework2

出于学习目的,我试图从头开始在Zend Framework 2中创建一个模块,但是我不能让它来渲染视图。它总是抛出这个错误:

Zend\View\Renderer\PhpRenderer::render: Unable to render template "my-module/index/index"; resolver could not resolve to a file

我理解错误说明了:与请求相对应的视图文件丢失,但我不明白为什么这种情况发生 - 对我而言,一切都已到位。可能我只是忽略了一些东西,但我似乎无法找到它。

我的module.config.php看起来像这样:

<?php

return array(
    'controllers' => array(
        'invokables' => array(
            'MyModule\Controller\IndexController' => 'MyModule\Controller\IndexController'
        ),
    ),

    'router' => array(
        'routes' => array(
            'my-module' => array(
                'type' => 'literal',
                'options' => array(
                    'route' => '/my-module',
                    'defaults' => array(
                        'controller' => 'MyModule\Controller\IndexController',
                        'action' => 'index',
                    ),
                )
            ),
        ),

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

我的观点位于module/MyModule/view/my-module/index/index.phtml

我也试过了module/MyModule/view/my-module/index/index/index.phtml,但这对我来说看起来不对,而且也行不通 - 为什么预期那里的观点?我的配置或文件/文件夹结构在哪里错误 - 为什么框架找不到正确的视图文件?

也许还要看看控制器:

namespace MyModule\Controller;

use Zend\Mvc\Controller\AbstractActionController;
use Zend\View\Model\ViewModel;

class IndexController extends AbstractActionController
{
    public function indexAction()
    {
        return new ViewModel();
    }
}

1 个答案:

答案 0 :(得分:1)

您的view_manager配置位置错误,您已将其置于router配置中,这意味着您的模板文件夹永远不会添加到堆栈中。移动钥匙......

<?php

return array(
    'controllers' => array(
        'invokables' => array(
            'MyModule\Controller\IndexController' => 'MyModule\Controller\IndexController'
        ),
    ),

    'router' => array(
        'routes' => array(
            'my-module' => array(
                'type' => 'literal',
                'options' => array(
                    'route' => '/my-module',
                    'defaults' => array(
                        'controller' => 'MyModule\Controller\IndexController',
                        'action' => 'index',
                    ),
                )
            ),
        ),
        // view_manager config doesn't belong here
    ),
    // correct place for view_manager config is here
    'view_manager' => array(
        'template_path_stack' => array(
            __DIR__ . '/../view',
        ),
    ),
);