我的CakePHP应用程序中有一个类似于http://www.example.com/category/1的URL。其中category是网站控制器中操作的名称。我已使用CakePHP Routes文件删除了控制器名称。 1是Food类别的id,其记录需要从数据库中获取。
但我的客户要求我将url作为example.com/category/Food,没有数字ID以获得更好的SEO。
我的问题是,CakePHP路由可以从数据库中获取类别ID的名称并在URL中显示吗?如果是,那么请指导我实现这一目标,因为我很难坚持这一点。
非常感谢任何帮助。
答案 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
}
有很多方法可以解决这个问题,这只是我记得的一个方法。