【问题标题】:ZF2 url view helper without defined route没有定义路由的 ZF2 url 查看助手
【发布时间】:2014-01-29 19:31:55
【问题描述】:

所以我有一个名为 User 的模块,在这个模块中我有一些控制器,现在我有一个注销控制器,我想在我的视图中为这个控制器创建 url(domain.tld/user/logout)。我试过这样:

$this->url("user",array("controller" => "logout")); //This doesn't work

我也试过这样:

$this->url("user/logout"); //This doesn't work since there isn't a child route defined for the user

所以我的问题是,是否有一个选项可以使用 url 查看帮助程序定义 url 而无需在 module.config.php 中定义路由

这是我的module.config.phpsn-p

return array(
    'router' => array(
        'routes' => array(
            'register' => array(
                'type' => 'Zend\Mvc\Router\Http\Literal',
                'options' => array(
                    'route' => '/user',
                    'defaults' => array(
                        'controller' => 'User\Controller\Index',
                        'action' => 'index',
                    ),
                ),
            ),
            'user' => array(
                'type' => 'Literal',
                'options' => array(
                    'route' => '/user',
                    'defaults' => array(
                        '__NAMESPACE__' => 'User\Controller',
                        'controller' => 'Index',
                        'action' => 'index',
                    ),
                ),
                'may_terminate' => true,
                'child_routes' => array(
                    'default' => array(
                        'type' => 'Segment',
                        'options' => array(
                            'route' => '/[:controller[/:action]]',
                            'constraints' => array(
                                'controller' => '[a-zA-Z][a-zA-Z0-9_-]*',
                                'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
                            ),
                            'defaults' => array(
                            ),
                        ),
                    ),

【问题讨论】:

    标签: php zend-framework zend-framework2


    【解决方案1】:

    尝试了解路由的作用。您要访问的child_route 称为default。因此,基本路线必须是

    $this->url('user/default');
    

    但是,由于没有分配defaults,您还需要为controlleraction 声明所需的参数。这意味着您的路线必须看起来像这样:

    $this->url('user/default', array('controller' => 'Foo', 'action' => 'Bar'));
    

    您定义user/default 路由的方式也不是那么好。 $this->url('user/default') 的第一个示例实际上会创建 url domain.com/user/,这对于路由器来说是一个有效的 URL,但您的 controller 很可能由于缺少参数而失败。本质上,我建议您不要将控制器部分设为可选,而仅将操作设为可选并定义默认操作。

    'route' => '/:controller[/:action]'
    'defaults' => array(
        'action' => 'index'
    )
    

    像这样,所有进来的请求都会保证总是匹配一个特定的控制器,它是indexAction()。当然,您应该考虑只对这条路由下的所有控制器使用此操作。

    【讨论】:

    • 哇,知识渊博,非常感谢,谢谢它有效!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-10
    • 1970-01-01
    相关资源
    最近更新 更多