Este documento describe Silex, un micro-framework PHP para el desarrollo web ágil y profesional basado en los componentes de Symfony2. Silex ofrece las ventajas de ser ligero, flexible y fácil de usar, aunque con menos funcionalidad que Symfony2. El documento explica conceptos básicos de Silex como el enrutamiento, controladores, middlewares y proveedores de servicios.
Denunciar
Compartir
Denunciar
Compartir
1 de 150
Descargar para leer sin conexión
Más contenido relacionado
Silex, desarrollo web ágil y profesional con PHP
1. Silex
desarrollo web ágil y
profesional con PHP
BILBOSTACK JAVIER EGUILUZ
26 ENERO 2013
2. Gracias a la organización.
Asier Fran Ibon Vicenç
3. Agenda
1. Introducción
2. Programando aplicaciones
3. DEMO
4. Buenas prácticas
5. Puntos débiles
15. Sojourner Curiosity
(2007) (2012)
Masa 11 kg 900 kg
Coste ($) 150 M 1.800 M
Memoria RAM 64 KB 256 MB
CPU 2 MHz 200 MHz
16. Es importante tener en cuenta que...
• El grande jamás podrá ser tan ágil
como el pequeño.
• El pequeño jamás podrá competir
en potencia y funcionalidad con el
grande.
50. Ruta con partes variables
$app->get('/speakers/{slug}', function ()
use ($app) {
// ...
});
51. Ruta con partes variables
$app->get('/speakers/{slug}', function ()
use ($app) {
// ...
});
52. Ruta con partes variables
$app->get('/speakers/{slug}', function ()
use ($app) {
// ...
});
/speakers/pablo-garaizar
/speakers/carlos-sanchez
/speakers/esto-esta-mal
62. Modificando las variables de la ruta
$app->get('/schedule/{slug}',
function ($slug) use ($app) {
// ...
})->convert('slug', function ($slug) {
return strtolower($slug);
});
63. Modificando las variables de la ruta
$app->get('/schedule/{slug}',
function ($slug) use ($app) {
// ...
})->convert('slug', function ($slug) {
return str_replace('-', '_', $slug);
});
64. Restringiendo las variables de la ruta
$app->get('/schedule/{track}', function ($track)
{
// ...
})->assert('track', 'd+');
65. Restringiendo las variables de la ruta
$app->get('/schedule/{track}', function ($track)
{
// ...
})->assert('track', 'trackd+');
66. Restringiendo las variables de la ruta
$app->get('/schedule/{track}', function ($track)
{
// ...
})->assert('track', '1|2');
72. Controlador típico
$app->get('/', function () use ($app) {
$ponentes = $app['ponentes'];
return $app['twig']->render('portada.twig',
array('ponentes' => $ponentes)
);
})->bind('portada');
73. Controlador típico
$app->get('/', function () use ($app) {
$ponentes = $app['ponentes'];
return $app['twig']->render('portada.twig',
array('ponentes' => $ponentes)
);
})->bind('portada');
74. Gestión de errores
$app->get('/speakers/{slug}',
function ($slug) use ($app) {
if (...) {
$app->abort(404, "No existe el ponente.");
}
// ...
return $app['twig']->render('ponente.twig',...);
})->bind('ponente');
75. Gestión de errores
$app->get('/speakers/{slug}',
function ($slug) use ($app) {
if (...) {
$app->abort(404, "No existe el ponente.");
}
// ...
return $app['twig']->render('ponente.twig',...);
})->bind('ponente');
76. Controlador especial para errores
$app->error(function (Exception $e, $code)
use ($app) {
// ...
});
77. Controlador especial para errores
$app->error(function (Exception $e, $code)
use ($app) {
// ...
});
78. Esqueleto de una aplicación Silex
$app->get('/', ...)->bind('portada');
$app->get('/agenda', ...)->bind('agenda');
$app->get('/speakers/{slug}', ...)
->bind('ponente');
$app->get('/schedule/{slug}', ...)
->bind('ponencia');
85. Secuencia de ejecución
• Buscar la ruta que pide el usuario.
• Comprobar la seguridad.
• Ejecutar filtro before()
• Ejecutar controlador de la ruta
86. Ejemplo de filtro before
$app->before(function (Request $request) {
if (...) {
return new RedirectResponse('/login');
}
});
88. Secuencia de ejecución
• Buscar la ruta que pide el usuario.
• Comprobar la seguridad.
• Ejecutar filtro before( )
• Ejecutar controlador de la ruta.
• Ejecutar filtro after( )
• Enviar respuesta al usuario.
89. Ejemplo de filtro after
$app->after(function (Request $request) {
log('...');
});
90. Ejemplo de filtro after
$app->after(function (Request $request) {
log('...');
});
¿Dónde está mi
respuesta?
131. Controladores como clases
namespace IgorwShopController;
use SilexApplication;
use SymfonyComponentHttpFoundationRequest;
class ShopController
{
public function indexAction(Request $request, Application $app)
{
...
}
}
136. i18n (internacionalización)
• Fácil traducir contenidos
{{ "Hola Mundo"|trans }}
• No es cómodo traducir rutas y
contenidos de la base de datos.
137. ORM
• No hay soporte oficial del ORM
completo (Doctrine2).
• No hay ORM alternativos ligeros.
• Si tu aplicación necesita un ORM,
puede ser demasiado grande para
Silex.
138. Depuración
// activar el modo debug
$app['debug'] = true;
// activar el log
use SilexProviderMonologServiceProvider;
$app->register(new MonologServiceProvider(),
array(
'monolog.logfile' => __DIR__.'/../logs/dev.log',
));
146. Conclusiones
• Silex es un microframework, pero no es
un juguete.
• Silex sirve para cualquier aplicación
web que no sea enorme.
147. Conclusiones
• Silex es un microframework, pero no es
un juguete.
• Silex sirve para cualquier aplicación
web que no sea enorme.
• Silex reduce a “horas” el tiempo de
desarrollo de aplicaciones enteras.
148. Conclusiones
• Silex es un microframework, pero no es
un juguete.
• Silex sirve para cualquier aplicación
web que no sea enorme.
• Silex reduce a “horas” el tiempo de
desarrollo de aplicaciones enteras.
• Silex combina la agilidad de PHP con la
profesionalidad de Symfony.