Nasıl çoğaltma olmadan 'kopya' Zend Framework Eylem için?

3 Cevap php

I have two controllers which have some actions that are really the same. How do I refer to the identical action in another controller?

 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?
    }  
 }

Ben AdminController ne koyarım :: listAction yukarıda sadece UserController içinde kod yazmak zorunda böylece :: listAction?

teşekkürler

3 Cevap

Hiç aynı şeyi yapmak zorunda eğer ben tekrar tekrar kullanabilirsiniz, bu şekilde bir denetleyici eylem yardımcısı kullanmak istiyorsunuz.

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

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

Sonra denetleyicileri uygulamak:

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);
    }
}

Sen yapabilirsin:

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
}

Ayrıca kullanarak diğer kontrolöre isteğini iletmek olabilir:

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

ya da değiştirmek için URL tercih olsaydı:

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

Sen başka bir eylem iletebilirsiniz - basitçe aksiyon, denetleyici modülü ve params belirtin.

Eğer varsayılan modülünde eğer geçerli isteğin değerlerine parametreleri varsayılan, yani aşağıdaki kod varsayılan modülünde UserController arasında listAction yönlendirir.

class AdminController extends Zend_Controller_Action {

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