爲了實現你」再問你需要修改兩件東西:
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'])創建它的值。 –