php - Cómo acceder a los parámetros de ruta, publicación, obtención, etc. en Zend Framework 2
file-upload zend-route (3)
¿Cómo puedo obtener varios parámetros relacionados con la solicitud de página en zf2? Al igual que los parámetros de publicación / obtención, la ruta a la que se accede, los encabezados enviados y los archivos cargados.
La forma más fácil de hacerlo sería usar el plugin Params, presentado en beta5. Tiene métodos de utilidad para facilitar el acceso a diferentes tipos de parámetros. Como siempre, leer las pruebas puede ser valioso para entender cómo se supone que se debe usar algo.
Obtenga un valor único
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 predeterminados
Todos estos métodos también admiten valores predeterminados que se devolverán si no se encuentra ningún parámetro con el nombre de pila.
Ejemplo:
$orderBy = $this->params()->fromQuery(''orderby'', ''name'');
Al visitar http://example.com/?orderby=birthdate , $ orderBy tendrá el valor de fecha de nacimiento .
Al visitar http://example.com/ , $ orderBy tendrá el nombre de valor predeterminado .
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
Al visitar http://example.com/?orderby=birthdate&filter=hasphone $ allGetValues habrá una matriz como
array(
''orderby'' => ''birthdate'',
''filter'' => ''hasphone'',
);
No usa el plugin Params
Si comprueba el código fuente del complemento Params, verá que se trata de una capa delgada alrededor de otros controladores para permitir una recuperación de parámetros más consistente. Si por alguna razón quiere / necesita acceder a ellos directamente, puede ver en el código fuente cómo se hace.
Ejemplo:
$this->getRequest()->getRequest(''name'', ''default'');
$this->getEvent()->getRouteMatch()->getParam(''name'', ''default'');
NOTA: Podría haber usado los superglobales $ _GET, $ _POST, etc., pero eso no se recomienda.
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 simple de Zend:
''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 utilizando Angular''s http.post. La publicación estuvo bien pero el método de recuperación en Zend
$this->params()->fromPost(''paramname'');
no obtuve nada en este caso. Entonces mi solución fue, después de probar todo tipo de métodos como $ _POST y los otros métodos indicados anteriormente, leer de ''php: //'':
$content = file_get_contents(''php://input'');
print_r(json_decode($content));
Conseguí mi matriz json al final. Espero que esto ayude.
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;