【问题标题】:CakePHP 3 - Routing issueCakePHP 3 - 路由问题
【发布时间】:2016-04-07 15:28:45
【问题描述】:

我目前正在将一个 v2 站点迁移到 v3 中,遇到了一个我无法自行修复的路由问题,所以这里可能有人遇到了同样的问题。 所以我有这条路线:

http://example.com/installer-review/postcodes/...

路由规则是:

$routes->connect('/installer-review/postcodes/*',
    ['controller' => 'InstallerReviews', 'action' => 'postcodes'],
);

当我转到 URL 时,它会正确重定向到 InstallerReviews 的操作“邮政编码”,但无论何时我尝试这样做: Router::url(['controller' => 'installer-review', 'action' => 'postcodes']); 要生成指向它生成的 InstallerReviews 操作的链接: http://example.com/installer_review/postcodes

这在 V2 中没有发生,现在 V3 正在发生。

我在路由文件上使用了不同的 classRoutes 但没有任何效果,我一直在使用 InflectedRoute 来增加与以前版本的兼容性,但是在使用 InflectedRoute 调试路由生成时,它有时会将所有“-”转换为“_ " 这打破了我原来的路线规则。

因此,由于这个问题,我尝试创建自定义路由规则,并按照 [http://book.cakephp.org/3.0/en/development/routing.html#custom-route-classes][1] 上的信息进行操作,但如果我这样做,这又是一个令人头疼的问题:

$routes->connect('/installer-review/postcodes/*',
    ['controller' => 'InstallerReviews', 'action' => 'postcodes'],
    ['routeClass' => 'MyRoute']
);

它开始抛出关于已声明类 MyRoute 的错误。

我现在的解决方案是实现我自己的 Url::build 函数,它会覆盖原来的辅助函数,但这对我来说感觉太“hackish”了,所以希望有一个更干净的解决方案。

对大墙感到抱歉,但不想遗漏任何东西,感谢您的帮助

【问题讨论】:

    标签: php cakephp routing cakephp-3.0


    【解决方案1】:

    Router::url(['controller' => 'installer-review', 'action' => 'postcodes']);

    这是不正确的。在 3.x 中,您必须使用 'controller' 的类名,所以它应该是 Router::url(['controller' => 'InstallerReviews', 'action' => 'postcodes']);

    【讨论】:

    • 感谢您的回复。在此路由问题中发现这有点“帮助”,如果我使用控制器 => 'installer-review' 它会生成一个 example.com/installer-review 但如果我使用 InstallerReviews 作为控制器它会生成一个 installer_reviews (复数)它不能以两种方式起作用,它有 _ 和复数形式。这在 V2 中就是这样并且有效,也许对于 V3,我们可以将控制器更改为 InstallerReview 以生成正确的路径,但这仍然不能解决下划线问题
    猜你喜欢
    • 2012-03-03
    • 2012-11-28
    • 2016-07-18
    • 2011-05-18
    • 1970-01-01
    • 2012-02-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多