从CakePHP路由中的数据库中获取数据

时间:2010-12-05 17:18:14

标签: routes cakephp-1.2

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

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

我的问题是,CakePHP路由可以从数据库中获取类别ID的名称并在URL中显示吗?如果是,那么请指导我实现这一目标,因为我很难坚持这一点。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

首先在类别表中创建名为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'));
}

希望这会对你有所帮助。

答案 1 :(得分:0)

您可以在路线中找到类似的内容:

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
}

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