【问题标题】:Fetching data from database in CakePHP Routes在 CakePHP Routes 中从数据库中获取数据
【发布时间】:2010-12-05 17:18:14
【问题描述】:

我的 CakePHP 应用程序中有一个类似于 http://www.example.com/category/1 的 URL。其中 category 是网站控制器中的操作名称。我使用 CakePHP Routes 文件删除了控制器名称。其中1是Food类别的id,需要从数据库中获取记录。

但我的客户要求我将 url 作为 example.com/category/Food,没有数字 id 以获得更好的 SEO。

我的问题是,CakePHP Routes 可以从数据库中获取类别 ID 的名称并将其显示在 url 中吗?如果是,请指导我实现这一目标,因为我非常坚持这一点。

任何帮助将不胜感激。

【问题讨论】:

    标签: routes cakephp-1.2


    【解决方案1】:

    首先在类别表中创建一个名为 category_url_title 的字段。然后添加如下路由

    //Route dynamic pages
    Router::connect(
        '/categories/:category_url_title',
        array('controller'=>'categories', 'action'=>'view'),
        array(
            'category_url_title' => '(?!add|view|delete\b)\b[a-zA-Z0-9_-]+',
            'pass'=>array('category_url_title')
        )
    );
    

    类别控制器中的查看方法如下所示

    function view($category_url_title=null) {
    
        $category = $this->Category->find('first', array('conditions'=> array('Category.category_url_title'=>$category_url_title)));
        $this->set(compact('category'));
    }
    

    希望这会对你有所帮助。

    【讨论】:

      【解决方案2】:

      您的路线中可以有这样的东西:

      Routes::connect('/category/*', array('controller' => 'categories', 'action' => 'view'));
      

      然后在您的 categories_controller::view($catName) 中,检查这是否成立:

      if($this->Category->hasAny(array('name' => $catName))) {
         // your code here
      } else {
         // set message in the view saying category not found
      }
      

      有很多方法可以解决这个问题,这只是我记得的一种。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-18
        • 1970-01-01
        • 1970-01-01
        • 2018-04-29
        • 1970-01-01
        • 2013-08-29
        相关资源
        最近更新 更多