2013-08-20 110 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'])创建它的值。 –

相关问题