【发布时间】:2012-01-31 06:44:01
【问题描述】:
我有一些控制器逻辑:
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 上的视图文件吗?
说实话,我所有的结果页面都在此基础上有所不同。我告诉 cake 对某些模型的数据进行分页(通常包含),然后将其粘贴到与所有其他页面几乎相同(带有一个或两个图标)的视图中。我正在建立一个网站,它是“在 x 海滩小镇可以做和看到的事情”之一,所以我有餐馆、住宿地点、购物场所、夜总会、高尔夫球场等(到处都是)。
我的老板给了我这个庞大的网站来构建,我真的不太了解任何编程逻辑。我想在这里坚持 DRY 概念,这样我才能真正了解这些东西。
更新
好的,我确保我的路线在文件中有这个:
Router::connect('/restaurants/:action', array('controller'=>'restaurants'));
我保留了我的seafood.ctp 文件,然后取出了我的seafood() 函数并将其插入:
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 cake 的页面时,告诉我我的控制器缺少方法 seafood()。我错过了什么?
【问题讨论】:
-
我认为您在尝试更改路由时搞砸了。
Router::connect('/restaurants/:action', array('controller'=>'restaurants'));你告诉它把餐馆后面的任何东西都当作一个动作,而实际上restaurants是动作,后面是参数,所以现在它很自然地告诉你它找不到函数名称@ 987654326@ -
我删除了 router::connect 规则,但它仍然给我控制器错误中缺少的 seafood()。
-
错误指向的控制器名称是什么,您的实际控制器名称是什么?我认为您只是对如何定义 URL 有疑问。它应该类似于 www.mysite.com/controllername/actionname/parameter。这就是 cake 在解析该 URL 时所寻找的内容。
-
说问题出在 RestaurantsController 中。
-
而我的实际控制人是餐馆
标签: controller cakephp-2.0 cakephp-model