Как получить доступ к параметрам маршрута, сообщения, получения и т. Д. В Zend Framework 2

Как я могу получить различные параметры, связанные с запросом страницы в zf2? Как параметры ввода / получения, доступ к маршруту, отправленные заголовки и загруженные файлы.

Самый простой способ сделать это – использовать плагин Params , введенный в бета5. Он имеет полезные методы, облегчающие доступ к различным типам параметров. Как всегда, чтение тестов может оказаться полезным для понимания того, как что-то должно использоваться.

Получить одно значение

Чтобы получить значение именованного параметра в контроллере, вам нужно выбрать соответствующий метод для типа параметра, который вы ищете, и передать имя.

Примеры:

$this->params()->fromPost('paramname'); // From POST $this->params()->fromQuery('paramname'); // From GET $this->params()->fromRoute('paramname'); // From RouteMatch $this->params()->fromHeader('paramname'); // From header $this->params()->fromFiles('paramname'); // From file being uploaded 

Значения по умолчанию

Все эти методы также поддерживают значения по умолчанию, которые будут возвращены, если не будет найден параметр с заданным именем.

Пример:

 $orderBy = $this->params()->fromQuery('orderby', 'name'); 

При посещении http://example.com/?orderby=birthdate , $ orderBy будет иметь значение даты рождения .
При посещении http://example.com/ , $ orderBy будет иметь имя по умолчанию .

Получить все параметры

Чтобы получить все параметры одного типа, просто ничего не передавайте, и плагин Params возвращает массив значений с их именами в качестве ключей.

Пример:

 $allGetValues = $this->params()->fromQuery(); // empty method call 

При посещении http://example.com/?orderby=birthdate&filter=hasphone $ allGetValues будет массив вроде

 array( 'orderby' => 'birthdate', 'filter' => 'hasphone', ); 

Не использовать Params plugin

Если вы проверите исходный код плагина Params, вы увидите, что это просто тонкая оболочка вокруг других контроллеров, чтобы обеспечить более последовательный поиск параметров. Если вы по какой-либо причине хотите / должны получить к ним доступ напрямую, вы можете увидеть в исходном коде, как это делается.

Пример:

 $this->getRequest()->getRequest('name', 'default'); $this->getEvent()->getRouteMatch()->getParam('name', 'default'); 

ПРИМЕЧАНИЕ. Вы могли бы использовать суперглобалы $ _GET, $ _POST и т. Д., Но это не рекомендуется.

Самый простой способ получить опубликованную строку json, например, – это прочитать содержимое «php: // input», а затем декодировать его. Например, у меня был простой маршрут Zend:

 'save-json' => array( 'type' => 'Zend\Mvc\Router\Http\Segment', 'options' => array( 'route' => '/save-json/', 'defaults' => array( 'controller' => 'CDB\Controller\Index', 'action' => 'save-json', ), ), ), 

и я захотел опубликовать данные, используя $ http.post от Angular. Сообщение было прекрасным, но метод извлечения в Zend

 $this->params()->fromPost('paramname'); 

в этом случае ничего не получилось. Таким образом, мое решение состояло в том, что, пробовав всевозможные методы, такие как $ _POST и другие методы, указанные выше, читайте из «php: //»:

 $content = file_get_contents('php://input'); print_r(json_decode($content)); 

В конце концов, я получил массив json. Надеюсь это поможет.

 require_once 'lib/Zend/Loader/StandardAutoloader.php'; $loader = new Zend\Loader\StandardAutoloader(array('autoregister_zf' => true)); $loader->registerNamespace('Http\PhpEnvironment', 'lib/Zend/Http'); // Register with spl_autoload: $loader->register(); $a = new Zend\Http\PhpEnvironment\Request(); print_r($a->getQuery()->get()); exit;