2012-03-05 15 views
0

これを行うにはどうすればいいのだろうかと思いました。 SubmissionsControllerがあり、その中には、各submissionの表示であるview()メソッドがあります。すべての投稿はお気に入りを持ち、ユーザーはそのお気に入りに投票することができます。ユーザーが以前に何かに投票したかどうかによってアイコンを変更したいと思います。私はそれをこのような何かことについて考えた:ビュー内からコントローラのメソッドを呼び出すCakePHP

// checkExistingFavorite would be a boolean method which returns true if the user has    already favorited it 
<?= if (SubmissionsController::checkExistingFavorite($userId, $submissionId)) { ?> 
<span style="favorited">Remove Favorite</span> 
<? } else { ?> 
<span style="not-favorited">Favorite</span> 
<? } ?> 

しかし、明らかに、私は私のビュー内から直接SubmissionsControllerを呼び出すべきではありません。私の質問は、これを処理する最良の方法は何ですか?ユーザーが投稿を表示するたびにチェックする必要があるので、キャッシュする必要があるかどうかはわかりません。

複数のデータは、次に、フラグの状態
通過この配列の配列を作成する場合は、渡された配列か、可能な値に
ベースを表示するために、1つのフラグ0または1を設定しこれに基づいてコントローラ
でこの状態を確認することができ
+0

通常は設計上の誤りです。 これらのメソッドは、コントローラではなくモデルに配置する必要があります。 – mark

+0

コントローラからそれらを参照するにはどうすればよいですか? 'var $ uses = 'SubmissionsFavorite''そして次に' $ this-> SubmissionsFavorite-> methodFromSubmissionsFavoriteModel(); '?> –

+0

は決して使用しないでください:)代わりにClassRegistry :: init()またはloadModel()を使用してください。 PS:checkExistingFavorite()メソッドの詳細を知る必要があると答えるには – mark

答えて

1

これは関連するコントローラメソッドで行う必要があります。そうしないと、Cakeの基盤となるMVCの原則に違反します。 SubmissionモデルにcheckExistingFavorite($userId, $submissionId)関数を作成して、すべてのコントローラアクションで利用できるようにすることができます。 ($this->Submission->checkExistingFavorite()を呼び出すことによって)SubmissionsControllerview()方法で機能を使用して、既存のお気に入りをチェックした後

あなたはtrueまたはfalse$this->set('hasExistingFavourite', $boolean))へのビューの変数を設定することができます。

+0

よかった!次に、コントローラで使用されているメソッドに対してModelを使用します。以前はコントローラーの中でやっていました。助けてくれてありがとう。 –

+0

問題ありません!私がCakeを始めたとき、このガイドは私に大きな助けとなりました。また、「脂肪モデル、皮肉なコントローラー」についても簡単に説明しています。http://bakery.cakephp.org/articles/Auzigog/2008/12/29/どこにコードを書くべきか – mensch

1

この条件を設定する
ビジネスロジックと表現ロジックが異なることを実現できるように

関連する問題