2013-08-20 137 views
0

現在我有兩個表。類別和網站。我有一個名爲Cars(id:5)的分類和兩個屬於該分類的網站(bmw.com,toyota.com)。 如果我當前想要查看所有Cars的網站,請使用正常的url/categories/view/5。但我想要一個像/ categories/cars /這樣的網址來查看同一頁面。所以基本上,而不是一個行動,我需要在類別表中的一行的名稱。CakePHP:我怎樣才能選擇一個「好」的網址的一個類別的所有元素? (/ category/NAME_OF_CATEGORY)

你能幫我實施嗎? 謝謝 乾杯

回答

1

爲了實現你」再問你需要修改兩件東西:

  • 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頁面瞭解更多。

+0

謝謝你的回答,它的工作原理。但是你忘了在名字的規則之後加上+或*。所以它應該是''name'=>'[a-zA-Z0-9] +'' –

+0

絕對正確,我會編輯我的代碼。我總是縫來忘記那個小細節:) –

+0

我會添加 - 使用存儲url友好名稱的專業領域,因爲包含2個或更多單詞的類別名稱將無法正確顯示。只需添加一個slug字段,您就可以使用Inflector :: slug($ this-> request-> data ['Category'] ['name'])創建它的值。 –

相關問題