我正在使用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]数组。
由于
答案 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