CakePHP路由 - [home]/slug作为URL

Wil*_*ill 2 routing cakephp cakephp-1.3

我正试图掌握Cake的路由,但我没有找到解决我的特定问题的运气.

我想将www.example.com/slug映射到www.example.com/venues/view/slug,其中slug是特定场所记录的URL友好名称.

我还想将www.example.com/slug/events映射到www.example.com/events/index/venue:slug.

在阅读了关于路由的CakePHP文档后,几次,我不是更明智的.我理解如何为每个场地创建这些路线,但我不确定如何让Cake动态生成路线.

Sco*_*ell 10

您需要小心将某些内容映射到域名后的第一个路径.这意味着您将破坏controller/action/param/param范例.您可以这样做,但这可能意味着您需要在路径文件中定义站点的每个URL,而不是使用Cake的路由魔法.

替代方案可能是使用/ v /用于场所和/ e /用于事件以保持您的网址短,但打破正常范例的网址.

如果您仍想按照此处的要求执行操作,则可以执行以下操作.它将slug限制为字母,数字,破折号和下划线.

Router::connect(
    '/:slug', 
    array(
        'controller' => 'venues', 
        'action' => 'view'
        ), 
    array(
    'slug' => '[a-zA-Z0-9_-]+'
    )
);
Router::connect(
    '/:slug/:events', 
    array(
        'controller' => 'events', 
        'action' => 'index'
        ), 
    array(
    'slug' => '[a-zA-Z0-9_-]+'
    )
);
Run Code Online (Sandbox Code Playgroud)

在您的控制器中,您将使用以下内容访问slug(以第一个路径为例).

function view(){
    if(isset($this->params['slug'])){
        //Do something with your code here.
    }
}
Run Code Online (Sandbox Code Playgroud)