为了实现你”再问你需要修改两件东西:
app/Config/route.php
文件。
app/Controller/CategoriesController.php
文件。
在app/Config/route.php
:
Router::connect('/categories/:name', array(
'controller' => 'categories', 'action' => 'viewByName'
),
array(
'pass' => 'name',
'name' => '[a-zA-Z0-9]+'
)
);
在app/Controller/CategoriesController.php
:
public function viewByName($name = null) {
$option = array(
'conditions' => array('Category.name'=>$name)
);
$category = $this->Category->find('first', $options);
$this->set('category', $category);
}
然后可以的app/View/Categories/view.ctp
的内容复制到viewByName.ctp
把它擦亮了一下。
我给你的最低限度,所以请为安全原因添加检查变量内容等。
您还可以通过查看Cake Documentation上的Routing页面了解更多。
谢谢你的回答,它的工作原理。但是你忘了在名字的规则之后加上+或*。所以它应该是''name'=>'[a-zA-Z0-9] +'' –
绝对正确,我会编辑我的代码。我总是缝来忘记那个小细节:) –
我会添加 - 使用存储url友好名称的专业领域,因为包含2个或更多单词的类别名称将无法正确显示。只需添加一个slug字段,您就可以使用Inflector :: slug($ this-> request-> data ['Category'] ['name'])创建它的值。 –