Respuestas:
La forma más sencilla de hacerlo sería utilizar 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 comprender cómo se supone que se debe usar algo.
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.
$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
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.
$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/ ,
$ orderBy tendrá el nombre del valor predeterminado .
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.
$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',
);
Si verifica el código fuente del complemento Params, verá que es solo una envoltura delgada alrededor de otros controladores para permitir una recuperación de parámetros más consistente. Si por alguna razón desea / necesita acceder a ellos directamente, puede ver en el código fuente cómo se hace.
$this->getRequest()->getRequest('name', 'default');
$this->getEvent()->getRouteMatch()->getParam('name', 'default');
NOTA: Podría haber utilizado las superglobales $ _GET, $ _POST, etc., pero 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 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 $ http.post de Angular. 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 mencionados anteriormente, leer desde 'php: //':
$content = file_get_contents('php://input');
print_r(json_decode($content));
Obtuve mi matriz json al final. Espero que esto ayude.
$content = $this->getRequest()->getContent()
?name=mike
?
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;
Todos los métodos anteriores funcionarán bien si su tipo de contenido es "application / -www-form-urlencoded". Pero si su tipo de contenido es "application / json", tendrá que hacer lo siguiente:
$ params = json_decode (file_get_contents ('php: // input'), true); print_r ($ params);
Motivo: consulte el n. ° 7 en https://www.toptal.com/php/10-most-common-mistakes-php-programmers-make
Si no tiene acceso al complemento, por ejemplo, fuera del controlador, puede obtener parámetros de servicelocator como este
//from POST
$foo = $this->serviceLocator->get('request')->getPost('foo');
//from GET
$foo = $this->serviceLocator->get('request')->getQuery()->foo;
//from route
$foo = $this->serviceLocator->get('application')->getMvcEvent()->getRouteMatch()->getParam('foo');
$this->params('key', 'default')