0

コンポーネント、ユーティリティ、および動作の違いを理解するのに問題があります。クックブックを読みましたが、部分的にしか役に立ちませんでした。

たとえば、アップロード時に画像のサイズを変更/トリミングしたい。さまざまなモデルとコントローラー/アクションに関連するさまざまなフォームを使用します。

明らかに、scaleresizesaveImage、およびその他の便利なメソッドを使用してクラスを作成する必要があります。また、さまざまな場所からこのメソッドを使用する機能も必要です。

私の質問は、このコードを配置する適切な場所はどこですか? また、コンポーネント、ユーティリティ、および動作の主な違いについて、簡単な例をいくつか教えてもらえますか? 私にとって、コンポーネントとユーティリティは非常に似ているからです。

4

2 に答える 2

2
  • 動作は、モデルに適用されるロジックのパッケージです。
  • コンポーネントは、コントローラに適用されるロジックのパッケージです。
  • ユーティリティは、必ずしも MVC の特定の部分に適用されるとは限らない一般的なライブラリです。

ユーティリティとビヘイビア/コンポーネントの主な違いは、ユーティリティ クラスはコア MVC クラスを拡張しないため、親クラスのリクエスト サイクルへのフックを自動的に受信しないことです。たとえば、コンポーネントでは、beforeRender()コントローラーが呼び出されるたびに、コントローラーがそのレイアウト/ビューを自動的にレンダリングする前に呼び出される関数を実装できます。

また、ユーティリティ クラスは、使用前にインスタンス化して変数に割り当てる必要があります。$myUtil = new MyUtility(); $myUtil->blah()-- ビヘイビア/コンポーネント/ヘルパーは、クラスにロードされるとインスタンス化され、$this->MyComponent->blah().

あなたの場合、画像操作ロジックはコンポーネントまたはユーティリティクラスのいずれかに属している可能性が高く、どちらの方法で実装するかを選択できます。個人的には、コントローラーの外部で画像操作ロジックを利用する可能性は低いため、コンポーネントを作成することをお勧めします。

編集:誰かが既に作成した既存コンポーネントを見つけて使用することも検討してください。

于 2012-12-10T18:58:37.747 に答える
1

動作は、複数のモデルで再利用する必要があるコードを配置する場所です コンポーネントは、複数のコントローラーで使用されるコードを配置する場所であり、ヘルパーは、複数のビューで使用されるコードを配置する場所です

それが基本的な内訳です​​。

コントローラーはアプリケーション ロジックを担当するため、アップローダー/スケーラーをコンポーネントに組み込むのが最も理にかなっているようです。

データベースからデータにアクセスする方法、またはデータベースから返される方法を変更する必要がある場合、それは動作になります (モデル レイヤーに影響するため)。

HTML またはある種のビュー出力を生成するための再利用可能なコードを作成する必要がある場合、それはヘルパーになります。

画像のアップロード、スケーリング、サイズ変更の例について。それをコンポーネントにします。たとえば、サムネイル画像をアップロード、保存、作成する UploadComponent.php というコンポーネントがあります。

次のようにして、このコンポーネントをコントローラーに追加します。

 var components = array('Upload');

そして、次のようにしてコントローラーで使用できます。

$this->Upload->createThumbnail(200, 200);

コンポーネントをどのように実装するかの詳細は、明らかにあなた次第です。

それが役立つことを願っています。

于 2012-12-10T18:51:32.687 に答える