在zend框架中调用其他控制器的成员函数?溶液

2022-08-30 17:48:05

是否可以在zend框架中调用另一个控制器的成员函数,如果是,那么如何调用?

<?php
class FirstController extends Zend_Controller_Action {
    public function indexAction() {
         // general action 
    }   

    public function memberFunction() {
         // a resuable function
    }
}

这是另一个控制器

<?php
class SecondController extends Zend_Controller_Action {
    public indexAction() {
         // here i need to call memberFunction() of FirstController
    }
}

请解释我如何从第二个控制器访问memberFunction()。

溶液

更好的主意是定义一个 AppController,并使所有常用的控制器扩展 AppController,从而进一步扩展Zend_Controller_Action。

class AppController extends Zend_Controller_Action {
    public function memberFunction() {
         // a resuable function
    }
}

class FirstController extends AppController {
    public function indexAction() {
         // call function from any child class
         $this->memberFunction();
    } 
}

现在可以从控制器扩展调用,作为简单继承的规则。memberFunctionAppController


答案 1

控制器不是以这种方式设计的。如果要在当前控制器之后执行其他控制器的操作,请使用以下方法:_forward()

// Invokes SecondController::otherActionAction() after the current action has been finished.
$this->_forward('other-action', 'second');

请注意,这仅适用于操作方法(“memberAction”),而不适用于任意成员函数!

如果执行跨多个控制器需要执行的操作,请将该代码放在操作帮助程序或库类中,以便两个控制器都可以访问共享功能,而不必相互依赖。SecondController::memberFunction()


答案 2

应考虑将代码分解为操作帮助程序或模型,以便可以从需要它的两个控制器调用它。

问候

抢。。。


推荐