Cómo acceder a la ruta, publicar, obtener, etc. parámetros en Zend Framework 2


¿Cómo puedo obtener varios parámetros relacionados con la solicitud de página en zf2? Como los parámetros post/get, la ruta a la que se accede, los encabezados enviados y los archivos cargados.

Author: Matsemann, 2012-08-22

3 answers

La forma más fácil de hacerlo sería usar el complemento Params, introducido en beta5. Tiene métodos de utilidad para facilitar el acceso a diferentes tipos de parámetros. Como siempre, leer las pruebas puede resultar valioso para entender cómo se supone que se debe usar algo.

Obtener un solo valor

Para obtener el valor de un parámetro con nombre en un controlador, deberá seleccionar el método apropiado para el tipo de parámetro que está buscando y pasar el nombre.

Ejemplos:

$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

 

Valores por defecto

Todos estos métodos también admiten valores predeterminados que se devolverán si no se encuentra ningún parámetro con el nombre dado.

Ejemplo:

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

Al visitar http://example.com/?orderby=birthdate , $orderBy, tendrá el valor fecha de nacimiento.
Al visitar http://example.com / , or OrderBy tendrá el predeterminado valor nombre.
 

Obtener todos los parámetros

Para obtener todos los parámetros de un tipo, simplemente no pase nada y el complemento Params devolverá una matriz de valores con sus nombres como claves.

Ejemplo:

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

Cuando visite http://example.com/?orderby=birthdate&filter=hasphone $allGetValues será una matriz como

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

 

No usar el complemento Params

Si comprueba la fuente code para el complemento Params, verá que es solo un envoltorio delgado alrededor de otros controladores para permitir una recuperación de parámetros más consistente. Si por alguna razón quieres / necesitas acceder a ellos directamente, puedes ver en el código fuente cómo se hace.

Ejemplo:

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

NOTA: Podrías haber usado los superglobales _ _GET, etc _POST, etc., pero eso es desalentador.

 194
Author: Matsemann,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-07-12 08:48:08

La forma más fácil de obtener una cadena json publicada, por ejemplo, es leer el contenido de 'php://input' y luego decodificarlo. Por ejemplo, tenía una ruta Zend simple:

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

Y quería publicar datos en él usando Angular http http.post. El post estaba bien, pero el método retrive en Zend

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

No obtuvo nada en este caso. Así que mi solución fue, después de probar todo tipo de métodos como $_POST y los otros métodos mencionados anteriormente, leer desde ' php://':

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

Tengo mi matriz json al final. Espero que esto ayude.

 4
Author: Susy11,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-04-10 08:24:01
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;
 1
Author: Ankit Vishwakarma,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-12-08 20:18:33