如何设置别名为控制器的自定义路由


How to set custom Route with alias as controller

我使用Cakephp2.0开发的CMS有两个主要控制器:

  • 页码
  • 类别

我试图将route.php设置为具有以下行为:

如果用户请求页面,URL应该类似于:

http://www.something.com/pages-alias/article-name/id/whatever

如果用户地址为类别,则URL应该类似于:

http://www.something.com/categories-alias/category-name/id/whatever

请注意,以下类别和页面我使用了"别名"。举例说明,当地餐馆网站的URL为:

http://www.something.com/course/wild-boar/68/2013-07-18

其中"课程"将替换"页面"。和

http://www.something.com/menu/valentine-day/8/2014-01-30

其中"菜单"将取代"类别"。

视图不应在URL或路由规则中进行说明。

这两种情况都会让控制器在进行一些内部检查后自动选择视图(具有子类别、仅具有一页或多页等),从而被控制器覆盖。

我已经得到了一些关于使用某种"别名"来构建路由规则的线索,但不幸的是,文档对我来说不够清楚,无法管理对象来创建自己的自定义路由。

那么,有人能试着用一些不同于CakePhP2.x文档中的例子来解释它吗?

提前感谢任何有帮助的人。为了参考,我会把我已经读过的链接粘贴到这里:

  • 路由-Cakephp 2.0文档
  • 来自Frank的烘焙文章(我想这是针对v1.3的)

这可能就是您想要的:

 Router::connect(
    '/:category_alias/:category_name/:id/:whatever', 
    array('controller' => 'Article', 'action' => 'view'), 
    array('pass' => array('category_alias','category_name','id','whatever'), 
    'id' => '[0-9]+')
 );

ofc你可以删除这个id的验证器。或者添加更多的验证器:)

然后您可以使用ArticleController.php 中的功能

public function view($category_alias, $category_name, $id, $whatever) {}