sorry for my bad english, i'm from Russia
began to learn zend framework 2... Sample in controller, readAction():
use Zend\View\Helper\Url;
....
$helperUrl = new Url();
$address = $helperUrl('news', array('action' => 'index'));
As a result, thrown exception:
Zend\View\Exception\RuntimeException
File:
W:\home\zf2\vendor\zendframework\
zendframework\library\Zend\View\Helper\Url.php:80
Message:
No RouteStackInterface instance provided
Please, help me. what I'm doing wrong?
You can't use a viewhelper in a controller - and you don't need to.
There's also a Url
controller plugin that does pretty much the same.
Controller plugins are invokable classes, you can use them like this (controller's action context):
$url = $this->url()->fromRoute($route, $params, $options, $reuseMatchesParams);
All parameters are optional. For further information, check the code in Zend\Mvc\Controller\Plugin\Url
or read the docs.
Helpers and plugins, while they can be directly instantiated, usually shouldn't, as they typically are managed by a PluginManager. The PluginManager is a subclass of the ServiceManager, and, as such, provides a lot of functionality around plugin creation, including injection of standard collaborators, usage of factories to provide dependency injection, and more.
In the case of the Url helper, there is a factory that ensures it has the configured router injected -- if you instantiate it directly, you won't have this, and it won't be able to do its job, as you noticed!
As Daniel noted, you also want to make sure you're getting a plugin that's appropriate for the context. If you're in a controller, check to see if there's a controller plugin that will do the job for you. Daniel linked to the docs in his post.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With