Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cakephp如何管理控制器和视图_Cakephp_View_Controller - Fatal编程技术网

Cakephp如何管理控制器和视图

Cakephp如何管理控制器和视图,cakephp,view,controller,Cakephp,View,Controller,我对CakePHP完全陌生,因此我对不同控件/视图/元素的管理工作相当困惑 问题是: 我正在尝试创建我的主页,其中包含PageController和view home.ctp。现在,我有了另一个控制器,IdeaController,它包含从数据库加载所有想法的函数 public function index() { $this->set('title_for_layout', 'Ideas'); $this->set('ideas', $this->Idea-&

我对CakePHP完全陌生,因此我对不同控件/视图/元素的管理工作相当困惑

问题是: 我正在尝试创建我的主页,其中包含PageController和view home.ctp。现在,我有了另一个控制器,IdeaController,它包含从数据库加载所有想法的函数

public function index() {
    $this->set('title_for_layout', 'Ideas');
    $this->set('ideas', $this->Idea->find('all'));
}
现在,我需要从多个(最多3个)不同的视图访问Idea控制器。这样做的最佳方式是什么


谢谢你

你正在走另一条路

视图无法“访问”控制器。控制器接收一个请求,告诉模型它需要从他们那里得到什么信息,并将所有必要的数据传递给视图。观点就像小洋娃娃,你可以穿上衣服,但除此之外,它们不会对你说话、玩耍或随意提问

一般来说,控制器中每个动作只有一个视图。如果您需要从不同的视图“访问”控制器,您可能会对cake感到有点困惑

在不知道您需要这样做的确切原因的情况下,我假设您想从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上的“信息”栏,它到处重复,所以你需要在很多视图中有它。如果是这样的话,那么您必须在一个元素中这样做,以重新利用“视图”——其他视图中的代码


如果你再澄清一下你想要什么,我可能会回答得更好,但我希望至少我给了你一些方向,告诉你去哪里看,或者如何去做你想做的事情。

每个
视图
都必须在
控制器
中有自己的方法

比如说,如果您想要
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 */
    }
}
为了理解框架,建议您学习博客教程,因为之后您将非常熟悉核心概念:


祝你好运

不推荐,但有一种方法可以从视图文件中调用。是的,但由于不推荐使用这种方法,而且在大多数情况下,您可以不使用它,所以为了避免更多的混淆,我没有提到它。