ZF2视图url helper忽略控制器和动作

时间:2012-12-22 06:01:29

标签: php zend-framework2

模块/的applcation /配置/ 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/

如何通过动作回应路径?我已经尝试了所有我能想到的东西,并且找不到任何合理的文件或其他有同样问题的人。

这是config的页面加载时的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"
    }
}
}

1 个答案:

答案 0 :(得分:1)

如果您从ZendSkeletonApplication开始,是否已从应用程序模块的配置中删除了pre-defined 'application' route?我可以在最新的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/