Novedades Slim Framework 3.0
Desde hace ya tiempo Slim Framework actualizo la versión 2.6.2 a la 3.0 con muchos cambios, de los cuales podemos destacar:
- Requiere PHP 5.5+
- Inyección de dependencias en el contenedor.
- Ahora se usa FastRoute para gestionar las rutas.
- Uso de PSR-7 (inyección de interface Request – Response).
- Obtener variables_GET y _POST.
- Se elimina HTTP Cache (ahora es un módulo independiente).
- Se elimina Stop/Halt.
- Y un largo etc de cambios.
Veamos algunos ejemplos (obtenido desde la propia documentación)
Nuevo router
$app->get('/', function (Request $req, Response $res, $args = []) { return $res->withStatus(400)->write('Bad Request'); });
En este ejemplo en el router se le pasa una función anónima con 3 parámetros Request, Response y args.
Si nos fijamos vemos que se inyecta Request y Response (interface) gracias a PSR-7
Luego retornamos el objeto $res con estado 400 y el texto ‘Bad Request’
Obtener variables_GET y _POST
$app->get('/', function (Request $req, Response $res, $args = []) { $myvar1 = $req->getParam('myvar'); //checks both _GET and _POST [NOT PSR-7 Compliant] $myvar2 = $req->getParsedBody()['myvar']; //checks _POST [IS PSR-7 compliant] $myvar3 = $req->getQueryParams()['myvar']; //checks _GET [IS PSR-7 compliant] });
En esta línea buscamos en el método GET o POST (no cumple el estándar PSR-7) el parámetro myvar
$myvar1 = $req->getParam('myvar');
En esta línea buscamos a través del método POST (cumple con el estándar PSR-7) el parámetro myvar
$myvar2 = $req->getParsedBody()['myvar'];
En esta línea buscamos a través del método GET (cumple con el estándar PSR-7) el parámetro myvar
$myvar3 = $req->getQueryParams()['myvar'];
De esta forma podemos obtener los valores desde el Request más información aquí
Cambio en el redirector
En la versión 2.x uno podía usar el helper $app->redirect() cuando queríamos realizar una redirección, ahora con la versión 3.0 hacemos uso del objeto request para realizar la redirección.
$app->get('/', function ($req, $res, $args) { return $res->withStatus(302)->withHeader('Location', 'your-new-uri'); });
Cambia urlFor() por pathFor() en el router
$app->get('/', function ($request, $response, $args) { $url = $this->router->pathFor('home'); $response->write("<a href='$url'>Home</a>"); return $response; })->setName('home');
En este ejemplo a través de $this->router llamamos al método pathFor pasando el nombre de asignado a nuestra ruta, en el ejemplo vemos un setName(‘home’)
Existen muchos más cambios que podéis ver aquí