zf2 Uncaught исключение времени выполнения "Не предоставлен экземпляр RouteMatch" с маршрутом i18n
У меня есть проблема, так как я включаю lang в параметры маршрута для Zf2. Мои действительные маршруты в порядке, и это работает. Но когда я даю неправильный маршрут, возникает это исключение, и оно не перехватывается zf2:
Fatal error: Uncaught exception 'Zend\View\Exception\RuntimeException' with message 'No RouteMatch instance provided'[path]\vendor\zendframework\zendframework\library\Zend\View\Helper\Url.php on line 64
Это пример кода, который я подозреваю, что он неверен в случае неправильного маршрута:
<ul class="dropdown-menu">
<li><a href="<?= $this->url($this->route, array('lang' => 'fr'));?>">
<span class="flag fr"></span> Français
</a></li>
<li><a href="<?=$this->url($this->route, array('lang' => 'en'));?>">
<span class="flag gb"></span> English
</a></li>
</ul>
Это имеет смысл, этот-> маршрут неверен, если указан неправильный путь, что мне нужно изменить, чтобы исправить это, пожалуйста?
2 ответа
В вашем AnyModule\ Module.php напишите строки ниже
public function onBootstrap(MvcEvent $e)
{
$application = $e->getApplication();
$eventManager = $application->getEventManager();
/**
* Zf2 View Url helper bug fix
* The problem is Url helper always requires RouteMatch
* if you used null in route name or set reuse matches to true
* even in 404 error but 404 itself means that there is not any route match ;)
*/
$eventManager->attach(
\Zend\Mvc\MvcEvent::EVENT_DISPATCH_ERROR,
function ($e) {
$application = $e->getApplication();
$serviceLocator = $application->getServiceManager();
$match = $application->getMvcEvent()->getRouteMatch();
if (null === $match) {
$params = [
'__NAMESPACE__' => 'Application\Controller',
'controller' => 'Index',
'action' => 'not-found',
// Here you can add common params for your application routes
];
$routeMatch = new \Zend\Mvc\Router\RouteMatch($params);
$routeMatch->setMatchedRouteName('home');
$application->getMvcEvent()->setRouteMatch(
$routeMatch
);
}
}
);
}
Если вы посмотрите на строку 62 Zend\View\Helper\Url
помощник, понятно, что исключение будет возбуждено только если вы передадите NULL
в качестве $name
аргумент.
// ...Zend\View\Helper\Url.php
if ($name === null) {
if ($this->routeMatch === null) {
throw new Exception\RuntimeException('No RouteMatch instance provided');
}
Поэтому вы должны убедиться, что $this->route
Переменная view правильно установлена перед использованием.