CakePHP:传递$this->;从控制器向视图发送数据

CakePHP:传递$this->;从控制器向视图发送数据,cakephp,cakephp-1.2,Cakephp,Cakephp 1.2,我使用的是CakePHP1.2,我只是想知道从控制器向视图传递$this->数据是否有任何副作用 例: 而不是: $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) {....};?> $

我使用的是CakePHP1.2,我只是想知道从控制器向视图传递$this->数据是否有任何副作用

例:

而不是:

$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) {....};?> 
$posts=$this->Post->find('all');
$this->set(压缩('posts'));
//在/posts/view中,我是这样访问它的:
通过这样做,我从控制器中跳过了$this->set()。这是否违反了任何MVC模式或我可能忽略的任何安全问题?我看到使用Auth组件,$this->data包含[\u令牌]数组


感谢

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

$view->data
用于常规数据


我会避免这样做以保持清醒。此外,您在视图中输入的内容更多。

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


因此,
$this->data
有其特殊的位置,不应轻易使用,正如命名变量有其用途,不应被忽略一样。适当地使用这两种方法。如果不想自动设置表单帮助器内容,请使用变量
set()。IMHO分配一个变量名来提示它所包含的数据也更具可读性。所有在
$this->data
上操作的视图都不如一个在
$foo
上操作的视图和另一个在
$bar

上操作的视图清晰,除非在使用表单时,否则没有理由直接设置$this->data

为什么打破惯例-控制器:设置是有原因的。如果要将数据传递到视图以用于显示或显示逻辑目的,则应使用提供的函数,而不是尝试将Controller:data用于非预期目的


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

CakePHP
Version2.*中,当您试图在CakePHP2.x中的
$this->data
上设置数据时,会出现错误。如果是纯
$this->data
,您应该使用
$this->request->data
,而不是
,否则,最终可能会出现以下错误:

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


我同意Funky Dude-$this->data,其中$this是一个模型、控制器、视图或其他对象,我认为应该用于从表单发布的数据或从数据库中的记录读取的数据。我认为你的版本可读性差得多,而且与其他人习惯的惯例背道而驰,这使得它的可移植性差得多。但是如果你真的想保存一行:$this->set('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) {....};?>