Получение параметров $_GET из маршрута в Zend Framework 2

В Zend Framework 1 был очень простой способ разбора URL-маршрутов и установки найденных параметров в суперглобальном $_GET для легкого доступа. Конечно, вы могли бы использовать ->getParam ($something )внутри контроллера, но если параметр был найден в URL-адресе, он также был доступен через $ _GET.

Пример для URLmypage.com/mymodule/mycontroller/myaction/someparam/5:

ЗФ1

$this->getParam('someparam'); // 5
$_GET['someparam']; // 5

ZF2

$this->getEvent()->getRouteMatch()->getParam('someparam'); // 5
$_GET['someparam'] // undefined index someparam

Очевидно, разница в том, что ZF2 НЕ помещает параметры маршрута в суперглобальную $_GET.

Как мне заставить его поместить проанализированные параметры в суперглобальную $_GET, поскольку расширение контроллера и просто определение конструктора, который делает это, не может быть и речи (, потому что RouteMatch еще не является объектом и не может быть вызван из конструктор контроллера )?

Вызов $_GET = $this->getEvent()->getRouteMatch()->getParam('someparam');в каждом из моих контроллеров сработает, но я этого не хочу.

Другими словами, следуя приведенному выше примеру URL-адреса, я хочу иметь возможность выполнить $_GET['someparam'] и при этом получить значение «5» в любом компоненте приложения.

Изменить :Похоже, я недостаточно ясно выразился, поэтому я попытаюсь уточнить еще кое-что. Я хочу, чтобы любой параметр, который я ввожу в URL-адресе через формирование /key/value, был доступен в $ _GET мгновенно.У меня нет проблем с получением параметра, я знаю, как его получить, и я расширил контроллер Zend, так что я могу просто снова вызвать $this ->getParams, как в ZF1, и теперь все контроллеры расширяют его, я просто хочу, чтобы параметры из URL-адреса также автоматически находились в $ _GET, чтобы я мог легко получить к ним доступ в сторонних компонентах, которые изначально используют $ _GET.

Редактировать 2 :Обновлено как реакция на ответ Самуэля Херцога :Я не очень против инвалидации SRP в данном случае, потому что библиотеки построены таким образом, что им нужен прямой доступ к $_GET-они делают свою фильтрацию и напрямую зависят от этого суперглобала. Они также напрямую извлекают $_FILES и $_POST для обработки, просто так работает их код.

Я сделал следующий метод в абстрактном контроллере :$this ->mergeGet (); что в основном заставляет $ _GET поглощать все параметры сопоставления маршрута, и все работает так, как задумано, но, поскольку библиотеки потребуются в каждом контроллере/действии, может быть утомительно вызывать этот метод каждый раз. Если бы в контроллере был метод инициализации ()как в ZF1...

6
задан Swader 6 August 2012 в 19:30
поделиться