更改module.config.php的路由值后加载视图时出错 - Zend Framework

时间:2013-03-01 20:23:40

标签: url-routing zend-framework2

这个问题与Zend Framework应用程序版本:2.1.3有关。我,开发人员,是Zend Framework的新手,非常重视您的帮助。

我正在为一个教会的“捐助者管理系统”制作一个模块。我正在处理的模块称为'QueryBuilder'。以前的模块很好,效果很好。我使用Zend Helper for Sublime Text,它为module.config.php生成了类似的东西

<?php
/**
 * 
 * @package QueryBuilder
 */
return array(
    'controllers' => array(
        'invokables' => array(
            'QueryBuilder\Controller\QueryBuilder' => 'QueryBuilder\Controller\QueryBuilderController',
        ),
    ),

    // The following section is new and should be added to your file
    'router' => array(
        'routes' => array(
            'querybuilder' => array(
                'type'    => 'segment',
                'options' => array(
                    'route'    => '/querybuilder[/:action][/:id]',
                    'constraints' => array(
                        'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
                        'id'     => '[0-9]+',
                    ),
                    'defaults' => array(
                        'controller' => 'QueryBuilder\Controller\QueryBuilder',
                        'action'     => 'index',
                        //'action'     => 'search',
                        //'action'     => 'recent',
                    ),
                ),
            ),
        ),
    ),

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

在制作一些成功的模块后,我决心要有一点乐趣,我改变了router,如下所示。

<?php
/**
 * 
 * @package QueryBuilder
 */
return array(
    'controllers' => array(
        'invokables' => array(
            'QueryBuilder\Controller\QueryBuilder' => 'QueryBuilder\Controller\QueryBuilderController',
        ),
    ),

    // The following section is new and should be added to your file
    'router' => array(
        'routes' => array(
            'querybuilder' => array(
                'type'    => 'segment',
                'options' => array(
                    'route'    => '/query-builder[/:action][/:id]',
                    'constraints' => array(
                        'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
                        'id'     => '[0-9]+',
                    ),
                    'defaults' => array(
                        'controller' => 'QueryBuilder\Controller\QueryBuilder',
                        'action'     => 'index',
                        //'action'     => 'search',
                        //'action'     => 'recent',
                    ),
                ),
            ),
        ),
    ),

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

注意:只有route值已从/querybuilder...更改为/query-builder...。当我试图访问路线http://konnections/query-builder时,我收到了一些错误,但我没有通过它。

想知道为什么我不想成为英雄,我将值更改回默认值。并尝试加载http://konnections/querybuilder,但也出错了。

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

否则在模块的代码中您可以找到单词query-builder。如此常识说无法访问query-builder/query-builder/index

认为它可能是一些缓存,我在整个应用程序文件夹中查找它。然后我重新启动Apache,计算机,删除并创建了一个名为QueryBuilder的新模块,但仍然存在错误。

注意:这是一个没有做任何事情的插件。我只更改了route值,认为它会使URL看起来更整洁。

以下是我最终的[图片]: The Error I get accessing the route

不,这不是IE,因为我在Chrome中尝试过(也没有访问query-builder网址。)

整个Zend文件夹(网站的根目录)没有引用query-builder。它来自哪里,我该如何改变呢?

提前致谢。

2 个答案:

答案 0 :(得分:1)

来自ZF1系列(http://framework.zend.com/manual/1.12/en/zend.controller.basics.html),ZF2相同但未在手册中找到此描述。

案例命名约定 由于人们在键入链接时保持区分大小写是众所周知的不一致,因此Zend Framework实际上将路径信息规范化为小写。当然,这会影响您对控制器和操作的命名方式......或者在链接中引用它们。 如果您希望控制器类或操作方法名称具有多个MixedCasedWords或camelCasedWords,则需要将URL上的这些单词与“ - ”或“。”分开。 (尽管您可以配置使用的字符)。 举个例子,如果你要在FooBarController :: bazBatAction()中进行操作,你可以在url上将它引用为/ foo-bar / baz-bat或/foo.bar/baz.bat。

答案 1 :(得分:0)

我是紫燕,一开始就问这个问题。

在谷歌找不到解决方案之后,我想知道制作另一个模块并最终遇到了同样的困境。困惑我做了一个Zend Framework的新安装,并制作了一个同名的模块。

Zend\View\Renderer\PhpRenderer::render: Unable to render template "query-builder/query-builder/index"; resolver could not resolve to a file没有消失。

知道这不是重新配置的事情,我看得更近了。

似乎在每个单词之间划了一个划线。我就像Zend疯了!但不,它似乎是从每个大写字母拆分模块名称并使用' - '(短划线)连接它们。

在我的情况下,QueryBuilder变为query-builder或名为HelloModules的插件将为hello-modules

因此,视图管理器似乎在寻找../views/query-builder/query-builder/index

就我而言,ZF Helper for Sublime文本需要了解情况。如果你可以在GitHub修复插件,那就太好了。我会试一试自己。

我找不到任何证明我的主张,也没有时间查看源代码。如果有人提供一些链接会很高兴。