Routes 在CakePHP路由中从数据库获取数据

Routes 在CakePHP路由中从数据库获取数据,routes,cakephp-1.2,Routes,Cakephp 1.2,我的CakePHP应用程序中有一个URL,看起来像。其中category是网站控制器中操作的名称。我已经使用CakePHP路由文件删除了控制器名称。1是食品类别的id,其记录需要从数据库中获取 但是我的客户要求我的url为example.com/category/Food,没有数字id,以便更好地搜索引擎优化 我的问题是CakePHP Routes能否从数据库中获取类别id的名称并在url中显示它?如果是的话,那么请引导我实现这一目标,因为我在这方面陷入了困境 任何帮助都将不胜感激。您可以在您的

我的CakePHP应用程序中有一个URL,看起来像。其中category是网站控制器中操作的名称。我已经使用CakePHP路由文件删除了控制器名称。1是食品类别的id,其记录需要从数据库中获取

但是我的客户要求我的url为example.com/category/Food,没有数字id,以便更好地搜索引擎优化

我的问题是CakePHP Routes能否从数据库中获取类别id的名称并在url中显示它?如果是的话,那么请引导我实现这一目标,因为我在这方面陷入了困境


任何帮助都将不胜感激。

您可以在您的路线中使用以下内容:

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
}

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

首先在categories表中创建一个名为category\u url\u 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'));
}
希望这对你有帮助