【问题标题】:Cakephp how should you manage controllers and viewsCakephp 你应该如何管理控制器和视图
【发布时间】:2014-02-17 19:55:36
【问题描述】:

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

问题: 我正在尝试创建具有 PageController 并查看 home.ctp 的主页。现在,我有另一个控制器 IdeaController,它包含从数据库中加载所有想法的功能。

public function index() {
    $this->set('title_for_layout', 'Ideas');
    $this->set('ideas', $this->Idea->find('all'));
}

现在,我需要从多个(最多 3 个)不同的视图访问这个 Idea Controller。这样做的最佳方法是什么?

谢谢

【问题讨论】:

    标签: cakephp view controller


    【解决方案1】:

    你要反着来……

    视图不能“访问”控制器。控制器接收请求,告诉模型它需要从它们那里得到什么信息,并将所有必要的数据传递给视图。视图就像你可以穿上衣服的小玩偶,但仅此而已,它们不会说话或玩耍,也不会随意向你提问。

    一般来说,控制器中的每个操作只有一个视图。如果你需要从不同的视图“访问”控制器,你可能会对 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 上的“信息”栏,到处重复,所以你需要在很多视图中都有它。如果是这种情况,那么您必须在元素中执行此操作才能在其他视图中重新利用该“视图”代码。

    如果你再澄清一点你想要什么,我可能会回答得更好,但我希望至少我给了你一些关于在哪里寻找或如何去做你想做的事情的指导。

    【讨论】:

    • 不推荐,但有一个requestAction 方法可以从视图文件中调用。
    • 没错,但由于不推荐使用它,而且在大多数情况下你可以不用它,我没有提到它以避免更多的混乱。
    【解决方案2】:

    每个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

    祝你好运!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多