3

誰もこれを試みましたか?もし可能なら、それを達成しようとするとどのような問題に遭遇するでしょうか?

4

5 に答える 5

4

コントローラ間でロジックを共有することが目標の場合:

  • AppControllerにロジックを追加して、アプリ内のすべてのコントローラーと共有します。

  • コンポーネントを作成し、それを共有するコントローラーの$this->componentsに追加します。

コンポーネントとヘルパーの処理方法に特別な注意を払う必要があるため、コントローラー間に継承を追加することは、最後の手段としてのみ検討する必要があります。たとえば、$this->componentsと$this->helpersを、継承元のAppControllerおよびコントローラーと手動でマージする必要があります。

于 2009-01-08T13:55:11.813 に答える
3

AppController とアプリ内のいくつかの特別なコントローラーの間に追加のレイヤーを配置しました。

遭遇する唯一の問題は、$helpers と $components クラス属性のマージです。CakePHP では、コントローラーでこれらの変数をオーバーライドしても、AppController によって設定された変数は上書きされませんが、それらはマージされます。

これは Controller 基底クラスの __mergeVars() という名前の特別なメソッドによって行われますが、残念ながらこれはデフォルトのコントローラー構造に対してのみ行われます。$helpers と $controllers を AppController からコントローラーに継承したい場合、追加のレイヤーは正しくマージされません。

于 2008-12-17T09:55:30.280 に答える
2

$componentsプロパティがマージされ$helpersず、代わりに上書きされるという問題が発生します。protected $_mergeParent = 'YourParentClass'これが適切に行われるように定義してください。このデフォルト値は です'AppController'

ソースコード: http://api.cakephp.org/2.4/source-class-Controller.html#294-301

于 2013-09-10T12:31:59.100 に答える
1

試してみませんか?少なくとも、Controller -> AppController -> MyController クラスで既に行われています。

于 2008-12-11T19:01:34.983 に答える
0

確かに、Cake でコントローラーを簡単にサブクラス化できます。その後、通常は「beforeFilter」、「afterFilter」などのフック関数を利用して、ランタイム ロジックをコントローラーに追加します。通常、少なくとも 1 つの抽象コントローラーを配置します。 Cakes コントローラーと、ルートで構成する最終コントローラーの間。

于 2008-12-11T20:23:07.893 に答える