Cakephp你应该如何管理控制器和视图

时间:2014-02-17 19:55:36

标签: cakephp view controller

我是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。这样做的最佳方法是什么?

感谢您

2 个答案:

答案 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/indexideas/view/xideas/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

祝你好运!