Beruflich Dokumente
Kultur Dokumente
Este tutorial supone que ya tienes conocimientos bsicos de Silex (para ello, puedes leer
el manual oficial de Silex) y que has creado una aplicacin Silex siguiendo la estructura
habitual proporcionada por el Silex-Skeleton.
Adems, para simplificar los ejemplos de cdigo, se va a suponer que la aplicacin est
formada solamente por las siguientes cinco rutas:
La situacin inicial
Siguiendo el modelo tradicional de programacin de aplicaciones con Silex, todo el sitio
web se puede crear en un nico archivo PHP llamado index.php :
// archivo index.php
require_once __DIR__.'/../vendor/autoload.php';
$app->run();
A finales de 2012 decidimos rehacer desde cero el sitio librosweb.es y optamos por
open in browser PRO version Are you a developer? Try out the HTML to PDF API pdfcrowd.com
desarrollarlo con Silex. Como al principio no tenamos tantas secciones como ahora,
optamos por seguir esta forma de organizar el cdigo e incluimos todas las rutas y
controladores en un nico archivo.
Como era previsible, este modelo no escala bien en cuanto el sitio es de una
complejidad media. Al aadir todas las secciones del sitio, este archivo se convirti en
un monstruo inmanejable de miles de lneas de cdigo. As que en este tutorial te
contamos los tres mtodos alternativos que hemos utilizado para organizar bien el
cdigo de una aplicacin Silex mediana y las ventajas e inconvenientes de cada una.
require_once __DIR__.'/../vendor/autoload.php';
$eventos = $app['controllers_factory'];
open in browser PRO version Are you a developer? Try out the HTML to PDF API pdfcrowd.com
$eventos->get('/', function () use($app) {
...
})->bind('eventos_index');
$foro = $app['controllers_factory'];
$app->mount('/eventos', $eventos);
$app->mount('/foro', $foro);
open in browser PRO version Are you a developer? Try out the HTML to PDF API pdfcrowd.com
$app->get('/', function() use($app) {
...
})->bind('portada');
$app->run();
La primera ventaja es que puedes aplicar un mismo prefijo a todas las rutas
relacionadas. Por eso en el cdigo anterior, la ruta foro_index no es /foro sino
simplemente / , ya que el prefijo /foro se incluye automticamente al montar la
coleccin de controladores.
La segunda ventaja es que ahora resulta muy sencillo reordenar las rutas de la
aplicacin, ya que para ello simplemente debes cambiar el orden de las instrucciones
mount() . Por ltimo, las colecciones tambin permiten aplicar fcilmente un middleware
a un conjunto de rutas, como muestra el siguiente ejemplo que restringe el acceso a la
seccin del foro:
// ...
open in browser PRO version Are you a developer? Try out the HTML to PDF API pdfcrowd.com
$app = new Silex\Application();
$foro = $app['controllers_factory'];
$foro->get('/{id}/{slug}/', ...)->bind('foro_show');
$foro->get('/', ...)->bind('foro_index');
$app->mount('/foro', $foro);
// ...
// archivo foro.php
$foro = $app['controllers_factory'];
$foro->get('/{id}/{slug}/', ...)->bind('foro_show');
$foro->get('/', ...)->bind('foro_index');
return $foro;
// archivo index.php
$app = new Silex\Application();
// ...
$app->mount('/foro', include __DIR__.'/foro.php');
$app->run();
open in browser PRO version Are you a developer? Try out the HTML to PDF API pdfcrowd.com
Mtodo 2: Controladores en clases PHP
normales
Este segundo mtodo es similar al explicado en la seccin anterior, pero se basa en
crear una clase PHP para cada seccin del sitio. Dentro de esa clase, se define un
mtodo para cada ruta/controlador de esa seccin. El siguiente ejemplo muestra la
clase para la seccin del foro:
// archivo src/Controllers/ForoController.php
namespace Librosweb\Controllers;
use Silex\Application;
class ForoController
{
public function show(Application $app, $id, $slug)
{
...
}
open in browser PRO version Are you a developer? Try out the HTML to PDF API pdfcrowd.com
public function index(Application $app)
{
...
}
}
Aunque puedes llamar como quieras a estas clases y puedes guardarlas en cualquier
sitio, nuestra recomendacin para organizar mejor el cdigo es que guardes estas clases
en el directorio Controllers y que normalices sus nombres para que siempre acaben
en Controller .
Una vez creadas todas estas clases, debes modificar el anterior archivo index.php para
definir en l solamente las rutas de la aplicacin, no los controladores:
require_once __DIR__.'/../vendor/autoload.php';
open in browser PRO version Are you a developer? Try out the HTML to PDF API pdfcrowd.com
$app->get('/eventos/{slug}/', 'Librosweb\Controllers\EventosController::s
how')
->bind('eventos_show');
$app->get('/eventos/', 'Librosweb\Controllers\EventosController::index')
->bind('eventos_index');
$app->get('/foro/{id}/{slug}/', 'Librosweb\Controllers\ForoController::sh
ow')
->bind('foro_show');
$app->get('/foro/', 'Librosweb\Controllers\ForoController::index')
->bind('foro_index');
$app->run();
require_once __DIR__.'/../vendor/autoload.php';
$app->run();
// archivo src/Controllers/ForoController.php
namespace Librosweb\Controllers;
open in browser PRO version Are you a developer? Try out the HTML to PDF API pdfcrowd.com
use Silex\Application;
use Silex\ControllerProviderInterface;
// archivo src/Controllers/EventosController.php
namespace Librosweb\Controllers;
use Silex\Application;
use Silex\ControllerProviderInterface;
open in browser PRO version Are you a developer? Try out the HTML to PDF API pdfcrowd.com
public function connect(Application $app)
{
$controllers = $app['controllers_factory'];
return $controllers;
}
}
Una ltima variante de este mtodo consiste en indicar un callback para cada
controlador, en vez de escribir todo su cdigo mediante una funcin annima. As que el
siguiente ejemplo muestra el cdigo completo tal y como realmente lo utilizo en mis
aplicaciones:
open in browser PRO version Are you a developer? Try out the HTML to PDF API pdfcrowd.com
// archivo src/Controllers/EventosController.php
namespace Librosweb\Controllers;
use Silex\Application;
use Silex\ControllerProviderInterface;
$controllers
->get('/{id}/{slug}/', array($this, 'foroShow'))
->bind('foro_show')
;
$controllers
->get('/', array($this, 'foroIndex'))
->bind('foro_index')
;
open in browser PRO version Are you a developer? Try out the HTML to PDF API pdfcrowd.com
return $controllers;
}
Por ltimo, este mtodo tambin permite aplicar fcilmente un middleware a toda la
coleccin de controladores. As es muy sencillo por ejemplo restringir el acceso a una
parte de la aplicacin:
// archivo src/Controllers/EventosController.php
namespace Librosweb\Controllers;
open in browser PRO version Are you a developer? Try out the HTML to PDF API pdfcrowd.com
use Silex\Application;
use Silex\ControllerProviderInterface;
$controllers->get('/{id}/{slug}/', ...)->bind('foro_show');
$controllers->get('/', ...)->bind('foro_index');
return $controllers;
}
open in browser PRO version Are you a developer? Try out the HTML to PDF API pdfcrowd.com
}
Las ventajas de este mtodo son que el archivo index.php es pequeo y manejable,
que resulta muy sencillo montar los controladores con un prefijo comn ( /foro ,
/eventos , etc.) y que las rutas de la aplicacin se pueden reordenar fcilmente. Adems,
el cdigo de cada seccin del sitio se define en su propia clase, tambin pequea y
manejable, que incluye tanto las rutas como los controladores de esa seccin.
Referencias tiles
La mejor forma de aprender a organizar las aplicaciones medianas con Silex consiste en
ver el cdigo fuente de alguna aplicacin real. Como el cdigo de librosweb.es no es
pblico, enlazamos a continuacin el cdigo de dos aplicaciones Silex medianas que
estn programadas de una manera muy similar:
open in browser PRO version Are you a developer? Try out the HTML to PDF API pdfcrowd.com
Bolt, gestor de contenidos que organiza su cdigo siguiendo el mtodo 2 (ver
ejemplo).
GitList, clon del sitio GitHub y que organiza su cdigo siguiendo el mtodo 3 (ver
ejemplo).
Comentarios
2 Comentarios LibrosWeb
1 Acceder
nete a la conversacin...
TAMBIN EN LIBROSWEB
Preparando tus bocetos sin el Lorem Ipsum El nuevo elemento de HTML5 para crear imgenes
1 comentario hace un ao responsive
Higinio Fuentes Gracias!Que bien que lo haya Ud. 2 comentarios hace un ao
puesto a disposicion. Es una idea muy practica ya que Rosevelt Barahona eso tendria que ser con media
es verdad, el cliente se distrae con el queries en el css.
Fecha de publicacin
8 de noviembre de 2013
open in browser PRO version Are you a developer? Try out the HTML to PDF API pdfcrowd.com
ETIQUETAS POPULARES
composer css diseo html javascript php programacin sistemas symfony
SUSCRBETE GRATIS
3.756
2006-2017 LibrosWeb.es Contacto Novedades Condiciones Privacidad
das online
open in browser PRO version Are you a developer? Try out the HTML to PDF API pdfcrowd.com
open in browser PRO version Are you a developer? Try out the HTML to PDF API pdfcrowd.com