3 ответов:
самый простой способ сделать это было бы использовать плагин Params, представленного в beta5. Она имеет методы, чтобы сделать его легко получить доступ к различным типам параметров. Как всегда, читаю тесты может оказаться полезным, чтобы понять, как что-то должно использоваться.
получить одно значение
чтобы получить значение именованного параметра в контроллер, вам необходимо выбрать соответствующий метод для типа параметра ищем и сдаем на имя.
примеры:
$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
при проверке исходный код для плагина 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', ), ), ),и я хотел отправить данные на него с помощью Angular $http.должность. Сообщение было в порядке, но метод retrive в 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;
Comments