Как я могу получить различные параметры, связанные с запросом страницы в 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, вы увидите, что это просто тонкая оболочка вокруг других контроллеров, чтобы обеспечить более последовательный поиск параметров. Если вы по какой-либо причине хотите / должны получить к ним доступ напрямую, вы можете увидеть в исходном коде, как это делается.
$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;