4

模块/应用程序/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"
    }
}
}
4

1 回答 1

1

如果您从ZendSkeletonApplication开始,您是否从 Application 模块的配置中删除了预定义的“应用程序”路由?我可以在最新的 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/
于 2012-12-22T15:56:36.433 回答