Php 在zend框架中调用其他控制器的成员函数?
是否可以在zend框架中调用另一个控制器的成员函数,如果可以,如何调用Php 在zend框架中调用其他控制器的成员函数?,php,zend-framework,Php,Zend Framework,是否可以在zend框架中调用另一个控制器的成员函数,如果可以,如何调用 <?php class FirstController extends Zend_Controller_Action { public function indexAction() { // general action } public function memberFunction() { // a resuable function }
<?php
class FirstController extends Zend_Controller_Action {
public function indexAction() {
// general action
}
public function memberFunction() {
// a resuable function
}
}
现在可以从扩展
AppController
的控制器调用memberFunction
,这是一个简单继承规则。控制器不是设计成这样使用的。如果要在当前控制器之后执行其他控制器的操作,请使用\u forward()
方法:
// Invokes SecondController::otherActionAction() after the current action has been finished.
$this->_forward('other-action', 'second');
请注意,这只适用于操作方法(“memberAction”),而不适用于任意成员函数
如果
SecondController::memberFunction()
跨多个控制器执行所需的操作,请将该代码放入操作帮助器或库类中,因此,两个控制器都可以访问共享功能而不必相互依赖。 < P>您应该考虑将代码分解为动作助手或模型,以便可以从需要它的两个控制器调用。
问候,
Rob…我建议您遵循DRY并将这些函数移到公共库位置。例如,在库文件夹中创建
My/Util/
归档
CommonFunctions.php
然后给你们班打电话
My_Util_CommonFunctions
并定义您的方法
现在,您可以使用必须注册的新名称空间从代码中的任何位置调用它们
$loader = Zend_Loader_Autoloader::getInstance();
$loader->registerNamespace(array('My_'));
在任何控制器中,您都可以使用以下命令调用自定义方法:
My_Util_CustomFunctions::yourCustomMethod($params);
仅供参考,当我需要公共功能时,我肯定更喜欢设置共享类或模块。然而,我在使用ZF2时遇到了一种情况,在这种情况下,使用在其他几个控制器上扩展的父AppController会非常有帮助。你的解决方案很有效。在ZF2中设置:“class AppController扩展AbstractActionController”和子控制器将是相同的:“class FirstController扩展AppController”我知道有更好的方法可以做到这一点,我可能应该重新考虑一些应用程序结构,但它是有效的。2015年更新:$this->u forward()不推荐使用,因为ZF 1.7-使用$this->forward()在撰写本文时,文档仍然引用了_forward()。但你是对的:代码清楚地显示出
\u forward
已弃用。谢谢
$loader = Zend_Loader_Autoloader::getInstance();
$loader->registerNamespace(array('My_'));
My_Util_CustomFunctions::yourCustomMethod($params);