代码之家  ›  专栏  ›  技术社区  ›  Kien Pham

cakephp:从控制器向视图传递$this->data

  •  8
  • Kien Pham  · 技术社区  · 16 年前

    我使用的是cakephp 1.2,我只是想知道在从控制器向视图传递$this->数据时是否有任何副作用。

    前任:

    // 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->set()。这是否违反了任何MVC模式或任何我可能忽略的安全问题?我看到使用auth组件,$this->数据包含[\u token]数组。

    谢谢

    5 回复  |  直到 9 年前
        1
  •  14
  •   deceze    16 年前

    你需要知道蛋糕助手自动寻找数据的不同地方,因为那是一个真正的区别。表单帮助程序将根据 $this->data . 这就是验证失败时表单数据保持不变的方式。鄂托赫 <select> 元素选项数组自动取自复数字段名,
    例如 $form->select('Model.foo_id') 将从 $foos 如果设置。

    像这样的, $& & GT;数据 有其特殊的位置,不应轻易使用,正如命名变量有其用途,不应被忽略。视情况使用两者。如果不想自动设置表单助手内容, set() 你的变量。imho分配一个变量名来提示它所包含的数据也更易读。你所有的观点都在 $& & GT;数据 不清楚一个视图正在运行 $foo 另一个 $bar .

        2
  •  7
  •   Sergey K.    13 年前

    在CaKEPHP中 2、X 你应该使用 $this->request->data 如果是普通的 $this->data ,否则您可能会得到此错误:

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

        3
  •  3
  •   Ajean Vishal Agrawal    9 年前

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

    $view->data 用于常规数据。

    我会避免这样做来保持自己的理智。此外,你在视图中输入的内容也更多。

        4
  •  2
  •   Abba Bryant    16 年前

    除非使用表单,否则没有充分的理由直接设置$this->数据。

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

    如果您遵循规则并以预期的正确方式进行操作,那么Cakephp中的所有操作都会更容易。

        5
  •  2
  •   Prasad Jadhav Psi    13 年前

    cakephp 版本2.*,尝试在上设置数据时出错 $this->data

    推荐文章