I am writing a controller plugin in zf2. I use the following method to get controller from within plugin, but it returns null.
$controller = $this->getController()
Any suggestion?
I am writing a controller plugin in zf2. I use the following method to get controller from within plugin, but it returns null.
$controller = $this->getController()
Any suggestion?
There are two options for which you have no controller set in your plugin.
__construct()
For the first one, a typical example is an
onBootstrap()
method in a module class where obviously you have no controller:This seems an obvious example, but there are other occasions where you are mistakenly assuming a controller exists already (for example, during run of the application, at the route phase; the dispatch still has to come).
The second example is because the controller is injected with setter injection. The setter is called after construction. In pseudo code, this happens:
If you have a plugin like this:
You notice there is no controller set at that phase.
Note, this answer was based on my experience with ZF1, and a quick look at the ZF2 code. Check out this answer.
I haven't played with ZF2 yet, but if the dispatch process and plugins are similar to ZF1, a plugin can't access the controller (at least not in a trivial way) as the controller isn't even instantiated for some of the plugin hooks.
Update: Took a quick look at some of the stock ZF2 controller plugins (as I can't seem to find official docs on creating a custom plugin), and see checks like the following:
So it seems like the controller may not be set in some cases. Since the plugins also support (what I understand to be) an event listener, my guess is that they still can be used at various times in the response process, which may be before a controller is assigned.
Hopefully someone who's used ZF2 can come along and set me straight; but perhaps I've at least pointed you in a somewhat reasonable direction.