2

in Zend Framework 2 as I can recall a plugin module A plug-in module B.

If you recall the plugin from the controller, it works everywhere, but I need to call a plugin in another plugin.

How can I do?

Carol Casta
  • 75
  • 1
  • 9

3 Answers3

2

You basically have to inject PluginA into PluginB. I.e:

$pluginA = new PluginA();
$pluginB = new PluginB($pluginA);
echo $pluginB("Hello World");

class PluginB {
    protected $pluginA;
    public function __construct(PluginA $pluginA) {
        $this->pluginA = $pluginA;
    }

    public function __invoke($arg) {
        $step1 = $this->doSomething($arg);
        return $this->pluginA->doSomeOtherPluginAThing($step1);
    } 
}

Ultimately your Solution would look a little different and you'd do the injection via ServiceManager Factories

Sam
  • 16,435
  • 6
  • 55
  • 89
1

You can access controller from inside your plugin:

$this->getController()->anotherPlugin();
claustrofob
  • 5,448
  • 2
  • 19
  • 22
0

Try loading the plugin from the Controller Plugin Manager.

PluginB

$pluginA = $this->serviceLocator->get('ControllerPluginManager')->get('pluginA');
// Invoke plugin as normal
$pluginA(params);
chandlermania
  • 360
  • 2
  • 8