ZF2视图url帮助程序忽略控制器和操作


ZF2 view url helper ignores controller and action

module/Applation/config/module.config.php

'router' => array(
    'routes' => array(
        'home' => array(
            'type' => 'Zend'Mvc'Router'Http'Literal',
            'options' => array(
                'route'    => '/',
                'defaults' => array(
                    'controller' => 'Application'Controller'Index',
                    'action'     => 'index',
                ),
            ),
        ),
        'application' => array(
            'type'    => 'Segment',
            'options' => array(
                'route'    => '/application[/:action][/]',
                'defaults' => array(
                    '__NAMESPACE__' => 'Application'Controller',
                    'controller'    => 'Index',
                    'action'        => 'index',
                ),
            ),
            'may_terminate' => true,
        ),
    ),
),

在我的IndexController.php中,我有一个indexAction((和validateAction((-(只是试验它们实际上没有函数(

我可以很好地欣赏风景。但我在观点中写道:

echo $this->url('application',array('action' => 'validate'));

它只是回声

/application/

我如何才能让它与动作呼应路径?我已经试过了我能想到的一切,但找不到任何合理的文件,也找不到其他有同样问题的人。

以下是配置的页面加载时的var_dump:

array(5) {
["router"]=>
array(1) {
    ["routes"]=>
    array(2) {
    ["home"]=>
    array(2) {
        ["type"]=>
        string(28) "Zend'Mvc'Router'Http'Literal"
        ["options"]=>
        array(2) {
        ["route"]=>
        string(1) "/"
        ["defaults"]=>
        array(2) {
            ["controller"]=>
            string(28) "Application'Controller'Index"
            ["action"]=>
            string(5) "index"
        }
        }
    }
    ["application"]=>
    array(2) {
        ["type"]=>
        string(7) "segment"
        ["options"]=>
        array(2) {
        ["route"]=>
        string(25) "/application[/:action][/]"
        ["defaults"]=>
        array(3) {
            ["__NAMESPACE__"]=>
            string(22) "Application'Controller"
            ["controller"]=>
            string(5) "Index"
            ["action"]=>
            string(5) "index"
        }
        }
    }
    }
}
["service_manager"]=>
array(1) {
    ["factories"]=>
    array(1) {
    ["translator"]=>
    string(45) "Zend'I18n'Translator'TranslatorServiceFactory"
    }
}
["translator"]=>
array(2) {
    ["locale"]=>
    string(5) "en_US"
    ["translation_file_patterns"]=>
    array(1) {
    [0]=>
    array(3) {
        ["type"]=>
        string(7) "gettext"
        ["base_dir"]=>
        string(57) "/home/marshall/html/module/Application/config/../language"
        ["pattern"]=>
        string(5) "%s.mo"
    }
    }
}
["controllers"]=>
array(1) {
    ["invokables"]=>
    array(1) {
    ["Application'Controller'Index"]=>
    string(38) "Application'Controller'IndexController"
    }
}
["view_manager"]=>
array(7) {
    ["display_not_found_reason"]=>
    bool(true)
    ["display_exceptions"]=>
    bool(true)
    ["doctype"]=>
    string(5) "HTML5"
    ["not_found_template"]=>
    string(9) "error/404"
    ["exception_template"]=>
    string(11) "error/index"
    ["template_map"]=>
    array(4) {
    ["layout/layout"]=>
    string(73) "/home/marshall/html/module/Application/config/../view/layout/layout.phtml"
    ["application/index/index"]=>
    string(83) "/home/marshall/html/module/Application/config/../view/application/index/index.phtml"
    ["error/404"]=>
    string(69) "/home/marshall/html/module/Application/config/../view/error/404.phtml"
    ["error/index"]=>
    string(71) "/home/marshall/html/module/Application/config/../view/error/index.phtml"
    }
    ["template_path_stack"]=>
    array(1) {
    [0]=>
    string(53) "/home/marshall/html/module/Application/config/../view"
    }
}
}

如果您从ZendSkeletonApplication开始,您是否已从应用程序模块的配置中删除了预定义的"应用程序"路由?我在最新的ZendSkeletonApplication中复制这一点的唯一方法是在已经定义的路由之前定义应用程序路由。

例如,module.config.php中的路由部分适用于我:

'router' => array(
    'routes' => array(
        'home' => array(
            'type' => 'Zend'Mvc'Router'Http'Literal',
            'options' => array(
                'route'    => '/',
                'defaults' => array(
                    'controller' => 'Application'Controller'Index',
                    'action'     => 'index',
                ),  
            ),  
        ),  
        'application' => array(
            'type' => 'segment',
            'options' => array(
                'route'    => '/application[/:action][/]',
                'defaults' => array(
                    '__NAMESPACE__' => 'Application'Controller',
                    'controller'    => 'Index',
                    'action'        => 'index',
                ),  
            ),
        ),  
    ),  
)

使用这个,它工作:

<?= $this->url('application', array('action' => 'validate')) ?>
// Produces /application/validate/