我是CakePHP的新手,因此我对如何管理不同的控件/视图/元素非常困惑。
问题: 我正在尝试创建我的主页,其中包含PageController并查看home.ctp。现在,我有另一个控制器IdeaController,它包含从DB加载所有想法的功能。
public function index() {
$this->set('title_for_layout', 'Ideas');
$this->set('ideas', $this->Idea->find('all'));
}
现在,我需要从多个(最多3个)不同视图访问此Idea Controller。这样做的最佳方法是什么?
感谢您
答案 0 :(得分:2)
你会反过来......
视图不能“访问”控制器。控制器接收请求,告诉模型它们需要哪些信息,并将所有必要的数据传递给视图。视图就像你可以穿上衣服的小娃娃,但仅此而已,他们不会说话或玩耍或随意问你。
一般来说,控制器中每个操作只有一个视图。如果你需要从不同的视图“访问”控制器,你可能会对蛋糕感到困惑。
在不知道你需要这么做的确切原因的情况下,我假设你想要从3个不同的视图“访问”控制器,只是为了从BD中获取所有想法。如果是这种情况,标准方法是:
1)在适当的模型中创建一个函数:
//Idea Model
public function getAll() {
return $this->Idea->find('all');
}
嗯,你实际上并不需要 来执行这个功能,因为它非常简单,但是对于更复杂的情况,你只想获得登录用户的想法并且确定顺序,在模型中封装它是一种精神上理智的方式。
2)在控制器中视图需要该数据的每个操作中,您都可以
public function randomAction() {
$this->set('ideas', $this->Idea->getAll());
}
3)在每个视图中,您都会收到数据
pr($ideas);
就是这样。
视图永远不会“访问”控制器,因此您的问题变得有点令人困惑。也许你的意思是有3个视图与同一个动作相关联,但也没有理由这样做...或者你可能想要在很多其他“视图”中有一个“视图”,比如stackoverflow上的“信息”栏,在任何地方重复,所以你需要在很多视图中拥有它。如果是这种情况,那么你必须在一个元素中这样做,以重新利用其他视图中的“视图”代码。
如果你澄清一点你想要的东西,我可能会更好地回答,但我希望至少我给你一些指导,看看你想去做什么。或者
答案 1 :(得分:0)
每个View
必须在Controller
中拥有自己的方法。
说,如果您想要ideas/index
,ideas/view/x
和ideas/add
页面,则需要创建以下方法:
class IdeasController extends AppController
{
public function index()
{
/* index stuff */
}
public function view($id)
{
/* view stuff */
}
public function add()
{
/* add stuff */
}
}
为了理解框架,建议做博客教程,因为在那之后你会非常熟悉核心概念:http://book.cakephp.org/2.0/en/getting-started.html#blog-tutorial
祝你好运!