【问题标题】:Mix action and slug in zend framework 2 route在 zend 框架 2 路线中混合动作和 slug
【发布时间】:2014-09-03 15:37:39
【问题描述】:

我有这个路由配置:

'router' => array(
    'routes' => array(
        'blog' => array(
            'type' => 'segment',
            'options' => array(
                'route' => '/blog',
                'defaults' => array(
                    'controller' => 'Blog\Controller\Blog',
                    'action' => 'list',
                ),
            ),
            'may_terminate' => true,
            'child_routes' => array(
                'create' => array(
                    'type' => 'literal',
                    'options' => array(
                        'route' => '/create',
                        'defaults' => array(
                            'action' => 'create',
                        ),
                    ),
                    'may_terminate' => true,
                ),
                'view' => array(
                    'type' => 'segment',
                    'options' => array(
                        'route' => '/[:slug]',
                        'constraints' => array(
                            'slug' => '[a-zA-Z][a-zA-Z0-9_-]*',
                        ),
                        'defaults' => array(
                            'action' => 'view',
                        ),
                    ),
                    'may_terminate' => true,
                )
            ),
        ),
    ),
),

意图是使用以下网址:

  1. /blog -> 用于列出所有博客文章
  2. /blog/create -> 用于创建新帖子
  3. /blog/this-is-the-post-title 用于查看一篇帖子

路由配置适用于第 1 点和第 3 点,但不适用于第 2 点(我得到“请求的控制器无法调度请求。”),有人能解释一下为什么吗?哪个是正确的配置?

【问题讨论】:

  • 在查看后创建路由定义,我认为该路由匹配它找到的最后一条路由
  • 你想对了,它有效!非常感谢。

标签: routes zend-framework2 slug


【解决方案1】:

Router 将返回它可以在一组相同级别的子路由中找到的最后一个路由定义。

对于同一级别的子路由,将Segment 路由定义放在Literals 之前。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-15
    • 1970-01-01
    • 2011-05-14
    相关资源
    最近更新 更多