4

我遇到了一个奇怪的情况...

在创建 ZF2 SkeletonApplication 之后,我创建了一个名为 Authentication 的额外模块,其中包含一个 AuthController 和一个 LoginAction,也在视图目录“authentication/auth”中放置了一个 login.phtml。

当我运行应用程序时出现错误

Zend\View\Renderer\PhpRenderer::render: Unable to render template "authentication/auth/login"; resolver could not resolve to a file

奇怪的是,当我将完整的文件夹“authentication/auth/login.phtml”放在标准应用程序模块视图文件夹中时,它会找到它。

所以 Zend 正在寻找错误的目录。

这是我的 module.config.php(身份验证模块)。

return array(
'router' => array(
    'routes' => array(
        'authentication' => array(
            'type' => 'Zend\Mvc\Router\Http\Literal',
            'options' => array(
                'route'    => '/authentication/login',
                'defaults' => array(
                    'controller' => 'Authentication\Controller\Auth',
                    'action'     => 'login',
                ),
            ),
        ),
    ),
),
'controllers' => array(
    'invokables' => array(
        'Authentication\Controller\Auth' => 'Authentication\Controller\AuthController',
    ),
),
'viewmanager' => array(
    'template_path_stack' => array(
        'authentication' => __DIR__ . '/../view',
    ),
    )
);

这是 AuthController

namespace Authentication\Controller;

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

class AuthController extends AbstractActionController
{
    public function loginAction()
    {
        return new ViewModel();
    }
}

我希望有人能指出我正确的方向。

4

2 回答 2

4

zf2无法解析完整路径。viewManager 正在使用您的模板 pathStack 来查找相对视图。在您的示例中, viewManager 正在寻找此文件: DIR。'/../view/authentication/auth/login.phtml

以其他方式,您可以向 viewManager 添加一个 templateMap,如下所示:

'view_manager' => array(
    'template_map' => array(
        'authentication/auth/login' => __DIR__ . '/../view/where/you/want.phtml',
     )
 );
于 2013-07-28T23:08:13.703 回答
2

更改您的配置:

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

我猜你的水平太落后了。。

如果你的配置在这里:

Authentication/config/module.config.php

那么您只想返回一个级别,然后进入您的视图目录。您的代码会将您带回更高的级别,进入模块目录。

于 2013-07-26T13:19:40.437 回答