4

コントローラーを可能な限りドライに保つには、コントローラーのアクションのすべてではなく、たとえば2つのアクション間でいくつかの共通コード(コードの大きなチャンク)を共有する必要があります。また、アクションでこの共有コードの変数にアクセスする必要があります。

例えば:

class FirstController extends Zend_Controller_Action {

   public function firstAction() {
     //common code here: contains an array $columns 
   } 
   public function secondAction() { 
       //common code here: contains an array $columns also 

   } 

   //other actions
}

では、これをリファクタリングして、共通コードを1つの場所に配置し、$columnsおよびにアクセスできるようにするにはどうすればよいですか。firstAction()secondAction()

ありがとう。

4

2 に答える 2

5

ベースコントローラーの使用はお勧めしません。そのような小さな仕事にはやり過ぎで重いです。1つのコントローラー内で共通のコードを共有する必要があるため、代わりにアクションヘルパーと、アクションヘルパーに$columns引数として送信できるクラス属性を使用します。

アクションヘルパーについて詳しくは、こちらをご覧ください。

アクションヘルパーを使用すると、開発者はZend_Controller_Actionを拡張するアクションコントローラーにランタイムおよび/またはオンデマンド機能を注入できます。アクションヘルパーは、一般的なアクションコントローラー機能を注入するために抽象アクションコントローラーを拡張する必要性を最小限に抑えることを目的としています。

于 2012-04-20T14:53:19.580 に答える
1

新しいクラスを作成してZend_Controller_Action拡張し、新しく作成したクラスを拡張することはできません。Zend_Controller_Action

例:

class CommonactionsController extends Zend_Controller_Action {

   public function firstAction() {
     //common code here : contains an array $columns 
   } 
   public function secondAction() { 
       //common code here : contains an array $columns also 

   } 

   //other actions
}

その後:

class FirstController extends CommonactionsController {
    // here you can use all your common actions...
}

2番目のコントローラー。

class SecondController extends CommonactionsController {
    // here you can use all your common actions...
}

等々...

于 2012-04-20T13:01:05.783 に答える