2010-12-05 43 views
0

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

但我的客户要求我有url作为example.com/category/Food,没有数字ID为更好的搜索引擎优化。

我的问题是,CakePHP路由可以从数据库中获取类别ID的名称并将其显示在url中?如果是的话,请亲切指导我实现这一目标,因为我对此非常不满。

任何帮助将不胜感激。

回答

0

你可能有这样的事情在你的路线:

Routes::connect('/category/*', array('controller' => 'categories', 'action' => 'view')); 
在categories_controller ::视图($ catName)

然后,你检查这是否也是如此:

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

有许多解决这个问题的方法,这只是我记得手中的一个。

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')); 
} 

希望这会帮助你。