CakePHP:将$ this->数据传递给Controller中的View

时间:2009-11-12 18:44:43

标签: cakephp cakephp-1.2

我正在使用CakePHP 1.2,我只是想知道将$ this->数据传递给Controller的视图是否存在任何副作用。

例如:

// inside PostsController, I have this code:
$this->data['Posts'] = $this->Post->find('all');

而不是:

$posts = $this->Post->find('all');
$this->set(compact('posts'));

// inside the /posts/view, I access it like this:
<?php foreach ($this->data['Posts'] as $post) {....};?> 

通过这样做,我从控制器中一起跳过$ this-&gt; set()。这是否违反了我可能忽略的任何MVC模式或任何安全问题?我看到使用Auth组件,$ this-&gt;数据包含[_Token]数组。

由于

5 个答案:

答案 0 :(得分:14)

您需要了解Cake Helpers自动查找数据的不同位置,因为这会产生真正的差异。表单助手将根据$this->data的内容自动填写字段。这就是验证失败时表单数据的持续性。 OTOH,<select>元素选项数组自动从复数字段名称中获取,
例如如果设置,$form->select('Model.foo_id')将从$foos中选择其中的选项。

因此,$this->data有其特殊的地方,不应轻易使用,就像命名变量有用,不应忽略。同时使用两者。如果您不想自动设置表单助手内容,请{?1}}变量。恕我直言,它也更具可读性,可以指定一个变量名称来暗示它包含的数据。您在set()上运行的所有观看次数都不如$this->data上的另一个观点和$foo上的另一个观看次数明显。

答案 1 :(得分:7)

在CakePHP 2.x 中,如果是$this->request->data,则应使用$this->data,否则最终可能会收到此错误:

  

间接修改重载属性View :: $ data无效

答案 2 :(得分:3)

$controller->data适用于从视图文件发布到控件的数据。

$view->data用于一般数据。

我会避免这样做以保持自己的理智。除了你在视野中打字更多。

答案 3 :(得分:2)

没有充分的理由直接设置$ this-&gt;数据,除非在使用表单时。

为什么打破约定 - 控制器:设置是有原因的。如果要将数据传递给视图以进行显示或显示逻辑,则应使用提供的功能,而不是尝试为控制器:数据选择用于非预期目的。

如果您遵循规则并按照预期的正确方式做事,那么CakePHP中的一切都会变得更容易。

答案 4 :(得分:2)

cakephp版本2. *中,当您尝试在$this->data

上设置数据时发生错误