2011-03-06 9 views
0

私はウィジェットに基づいてウェブサイトを構築しています。私はいくつかのメソッド、モデル、およびいくつかのビューを持つ一般的なWidgetInstancesControllerクラスを持っています。今、このクラスを拡張することが可能かどうかを知りたい。言い換えれば、各ウィジェットは別のクラスであり、WidgetInstancesControllerクラスを拡張する必要があります。これらのウィジェットのクラスをapp/widgets/の下に保存したいと思います。また、これらのウィジェットは特定のモデルを持たず(親WidgetInstanceモデルを使用するため)、特定のビューを持つことができます。CakePHP拡張コントローラ(のみ)

どのように私はこれを行うことができます上の提案は非常に高く評価される!

+0

問題なく拡張できますが、わかっている限り、コントローラは/ app/controllersにある必要があります。コントローラデータを上書きする必要があるので、ヘルパーやコンポーネントとしてウィジェットを持っていると思うかもしれません。 – JohnP

+0

ヘルパーは確かにそうではありません。コンポーネント...私は分かりませんが、リクエストごとに数十のコンポーネントをロードするにはあまりにも多くなります(ユーザーがアクティブなウィジェットの数によって異なります)。あるいは、 'app/controllers/widgets /'にウィジェットを持つフォルダを作成し、単に親クラス(WidgetInstancesControllers)を拡張しますか?しかし、ウィジェットのコントローラからアクションをロードまたは呼び出す方法は?また、拡張しているクラスからモデルデータにアクセスできるようになりますか? – linkyndy

+0

コンポーネントは、必要に応じてロードして、すべての光を維持することができます。あなたが呼んでいるコントローラのインスタンスを取得するので、モデルにアクセスすることができます。 – JohnP

答えて

1

私はそれらをコンポーネントとして構築することをお勧めしますが、他の方法で行うこともできます。

アドオンモジュールを使用してCMSを構築したのと同じようなことをしなければなりませんでした。論理的に動作させるためには、MVCを頭に少し入れて、の非常に薄いコントローラに行ってください。本質的に、フロントエンドモジュールのロジックは、モデルレベルに完全に含まれ、関連するビューが要素として含まれていました。モジュールヘルパーは、そのモジュールを取得して公のフロントエンドに表示しました。バックエンドは通常の肥満コントローラを使用してMVC経由で従来通り処理されていました。

明らかに、モデルは驚くほど軽量で、すべてが要素として使いやすさを夢のものにしていました。

+0

私はMVCには新しかったので、ウィジェットがコンポーネントの場合、ウィジェットがどのように動作するのか少し説明できますか?私がこれまで理解してきたことから、コンポーネントは現在のコントローラに余分なメソッドを追加します。たとえば、コンポーネントの親コントローラのメソッドabc()を拡張する必要がある場合、どうすればできますか?また、私は、**コントローラメソッドではなく**コンポーネントメソッドだけを**使用することができますか?各ウィジェットのビューをパーソナライズしたい場合は、どのようにすればよいでしょうか、どこに配置すればよいですか?または、ビューの代わりにヘルパーを作成することをお勧めしますか?私はちょっと混乱していて、それ以上の助けを感謝します:) – linkyndy

+0

私はプラグインについて今読んでいます。彼らは私の場合のために働くだろうか?または、複数のコントローラーメソッドを上書きするだけではあまりですか?ご協力いただきありがとうございます! – linkyndy

+1

コンポーネントの紹介ページには、実際には次のように書かれています。http://book.cakephp.org/view/994/コントローラにメソッドを追加するのではなく、コントローラ内で別のクラスを使用できるようにしています。 。これは、同じアプリケーションまたは別のアプリケーションの別の場所にあるロジックの自己完結型チャンクを再利用する便利な方法です。私は個人的にプラグインを使用することはありません。私は煩雑で、期待通りの動作をすることはほとんどなく、アプリケーションの他の側面に干渉する可能性があります。 – Leo

関連する問題