2009-07-21 4 views
0

私は本当に同じいくつかのアクションを持つ2つのコントローラを持っています。 他のコントローラで同じアクションをどのように参照しますか?Zend Frameworkアクションを複製せずに 'コピー'するには?

class UserController extends Zend_Controller_Action { 

    public function listAction() { 
      //do something here 
    } 
} 

class AdminController extends Zend_Controller_Action { 

    public function listAction() { 
      //how to call UserController::listAction here? 
    } 
} 

私はAdminControllerに何を入れます::上記listAction私はUserControllerでのコードを記述する必要がありように:: listAction?

おかげ

答えて

0

あなたは別のアクションに転送することができます - 単にアクション、コントローラ、モジュールとのparamsを指定します。

デフォルトの値は現在のリクエストの値です。つまり、デフォルトのモジュールを使用している場合は、デフォルトのモジュールのuserControllerのlistActionにリダイレクトされます。

class AdminController extends Zend_Controller_Action { 

    public function listAction() { 
      //call UserController::listAction 
      return $this->_forward('list', 'user'); 
    } 
} 
3

あなたは行うことができます:あなたが変更するURLを好む場合

class AdminController extends Zend_Controller_Action { 
    public function listAction() { 
     $this->_forward('list','user'); 
    } 
} 

のか:

class baseController extends Zend_Controller_Action { 
// common controller actions 
    public function listAction() { 
     // do stuff 
    } 
} 

class AdminController extends baseController { 
// admin controller specific actions 
} 

class UserController extends baseController { 
// base controller specific actions 
} 

また、使用して他のコントローラに要求を転送することができ

class AdminController extends Zend_Controller_Action { 
    public function listAction() { 
     $this->_redirect('/user/list'); 
    } 
} 
7

コントローラアクションを使用しますヘルパー、そのようにして同じことをやり直す必要があれば、それを再利用することができます。

class My_Controller_Action_Helper_Whatever 
{ 
    public function direct() 
    { 
     return $this; 
    } 

    public function doSomething($paramA, $paramB) 
    { 
     // code 
     return $whatever; 
    } 
} 

次に、あなたのコントローラに実装します。

class UserController extends Zend_Controller_Action 
{ 
    public function someAction() 
    { 
     $this->getHelper('Whatever')->doSomething($a, $b); 
    } 
} 

class AdminController extends Zend_Controller_Action 
{ 
    public function anotherAction() 
    { 
     $this->getHelper('Whatever')->doSomething($a, $b); 
    } 
} 
関連する問題