0

別のコントローラー内でコントローラー関数を使用する必要があります。でも作りたくない

$Myother = new MyotherController();

そのコントローラーのメソッドを使用するたびに。すべてのメソッドで「新しい」ものを作成しないように、コントローラーを初期化するにはどうすればよいですか?

私はこれを見つけまし、それはこのように書いています:

App::import('Controller', 'Pages');
class UsersController extends AppController {
  var $Pages;
  function beforeFilter() {
    $this->Pages =& new PagesController; /*Loads the class*/
    $this->Pages->constructClasses(); /*Loads the model associations, components, etc. of the    Pages controller*/
  }
  function index() {
    $this->Pages->index();
  }
}

これは適切な方法ですか、それともより良い方法はありますか?

4

2 に答える 2

2

これらの一般的なメソッドを に追加してみてくださいAppController。すべてのコントローラーが拡張AppControllerされるため、一般的なコントローラー機能を貼り付けるのに最適な場所です。

そうは言っても、あるコントローラーのすべてのモデルと関連付けを別のコントローラーにロードする場合は、代わりに関連するコードを適切なモデルに移動する方がよい場合があります。

于 2012-12-19T07:30:14.173 に答える
2

本当に唯一の方法は、いくつかのコンポーネントを使用するように切り替えることだと思います。コンポーネント/ヘルパー/モデルを使用して新しいコントローラーを初期化すると、オーバーヘッドが大幅に増加し、トレードオフの価値がない可能性があります。言うまでもなく、悪いデザインを促進します。

私のアドバイスは、コンポーネントを使用することです。

別のコントローラーでのアクションの結果だけが必要な場合は、いつでも requestAction() を使用できます。しかし、CakePHP でさえ、注意が必要だと言っています。

「requestAction をキャッシュせずに使用すると、パフォーマンスが低下する可能性があります。コントローラーまたはモデルでの使用はほとんど適切ではありません。」

于 2012-12-19T09:33:57.763 に答える