誰もこれを試みましたか?もし可能なら、それを達成しようとするとどのような問題に遭遇するでしょうか?
5 に答える
コントローラ間でロジックを共有することが目標の場合:
AppControllerにロジックを追加して、アプリ内のすべてのコントローラーと共有します。
コンポーネントを作成し、それを共有するコントローラーの$this->componentsに追加します。
コンポーネントとヘルパーの処理方法に特別な注意を払う必要があるため、コントローラー間に継承を追加することは、最後の手段としてのみ検討する必要があります。たとえば、$this->componentsと$this->helpersを、継承元のAppControllerおよびコントローラーと手動でマージする必要があります。
AppController とアプリ内のいくつかの特別なコントローラーの間に追加のレイヤーを配置しました。
遭遇する唯一の問題は、$helpers と $components クラス属性のマージです。CakePHP では、コントローラーでこれらの変数をオーバーライドしても、AppController によって設定された変数は上書きされませんが、それらはマージされます。
これは Controller 基底クラスの __mergeVars() という名前の特別なメソッドによって行われますが、残念ながらこれはデフォルトのコントローラー構造に対してのみ行われます。$helpers と $controllers を AppController からコントローラーに継承したい場合、追加のレイヤーは正しくマージされません。
$components
プロパティがマージされ$helpers
ず、代わりに上書きされるという問題が発生します。protected $_mergeParent = 'YourParentClass'
これが適切に行われるように定義してください。このデフォルト値は です'AppController'
。
ソースコード: http://api.cakephp.org/2.4/source-class-Controller.html#294-301
試してみませんか?少なくとも、Controller -> AppController -> MyController クラスで既に行われています。
確かに、Cake でコントローラーを簡単にサブクラス化できます。その後、通常は「beforeFilter」、「afterFilter」などのフック関数を利用して、ランタイム ロジックをコントローラーに追加します。通常、少なくとも 1 つの抽象コントローラーを配置します。 Cakes コントローラーと、ルートで構成する最終コントローラーの間。