【问题标题】:Zend Framework 2 - trailing slashes in routeZend Framework 2 - 路径中的尾部斜杠
【发布时间】:2014-08-25 06:58:59
【问题描述】:

在 Zend 模块中遵循结构

模块名称

  • 测试
    • 配置
    • 源代码
    • 查看
      • 布局
      • 测试
        • 索引
          • index.phtml
        • 登录
          • index.phtml
        • 注册
          • index.phtml
    • 模块.php

现在访问网站时,例如登录文件将如下http://justsite.something.com/login

问题需要更改为http://justsite.something.com/login/,因为我在登录文件夹中添加了另一个文件夹索引,并且像这样放置了 index.phtml 文件

  • 登录
    • 索引
      • index.phtml

但这似乎不起作用。我应该更改 LoginController.php 以使其正常工作吗?

module.confing.php

'router' => array(
    'routes' => array(
        'test' => array(
            'type' => 'Literal',
            'options' => array(
                'route' => '/test',
                'defaults' => array(
                    '__NAMESPACE__' =>'Test\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(),
                    ),
                ),
            ),
        ),
        'login' => array(
            'type'    => 'Literal',
            'options' => array(
                'route'    => '/login/', // PUT HERE WHATEVER YOU WANT
                'defaults' => array(  // AND MAP THAT URL TO CONTROLLER/ACTION
                    '__NAMESPACE__' =>'Test\Controller',                    
                    'controller' => 'Login',
                    'action'     => 'index',
                ),
            ),
        ),
    ),
),

已修复刚刚添加

'may_terminate' => true,
            'child_routes'  => array(
                'default' => array(
                    'type' => 'Segment',
                    'options' => array(
                        'route' =>
                        '/[:controller[/:action]/]',

【问题讨论】:

  • 为什么路径后面要带斜线,后面不带任何字符串?
  • 这是一个项目的要求。

标签: php zend-framework2 directory-structure


【解决方案1】:

就像@tasmaniski 写的那样,您不需要更改 LoginController 或其他任何东西,这一切都取决于您的路由配置。你不是唯一一个在他的路线中想要“尾随斜杠”的人,here you can read how you can achieve this

显然你需要把它放在[]之间

'route'    => '/[:controller[/[:action[/]]]]',

希望能为你解决。

注意 有人建议为此使用重写规则,我认为这可能也值得一提

【讨论】:

  • 看看我在主帖中的 Fixed 块。
  • @user3904245 解决方案中的星号不会使控制器和操作成为可选吗?
  • 我只是把它们展示我添加的内容。误会我会删除。
  • 请注意,要使其正常工作,路由必须是'type' => 'Segment'
【解决方案2】:

无论您的前代结构是什么。您需要在配置文件 module.config.php 的“路由”部分进行更改。

您只需要在末尾加上斜线的“路由”值并将其映射到控制器/动作。

'routes' => array(
    'login' => array(
        'type'    => 'Zend\Mvc\Router\Http\Literal',
        'options' => array(
            'route'    => '/login/', // PUT HERE WHATEVER YOU WANT
            'defaults' => array(     // AND MAP THAT URL TO CONTROLLER/ACTION
                'controller' => 'Application\Controller\Login',
                'action'     => 'index',
            ),
        ),
    ),
)

【讨论】:

  • 我认为你给了我需要的东西,但是当我在上面的 module.confing.php 部分进行更改时,它不起作用。
  • hm.. 尝试设置其他内容,例如 'route' => '/dummy-test/' 并告诉您在浏览器中输入时出现的错误url/dummy-test ??
  • 你的想法很好,但所有需要的都在 Fixed 块中。还是谢谢。
  • :) 在那个固定块中就是我所说的。把路线部分斜线放在最后....
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-04
  • 2013-02-28
  • 1970-01-01
  • 1970-01-01
  • 2023-03-10
相关资源
最近更新 更多