2009-11-12 17 views
8

私は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 - >設定をスキップ。これは、私が見落としている可能性のあるMVCパターンやセキュリティ上の問題に違反していますか?私は、認証コンポーネントを使用して、$ this->データに[_Token]配列が含まれていることを知りました。

おかげ

答えて

14

ケーキヘルパーが自動的にデータを探す場所を認識する必要があります。なぜなら、それは実際の違いがあるからです。フォームヘルパーは、$this->dataの内容に基づいてフィールドを自動的に記入します。これは、検証が失敗した場合にフォームデータが維持される方法です。 OTOH、<select>要素options配列は、複数のフィールド名
から自動的に取得されます。 $form->select('Model.foo_id')は、設定されている場合、$foosからオプションを取ります。

このように、$this->dataは特別な場所があり、名前付き変数が使用するのと同じように軽く使用しないでください。無視しないでください。両方を適切に使用してください。フォームヘルパーのコンテンツを自動設定しない場合は、set()変数を使用します。 IMHOそれはまた、それが含まれているデータをヒントの変数名を割り当てることがより読みやすいです。 $this->dataで操作しているすべてのビューは、$fooで操作しているビューと$barで操作しているビューよりも明瞭ではありません。

3

$controller->dataは、ビューファイルからの制御に投稿されたデータのためのものです。

$view->dataは一般データです。

私は自分自身を正気に保つためにやりません。あなたはさらに視野に入っています。

+1

私はファンキーデュードに同意する - の$ this - >データ、$これはモデル、コントローラ、ビュー、またはその他のオブジェクトでは、私は、DBのレコードからのフォームから投稿または読み出されたデータのためにすべきだと思います。 あなたのバージョンははるかに読みにくく、他の誰もが慣れている規約に反するので、移植性がはるかに低くなります。 本当に行を保存したい場合: $ this-> set( 'posts'、$ this-> Post-> find( 'all')); – neilcrookes

2

フォームを使って作業する場合を除いて、$ this-> dataを直接設定する理由はありません。

なぜブレークコンベンション - コントローラ:理由があるのですか?表示またはロジック目的で表示するためにビューにデータを渡す場合は、意図しない目的でController:データを選択するのではなく、提供されている関数を使用する必要があります。

ルールに従っていて、期待通りの正しいやり方をすれば、CakePHP内のすべてが簡単になります。あなたは、プレーン$this->data場合は、そうでなければ、このエラーを取得して終わるかもしれない、代わりに$this->request->dataを使用する必要があります CakePHPの2.xでは$this->data

2

が発生します。

Indirect modification of overloaded property View::$data has no effect

7

にデータを設定しようとすると、cakephpバージョン2. *、エラーで

関連する問題