0

以前のカスタム cms から Cakephp に移行されたテーブルがあります。モデル、コントローラー、ビュー、ヘルパーが作成されたので、それらを動作させることができます。ただし、テキスト フィールドのレンダリングには少し問題があります。

元のテーブルのテキストには、正しく表示できるように解析する必要があるマークアップ コードが含まれていました。このためのヘルパーを作成しましたが、これまでのところ、ほとんどのマークアップ コードを解析できます。次のようなネストされたリストとコードの解析を残しました。

{img src="showImage.php?xxxx" alt="" link=""} ここで、xxxx は画像テーブルの ID です。

以前のシステムから、これは実際に画像テーブルを呼び出し、画像の実際の URL を検索して表示できるようにし、レコードにこれらのコードのかなりの数を含めることができます。ヘルパーはイメージ ID を抽出できますが、私が Cakephp で理解していることから、ビューとヘルパーは主にコントローラーによって既に取得されたデータをレンダリングするためのものです。この場合、画像テーブルを呼び出してそれらの画像 ID を渡して、画像を表示するために必要なものを取得することができないか、推奨されていないようです。ヘルパーがコントローラーを呼び出すことができない場合、画像データを取得するためのコードをどこに置くかについて、私は少し迷っています。

申し訳ありませんが、Cake の初心者で、まだ Cake の適切な使用方法を学んでいるので、コードを配置する場所や、プラグインやコンポーネントなどを作成する必要があるかどうか、正しい方向を教えていただければ幸いです。 .

4

1 に答える 1

0

ヘルパーでrequestAction()を使用できます。requestAction() のパフォーマンスが問題なくても、完璧なソリューションとは言えませんが、この方法では、画像ごとに 1 つの db クエリを作成する必要があり、かなり非効率的であり、これはビュー レイヤーでは発生しません。要求アクションは、その名前が示すようにコントローラー アクションを要求し、アクションはデータを返す必要があります。

真のMVC 違反を求める場合は、画像モデルを ClassRegistry::init() し、ビュー内のモデル インスタンスを使用してレコードを直接取得することもできます。しかし、それは悪い習慣です。

今、MVCを尊重する適切なソリューションを検討します。:) 代わりに、Model::afterFind()コールバックを使用して、ここですべての画像 ID を抽出し、抽出した ID のセットで find('all') を実行して、それらを結果に追加することができます。ここでの利点は、すべての画像に対する単一のクエリです。

ベスト プラクティスは、 extractImageIds() のような別のメソッドを用意し、afterFind() から呼び出すことです。このようにして、論理的に分離され、afterSave() で他のものに固執するよりもうまくテストできます。

この従来の画像処理をリファクタリングする計画がある場合は、適切な抽象ファイル ストレージと画像処理を処理するプラグインも作成しました。

于 2013-09-17T02:12:34.533 に答える