跨模块通信zend框架php


cross module communication zend framework php

如何从Zend中的另一个模块controller::action调用controller:动作。

目录树

-modules
--auth
---controllers
--crm
--default
---controllers

我怎么能做这样的事情:

/* module'default'controller */
public function indexAction(){
        $something = 'model'auth'IndexController::doSomething();
}

更新:

我知道在CodeIgniter中通过模块化扩展可以实现类似的功能参见此处

$out = modules::run('module/controller/method', $param1, ....);

我所知道的唯一能实现该功能的是ActionStack助手:
ZF操作堆栈帮助程序
控制器实际上并不打算以与大多数其他方法相同的方式进行调用。

如果你需要从另一个调用一个操作,而不按照程序的流程进行,那么就会出现RockyFord所说的错误。

在你关于部分检索信息以构建小部件的解释中,我会在库中创建一个助手,这样它就可以从任何地方调用,比如:

-lib
--MyLib
---Controller
----Action
-----Helper
------ Foo.php

Foo动作助手可以是:

class MyLib_Controller_Action_Helper_Foo extends Zend_Controller_Action_Helper_Abstract {
   public setBar() { 
      // some code here
   }       
   public getBar() { 
      // some code here for retrieving the partial
   }
}

然后从另一个控制器动作甚至另一个库函数调用它

 // in a controller action
 ...
 $foo = new MyLib_Controller_Action_Helper_Foo();
 $foo->setBar();
 $bar = $foo->getBar();
 $this->view->bar = $bar;
 ...

希望这能帮助

Namastê!!

如果你想这么做,你的设计可能有问题。尝试将所需的功能移动到第三个类,例如移动到操作助手,并从两个控制器调用它。也就是说,应该可以进行

$a = new A_Controller();
$a->aAction();

A_Controller::aAction();

如果aAction被声明为静态。(不过我都没试过。)

我同意RockyFord的建议,即动作堆栈助手可能是你的最佳选择。

其他解决方案可能包括使用一些参数手动转发到应用程序中其他位置的另一个操作。

function fooAction()
{
    // Going to someplace else
    $this->_forward($action, $controller, $module, $params);
}