从 url 中删除控制器名称不适用于 cakephp 中的多个控制器

Posted

技术标签:

【中文标题】从 url 中删除控制器名称不适用于 cakephp 中的多个控制器【英文标题】:Removing controller name from url does not work for more than one controller in cakephp 【发布时间】:2015-11-02 04:40:46 【问题描述】:

我想从 url 中删除控制器名称。它适用于一个控制器,但不适用于多个控制器。这是我在 Route.php 中的代码:

 Router::connect('videos/:action', array('controller' => 'videos'));
 Router::connect('/:action', array('controller' => 'frontends')); 

但是当我尝试访问 http://local.tbn24.dev/videos 时,它显示:

错误:控制器 FrontendsController 中未定义动作视频

证明上面的url参考

Router::connect('/:action', array('controller' => 'frontends'));

我希望这个 url 能够访问视频控制器索引功能。我怎样才能同时使用Route::connect() 配置?

【问题讨论】:

我如何将local.tbn24.dev/videos 引用到“控制器”=>“视频”和“动作”=>“索引” 【参考方案1】:

但是当我尝试访问http://local.tbn24.dev/videos

没有路线

在定义的两条路由中,这条不匹配上面的url,因为它只是一个路径段:

Router::connect('videos/:action', array('controller' => 'videos'));

因此,它将匹配 catch all 路线,videos 被解释为要查找的操作。

另请注意,如果没有前导斜杠,路由将不会匹配任何请求,因为它们将始终以前导斜杠开头

只匹配控制器名称的路由

要定义匹配/videos 的路由 - 要么定义匹配特定字符串的路由:

Router::connect('/videos', array('controller' => 'videos', 'action' => 'index'));

或者,使用限制模式定义路由:

Router::connect(
    '/:controller', 
    array('action' => 'index'),
    array('controller' => 'videos|stuff'),
);

有关路由的更多信息,请查看the documentation 了解您正在使用的 CakePHP 版本。

【讨论】:

以上是关于从 url 中删除控制器名称不适用于 cakephp 中的多个控制器的主要内容,如果未能解决你的问题,请参考以下文章

如何从 CodeIgniter 中的 URL 中删除控制器和函数名称

window.location.href 不适用于 url 方案

FriendlyID 历史记录不适用于 Rails 中更新的模型 url

弹簧休息控制器不适用于文件上传

滑动删除不适用于从左到右滑动

在页面刷新之前从 URL 中删除查询字符串