CakePHP:如何用“选择”选择一个类别的所有元素;“尼斯”;网址?(/类别/类别名称)

CakePHP:如何用“选择”选择一个类别的所有元素;“尼斯”;网址?(/类别/类别名称),php,cakephp,controller,Php,Cakephp,Controller,现在我有两张桌子。类别和网站。我有一个类别叫做汽车(id:5)和两个属于这个类别的网站(bmw.com,toyota.com)。 如果我现在想查看所有汽车的网站,我会使用普通的url/categories/view/5。但是我希望有一个像/categories/cars/这样的url来查看同一个页面。因此,基本上,我需要的不是动作,而是类别表中的行名称 你能帮我把这个归档吗? 非常感谢。 干杯这很简单-只要通读有关路由的非常深入的文档,您将在几分钟内解决它: 为了实现您的要求,您需要对两件事进行

现在我有两张桌子。类别和网站。我有一个类别叫做汽车(id:5)和两个属于这个类别的网站(bmw.com,toyota.com)。 如果我现在想查看所有汽车的网站,我会使用普通的url/categories/view/5。但是我希望有一个像/categories/cars/这样的url来查看同一个页面。因此,基本上,我需要的不是动作,而是类别表中的行名称

你能帮我把这个归档吗? 非常感谢。
干杯

这很简单-只要通读有关路由的非常深入的文档,您将在几分钟内解决它:


为了实现您的要求,您需要对两件事进行更改:

  • 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]+'
    )
);
public function viewByName($name = null) {
    $option = array(
        'conditions' => array('Category.name'=>$name)
    );
    $category = $this->Category->find('first', $options);
    $this->set('category', $category);
}
在app/Controller/CategoriesController.php上:

Router::connect('/categories/:name', array(
       'controller' => 'categories', 'action' => 'viewByName'
    ),
    array(
        'pass' => 'name',
        'name' => '[a-zA-Z0-9]+'
    )
);
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
中,并对其稍加润色

我给你简单的最小值,所以出于安全原因,请添加检查变量内容等等


通过查看上的页面,您还可以对此有更多的了解。

谢谢您的回答,它很有效。但您只是忘记在名称规则后添加+或*。所以它应该是绝对正确的,我会编辑我的代码。我总是忘记那个小细节:)我会添加-使用存储url友好名称的特殊字段,因为包含2个或更多单词的类别名称不会正确显示。只需添加一个slug字段,您就可以在创建时使用拐点::slug($this->request->data['Category']['name'])填充它的值;