2011-11-14 52 views
43

Estoy jugando con Slim PHP como marco para una API RESTful, y hasta ahora es genial. Es muy fácil trabajar con él, pero tengo una pregunta a la que no puedo encontrar la respuesta. ¿Cómo puedo obtener los parámetros GET de la URL en Slim PHP?Parámetros Slim PHP y GET

Por ejemplo, si quería utilizar lo siguiente:

http://api.example.com/dataset/schools?zip=99999&radius=5 

Un caso de los lunes? ¿Lo estoy pensando demasiado? ¡Gracias por adelantado!

+1

Estos no son GET params ?? ¿Estás seguro? – Galled

+0

Blerg! Me refiero a GET, no POST, lo siento. –

+0

¿Qué tal la variable $ _GET? No funciona? – Galled

Respuesta

93

Esto se puede hacer muy fácilmente en el marco delgado, puede utilizar:

$paramValue = $app->request()->params('paramName'); 

$ aplicación que aquí hay una instancia Slim.

O si quieres ser más específico

// GET parámetro parámetro

$paramValue = $app->request()->get('paramName'); 

// POSTAL

$paramValue = $app->request()->post('paramName'); 

Se podría utilizar como tal en una ruta específica

$app->get('/route', function() use ($app) { 
      $paramValue = $app->request()->params('paramName'); 
}); 

Puede leer la documentación en el objeto de solicitud http://docs.slimframework.com/request/variables/

+0

Muchas gracias. Tu respuesta me ayudó a resolver mi problema. – Dibish

+0

Sí, podemos ir y leer los documentos, pero su respuesta explica mucho mejor;) – Pathros

2

No estoy seguro mucho sobre Delgado PHP, pero si desea acceder a los parámetros de una URL, entonces debería usar el:

$_SERVER['QUERY_STRING'] 

Encontrará un montón de entradas de blog en Google para resolver esto. También puede usar la función PHP parse_url.

+0

George P y fire tienen razón, solo tuve que usar $ _GET ['var']. Pensé que tal vez debido al enrutamiento integrado de SlimPHP tendría que hacer algo elegante, pero no. La buena pasada de moda $ _GET [] funciona bien. Solo pensarlo demasiado, ¡gracias chicos! –

+0

Yo recomendaría seguir con $ app-> request-> get ('paramName'); incluso aunque esto sí funciona – Alex

+0

@Alex ¿Puedes explicar por qué lo recomendarías? – Holonaut

3

Arreglé mi API para recibir un cuerpo JSON O un parámetro url como este.

$data = json_decode($request->getBody()) ?: $request->params(); 

Esto podría no ser adecuado para todos, pero funcionó para mí.

1

SI QUIERES LLEGAR CON PARÁMETROS DE PARAM NAME

$value = $app->request->params('key'); 

Los parametros() método buscará primero se colocan las variables, y luego publicar las variables, a continuación, obtener las variables. Si no se encuentran variables, se devuelve null.Si sólo desea buscar un tipo específico de variable, se puede utilizar en lugar de estos métodos:

// --- GET la variable

$paramValue = $app->request->get('paramName'); 

// --- POSTAL

$paramValue = $app->request->post('paramName'); 

// --- PONER variables

$paramValue = $app->request->put('paramName'); 

SI QUIERE OBTENER TODOS LOS PARÁMETROS DE SOLICITUD sin especificar param name, usted puede conseguir todo de ellos en la matriz en formato key => VALOR

$data = json_decode($app->request->getBody()) ?: $app->request->params(); 

$ datos serán una matriz que contiene todos los campos de la solicitud como se detalla a continuación

$data = array(
    'key' => 'value', 
    'key' => 'value', 
    //... 
); 

Espero que te ayude!

10

Para Slim 3 necesita utilizar el método getQueryParams() en el objeto PSR 7 Request.

Citando the documentation:

Usted puede obtener los parámetros de consulta como una matriz asociativa en la solicitud objeto usando getQueryParams().

También puede obtener un solo valor de parámetro de consulta, con el valor por defecto opcional si el parámetro no está presente, utilizando getQueryParam ($ clave, por defecto $ = null).

+1

Gracias por publicar esto. Es muy difícil encontrar preguntas y respuestas que sean relevantes para Slim 3. –

0

Uso $id = $request->getAttribute('id'); //where id is the name of the param

0

En delgado 3.0 lo siguiente también funciona:

routes.php

require_once 'user.php'; 

$app->get('/user/create', '\UserController:create'); 

user.php

class UserController 
{ 
    public function create($request, $response, array $args) 
    { 
     $username = $request->getParam('username')); 
     $password = $request->getParam('password')); 
     // ... 
    } 
}