【问题标题】:CakePHP's $this->dataCakePHP 的 $this->data
【发布时间】:2010-07-11 17:46:20
【问题描述】:

我有一个应用程序,它在每个视图中都加载了表单。我已经相当熟悉 CakePHP 的数组语法,并且经常使用 $this->data 参数。

我爱上了瘦控制器和胖模型,因此我在模型中添加了尽可能多的代码。除非我在做一些复杂的事情,否则我的大多数控制器方法都是这样的:

function some_action() {
    $this->set('data', $this->Model->some_action($this->data));
}

然后,在我的模型中,我有一个采用一个参数的方法:

function some_action($this_data = NULL) {
    // do some stuff, manipulate the data etc.
    $this->create();
    if ($this->save($this_data)) {
        // return success message here
    }
}

我过于简单了,但你明白了。

我的问题:我总是将 $this->data 发送到我的模型并使用变量 $this_data 捕获它。但是,我想知道这是否是一步太多了?模型是否继承了 $this->data?如果是这样,我可以将上述控制器方法更改为:

function some_action() {
    $this->set('data', $this->Model->some_action());
} 

然后在我的模型中操作 $this->data 而不是我一直使用的 $this_data 变量?最佳做法是什么?

【问题讨论】:

  • 好吧,如果您使用的两个函数都在同一个类中,那么是的,它们都可以通过$this->data 访问该类中的数据变量...虽然有点令人困惑, 当您对所有三个示例函数使用相同的函数名称时。
  • 不,他们不在来的班级。抱歉,我的问题假设一个人了解 CakePHP 框架。澄清一下,第一个函数在 Controller 类中,第二个函数在 MVC 架构中的 Model 类中。如果不完全相同,我几乎总是以类似的方式命名这些方法,以便我的代码是自我记录的。我想我正在联系 CakePHP-heads 以获得 $this->data 问题的答案。

标签: cakephp parameters methods


【解决方案1】:

好主意,但不幸的是,您必须将 $this->data 作为参数传递,因为 cake 中的控制器和模型是从不同的父对象扩展而来的。所以 $this->data 在它们中具有不同的含义。在控制器中,$data 属性是用于获取 POST 数据,而它是模型获取数据的容器in model。我建议您阅读源代码 app/cake/lib/controller/controller.php

app/cake/lib/model/model.php

这会让你更清楚。

【讨论】:

    【解决方案2】:

    但是你可以做的是:

    在你的控制器中

    $this->Model->create($this->data);
    $this->set('data', $this->Model->some_action());
    

    这样,您可以在 Model::some_action(); 中使用 $this->data 访问模型数据;

    【讨论】:

    • 那是完美的!我不想从我 3 天前标记为正确的 SpawnCxy 那里拿走分数,否则这绝对是我的选择。谢谢!
    • 什么意思?如果您担心的话,它会将您的模型 $id 更改为 $data['Model']['id'] 值。
    猜你喜欢
    • 2014-05-04
    • 2012-05-20
    • 1970-01-01
    • 2011-11-11
    • 1970-01-01
    • 2011-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多