Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在zend框架中调用其他控制器的成员函数?_Php_Zend Framework - Fatal编程技术网

Php 在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 }

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

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