0

CakePHP1.3で再利用可能なコンテンツブロックを作成するための最適なアプローチについてお聞きしたいと思います。

再利用可能なコンテンツブロックの下では、ページを構築するために使用される部分的なビューを意味します。たとえば、eshopアプリケーションでは、ミニカートの概要は再利用可能なコンテンツブロックと見なすことができます。これは、各ページヘッダーに表示されます。

CakePHP 1.3には2つの可能性があります(そして両方とも深刻な欠点があります):

  • 要素/app/plugins/myeshop/elements/minicart.ctpを作成し、$this->element('minicart)この再利用可能なコンテンツをヘッダーなどに読み込むために使用します。不利な点は、これがカートエンティティのビジネスを多くの場所にくちばしにすることです。Minicartは、ビューがコントローラー/app/plugins/myeshop/controllers/carts_controller.phpによって処理されるカートエンティティの一部の表現にすぎません。では、なぜそれをコントローラーから外して要素に保持するのでしょうか?要素は、ヘッダー、フッター、interactive_mapなどの一般的な再利用可能なコンテンツを保持するのに適しています...アプリケーションのビジネスオブジェクト/エンティティに関連しないもの。

  • 対応するビューを持つメソッドCartsController::minicart()を作成し、$this->requestAction('/myeshop/carts/minicart')この再利用可能なコンテンツをヘッダーなどにロードするために使用します。利点は、CartエンティティのすべてのビジネスとビューがCartsControllerによって処理されるようになったことです。要素に隠されたサイドロジックとサイドビューはありません。このアプローチの欠点は明らかです-requestAction()の使用には多くの時間がかかります。

この時点で、requestAction()を非常に注意深く使用する必要があることに完全に同意していると言わなければなりません。これを使用してコントローラーの手続き型/ビジネスロジックを呼び出すことは、アプリケーションの設計としては不適切です。このような種類のロジックは、コントローラーではなくモデルに配置する必要があります。それでも、私見では、コントローラーアクションを呼び出して、部分的/再利用可能なコンテンツ(ビュー)を取得し、エンティティビジネスを1か所に維持することは正当です。

CakePHPにはこれに最適なソリューションがありますか?

4

3 に答える 3

0

私はelements/requestActionsのルートに行くことを強くお勧めします。

これがCakePHPマスターマークストーリーによる素晴らしい記事です: 「requestActionを使用すると私のサイトのパフォーマンスがどのように向上したか」

CakePHPを使用して多くの大規模でトラフィックの多いサイトを構築し、requestActionsをいたるところに使用しており、サイトの読み込みは非常に高速です。

于 2013-03-08T16:18:24.043 に答える
0

可能であれば、要素として作成します。コントローラーがミニカートの内容を計算し、ビューに表示すると思いますか?

その場合は、要素を使用しても問題ありません。あなたが述べているように、追加のHTTPリクエストは確かに必要ありません。

ただし、要素はコンテンツを表示するだけで、ビジネス ロジックを実行する必要があります。これをコントローラーまたはコンポーネントに含め、ビューに必要な要素を設定する必要があります。

特定のページでのみ必要な場合は、ミニ カートを含む新しい layout.ctp ファイルを作成し、それらのページでこのレイアウトを使用できます。

于 2013-03-08T15:52:11.700 に答える
0

これがすべてのページにカートのコンテンツを表示することだけである場合は、次のソリューションをお勧めします。ユーザーがログインしていない場合、カートをセッションに書き込み、ログインするとデータベースと同期します。ユーザーが戻ってきてログインすると、保存されたカートからセッションが復元されます。

AppController::beforeFilter() で、セッション データを読み取り、ビューに設定するか、読み取りだけの場合は、ミニカート要素のセッション ヘルパーを使用して読み取ります。これまたは追加の db クエリによる追加の requestAction() 呼び出しはありません。

このようにカートを実装しました。こちらでご覧いただけます。https://github.com/burzum/cart動作するサンプルアプリも利用可能ですhttps://github.com/burzum/CartSampleApp

于 2013-03-08T16:32:54.560 に答える