【问题标题】:CakePHP Routing - [home]/slug as URLCakePHP 路由 - [home]/slug 作为 URL
【发布时间】:2011-09-07 00:26:51
【问题描述】:

我正在尝试掌握 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 即时生成路线。

【问题讨论】:

    标签: cakephp routing cakephp-1.3


    【解决方案1】:

    您需要小心地将某些内容映射到域名之后的第一个路径。这意味着您将打破控制器/动作/参数/参数范式。你可以这样做,但这可能意味着你需要在你的路由文件中为你的站点定义每个 url,而不是使用 Cake 的路由魔法。

    另一种方法可能是将 /v/ 用于场所,将 /e/ 用于活动,以保持您的 url 简短,但将 url 分解为正常范例。

    如果您仍想执行您在此处请求的操作,您可以执行以下操作。它将 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_-]+'
        )
    );
    

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

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

    【讨论】:

      【解决方案2】:

      首先,您没有将 www.example.com/slug 连接到 www.example.com/venues/view/slug,而是将 /slug 连接到控制器操作。像这样:

      Router::connect('/:slug',
                      array('controller' => 'venues', 'action' => 'view'),
                      array('pass' => array('slug'));
      

      要生成适当的链接,您可以反向执行相同的操作:

      $this->Html->link('Foo',
              array('controller' => 'venues', 'action' => 'view', 'slug' => 'bar'))
      

      这应该会导致链接/bar。

      路由/:slug URL 的问题在于它是一个包罗万象的路由。在此之前,您需要仔细定义您可能要使用的所有其他路由。

      【讨论】:

      • 男人需要custom route class
      • @Dunham 他现在呢?干什么用的?
      • 如你所说,它现在正在捕获所有路线。
      • 感谢您的评论 - 我没有完全理解在路由中传递参数。我看到了将 /whatever 与某物联系起来的困难。我最初的想法是以某种方式询问数据库 /whatever 是否是 slug,如果不是,则让 cake 执行其默认操作。 /场地/蛞蝓!
      猜你喜欢
      • 2011-07-23
      • 2012-02-09
      • 2016-05-11
      • 2018-12-21
      • 1970-01-01
      • 2014-06-28
      • 2012-02-22
      • 1970-01-01
      • 2015-11-18
      相关资源
      最近更新 更多