CakePHP 3 - 路由问题

时间:2016-01-04 02:41:50

标签: php cakephp routing cakephp-3.0

我目前正在将v2网站迁移到v3,并遇到了我无法自行解决的路线问题,因此周围的人可能会遇到同样的问题。 所以我有这条路线:

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

路线规则是:

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

当我转到网址时,它会正确地重定向到动作" postcodes" InstallerReviews但我随时尝试: Router :: url([' controller' =>' installer-review',' action' =>' postcodes']); 要生成指向InstallerReviews操作的链接,它会生成: http://example.com/installer_review/postcodes

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

我在路线文件中使用了不同的classRoutes,但没有任何效果,我一直在使用InflectedRoute来提高与之前版本的兼容性,但在某些时候使用InflectedRoute调试路径生成时它会转换所有&# 34; - "进入" _"这破坏了我原来的路线规则。

因此,由于这个问题,我尝试创建自定义路由规则,并按照[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函数,它覆盖了原始的帮助函数,但这种感觉太过于“#34; hackish"对我来说,希望有一个更清洁的解决方案。

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

1 个答案:

答案 0 :(得分:0)

  

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

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