一般的なタイトルでごめんなさい。私はタイトルが得意ではありません。
とにかく、Cakeが(ハッシュとして)データを渡す方法が、私がこの質問をする必要がある理由です。コントローラーからビューに変数/objを渡したときに、配列/辞書($ duck [')ではなく、質問できるオブジェクト(つまり、$ duck-> quack())だった場合。アヒル']['quack'] == true)これは簡単です。
私のアプリにあるのは、ユーザーxが所有できるかどうかに関係なくアイテムのリストです。特定のビューでは、データベース/アプリ内のすべてのアイテムを表示し(つまり、ページ分割)、アイテムごとに、ログインしているユーザーがそれを所有しているかどうかを知る必要があります。この質問に答えるには、モデル内で行われるクエリを実行する必要があります(複雑なHABTM関係のため)。言い換えると、私のItemモデルには関数isOwnedByUser($ user_id、$ item_id)があり、これはユーザーが所有している場合にtrueになります。ビューからこの関数を呼び出したい。
当然、これはMVCフレームワークに違反していますが、他にどのように行うかはわかりません。私には4つのアイデアがありました:
アイデア1:
ヘルパー内でこれを行います:
App:Import('Model','Item');
$item = new Item();
$item->isOwnedByUser($user_id,$item_id);
ビューからヘルパーを呼び出します(もちろん、$item_idと$user_idを渡します)。しかし、これは本当にMVCフレームワークに違反しています。
アイデア2:
item_controller.php内にアクションを作成し、requestAction()を使用してビューからアクションを呼び出します。しかし、これは非常に非効率的だと聞きました
今、私が自分の問題の解決策を探していたときに見つけたこれらの2つのアイデアですが、それらによると、これら2つのアイデアは悪いので、さらに2つの解決策を思いつきました。
アイデア3:
ページ付けされたデータをビューに返すとき、すべてのアイテムに「user_id」キーがあることを確認して、ビューのキーをログインしたユーザーのIDと照合して、ユーザーがアイテムを所有しているかどうかを確認できます。しかし、これには、a)ページネーションを書き直す必要がありますb)特に特定のビュー(検索)に対する非常に醜いクエリ、c)全体的な醜さと遅さ。だから私はこのアイデアを放棄することにしました
アイデア4:
ビューがアイテムがユーザーによって所有されているかどうかを知る必要があるたびに、ユーザーが所有するすべてのアイテムを含むコントローラーから別の配列を渡すだけです。ビューでは、in_array()を使用してユーザーが所有しているかどうかを確認できます。言ったアイテム。もちろん、これに対する問題は明らかです。ユーザーがたくさんのアイテムを持っている場合はどうなるでしょうか。
要するに、私はこれで立ち往生していて、ここからどこに行くべきかわからないので、すべての助けに感謝します!ありがとう!