cakephp一种视图,适用于多种类型的结果

时间:2012-01-31 06:44:02

标签: controller cakephp-2.0 cakephp-appmodel

我有一些控制器逻辑:

public function seafood() {
$this->set('title', 'Seafood restaurants in and near Gulf Shores, AL');

$this->paginate['Restaurant']=array(
        'limit'=>9,
        'order' => 'RAND()',

        'conditions'=>array(

                'Restaurant.active'=>1,
                'Restaurant.seafood'=>'Seafood'
                )   
    );
$data = $this->paginate('Restaurant');
$this->set('seafood', $data);




}

这会重复13次,有13个不同的视图页面标有“海鲜,海滨,牛排馆”等。视图完全相同,真实情况相同,除了控制器必须通过特定类型的餐厅找到。有人可以向我解释如何制作一个可以在www.site.com/restaurants/seafood上显示的视图文件吗?

说实话,我的所有结果页面都有一些变化。我告诉蛋糕分页(并且通常包含)某些模型的数据,然后将其粘贴到与所有其他页面几乎相同(带有图标或两个差异)的视图中。我正在建设一个网站,这是“在x海滩小镇做的事情之一”,所以我有餐厅,住宿地点,购物,夜总会,高尔夫球场等(这里到处都是)。

我的老板给了我这个庞大的网站来构建,我真的不太了解任何编程逻辑。我想在这里坚持DRY概念,这样我才能真正学到这些东西。

更新

好的,我确保我的路线在文件中有这个:

Router::connect('/restaurants/:action', array('controller'=>'restaurants'));

我保存了我的seafood.ctp文件,然后取出了我的海鲜()函数并将其插入:

 public function restaurants($restaurantType) {

$this->set('title', $restaurantType.' restaurants in and near Gulf Shores, AL');

$this->paginate['Restaurant']=array(
        'limit'=>9,
        'order' => 'RAND()',

        'conditions'=>array(

                'Restaurant.active'=>1,
                'Restaurant.seafood'=>$restaurantType
                )   
    );
$data = $this->paginate('Restaurant');
$this->set($restaurantType, $data);
}   

当我访问www.site.com/restaurants/seafood的页面时,蛋糕告诉我,我的控制器缺少方法海鲜()。我错过了什么?

2 个答案:

答案 0 :(得分:1)

为什么不给控制器操作一个通用名称,如

public function restaurant($restaurantType) {

// Pass the parameter in via the URL for the restaurant type and use that parameter 
// as your find condition as well as the value for the title of the page

}

然后,您链接的网址就会显示出来 http://www.whatever.com/restaurant/seafood

答案 1 :(得分:1)

试试这个:

Router::connect('/restaurants/:restaurantType', array('controller'=>'restaurants', 'action' => 'restaurants'));

它找不到它的原因是因为你仍在使用标准:action参数。您只需要更改它以使操作保持不变,这样就可以将其作为参数传递给操作。