В настоящее время я изучаю ZF2, создавая небольшое приложение MVC примерно на основе приложения скелета. Сейчас я пытаюсь скрыть некоторые фиксированные элементы HTML на основе сопоставленного маршрута: как пример, я не хочу, чтобы главное меню отображалось во время фазы входа.
Я могу сделать это легко, передав параметры переключения в качестве возвращаемых значений из действий контроллера, но это не кажется правильным, поэтому я хотел бы просто проверить соответствие маршрута из макета и составить компоновку соответственно.
Проблема в том, что я не знаю, как получить согласованный маршрут в шаблоне. Это возможно? Существуют ли другие решения, позволяющие избежать добавления логики компоновки в контроллеры?
Изменить после хорошей работы Франкенштейна, я смог найти решение для этого. Мне нравится идея использования помощника, поэтому я просто попытался передать ему объект Application из функции boostrap в основном модуле:
$app = $e->getApplication();
$serviceManager = $app->getServiceManager();
....
$serviceManager->get('viewhelpermanager')->setFactory('getRoute', function($sm) use ($app) {
return new Helper\GetRoute($app);
});
и вспомогательная функция:
use Zend\View\Helper\AbstractHelper;
class GetRoute extends AbstractHelper {
private $sm;
public function __construct($app) {
$this->sm = $app->getServiceManager();
}
public function echoRoute() {
$router = $this->sm->get('router');
$request = $this->sm->get('request');
$routeMatch = $router->match($request);
if (!is_null($routeMatch))
echo $routeMatch->getMatchedRouteName();
}
}
возможно, есть более чистый, более ZF2ish способ сделать это...