En este mini-tutorial vamos a explicar desde la instalación hasta la creación de un pequeño proyecto final como funciona el micro-framework basado en Symfony Silex, la idea es crear un mini-cms totalmente operativo.
Lo primero que haremos sera instalar composer el manejador de dependencias de facto de PHP en los últimos tiempos, composer es una herramienta que permite instalar las librerías de las que depende un proyecto PHP, en nuestro caso Silex.
Este mini-tutorial esta orientado a sistemas Linux así que daré por sentado que tenemos las herramientas necesarias.
Para instalar composer simplemente debemos ejecutar la siguiente sentencia en cualquier terminal dentro de la carpeta de nuestro proyecto:
curl -sS https://getcomposer.org/installer | php
Ahora ya tenemos composer en nuestra carpeta, lo siguiente que necesitamos es decirle a composer que queremos instalar Silex.
Para ello creamos dentro de la carpeta un fichero llamado composer.json, este es el fichero que composer leera para saber que paquetes queremos instalar, su formato es JSON.
Si necesitas mas información sobre composer escribí hace tiempo sobre ello http://blog.deancos.com/2012/09/22/dependencias-en-php-composer/
{
"require": {
"silex/silex": "~1.1";
}
}
Una vez hemos creado el fichero podemos decirle a composer que instale el paquete y todas sus dependencias:
php composer.phar install
Cuando termine su trabajo ya tendremos en nuestra carpeta el microframework Silex preparado para empezar a trabajar con el.
Lo siguiente que haremos sera crear nuestro controlador frontal, para ello creamos una carpeta llamado web dentro de la principal de nuestro proyecto, y dentro un fichero llamado index.php:
mkdir web
touch index.php
Luego abrimos el fichero con nuestro editor de código favorito y escribimos nuestro primer controlador frontal:
<php
require_once __DIR__."/../vendor/autoload.php";
$app = new Silex\Application();
$app->get("/", function () use ($app) {
return "Bienvenido a nuestro primer proyecto Silex!";
});
$app->run();
Vamos a explicar un poco el funcionamiento del código anterior:
Lo primero que vemos es que importa el fichero autoload.php, este fichero es creado por composer, basicamente carga las clases necesarias para que los paquetes funcionen, es lo que se denomina un ClassLoader.
La siguiente linea carga la clase principal de Silex: Application, esta clase hereda de Pimple, el contenedor de dependencias que utiliza Silex e implementa HttpKernelInterface. Esta clase es la base de Silex y nos permite crear nuestro controlador frontal asi como construir nuestra aplicación en base a ella.
Lo siguiente que vemos es un controlador, en este caso controlar las peticiones GET para el patron /, esto es raíz, y ejecuta el código de la función anónima, en este caso devuelve una cadena.
Finalmente llamamos al método run de nuestra aplicación, a grandes rasgos este método es el que controla el flujo petición-respuesta (request-response) en la aplicación.
Esta primera aplicación es muy sencilla, ya iremos desgranando el funcionamiento mas detalladamente según vaya creciendo nuestra aplicación en los siguientes capítulos.
Una vez todo este preparado necesitamos que un Servidor Web sirva nuestro proyecto, en nuestro caso vamos a utilizar Apache2, sin meternos mucho en este tema pues no es la finalidad de este tutorial, simplemente creamos un VirtualHost parecido a esto:
<VirtualHost *:8080>
DocumentRoot /MI_PATH/MI_PROJECTO/web/index.php
<Directory /MI_PATH/MI_PROJECTO/web/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
Allow from all
</Directory>
ErrorLog /var/log/apache2/error_mi_proyecto.log
LogLevel warn
CustomLog /var/log/apache2/access_mi_proyecto.log combined
ServerSignature On
</VirtualHost>
Una vez reiniciado el servidor web, ya tendremos funcionando nuestro primero proyecto Silex.
Ahora ya podemos ver el resultado en nuestro navegador preferido: localhost:8080.
En próximas entregas veremos como añadir dependencias a nuestro proyecto y como crear un mini cms con Silex.
Ir a segunda parte del tutorial: Mini-tutorial Silex: Añadiendo dependencias, Twig (II)