Как получить доступ к route, post, get и т. д. параметры в Zend Framework 2



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

726   3  

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

    Ничего не найдено.