Introducción
Recientemente estuve trabajando en un proyecto con el framework Symfony. Veamos cómo instalarlo y hacer el hola mundo para comenzar a trabajar con el mismo.
Lecturas recomendadas
Únicamente te invito a ver cómo instalar XAMPP en caso de que no tengas un servidor instalado en tu PC.
Comenzar proyecto con Symfony
Debes tener instalado composer. Si no lo tienes, instálalo y agrégalo a la variable PATH. Una vez que lo tengas, navega en la terminal hasta un lugar arriba de donde quieres crear tu proyecto.
Por ejemplo, si tus proyectos los guardas en C:\xampp\htdocs, entonces navega ahí, ya que con el comando que veremos se creará una carpeta. En otras palabras, no es necesario crear la carpeta en donde guardarás tu proyecto.
Una vez ahí, ejecuta:
composer create-project symfony/website-skeleton probarsymfony
En ese caso le indicamos a composer crear un proyecto (create-project
) basado en el paquete symfony/website-skeleton
y lo más importante es que al final indicamos en cuál directorio instalará nuestro proyecto; lo cual en mi caso es probarsymfony.
Comenzará a instalar las dependencias…
Se llevará un poco, hay que esperar. Al final nos dice cómo configurar nuestras bases de datos y hacer tests:
Lo más importante es que indica cómo ejecutar el proyecto. Veamos qué opciones tenemos.
¿Servir con servidor web o con PHP?
Aquí tenemos dos opciones. Servir nuestro proyecto como se suele hacer normalmente, a través de Apache y todo eso usando XAMPP o un paquete similar. O hacer que PHP sirva el proyecto.
Nota: si elegimos al servidor web, tendremos que agregar index.php al final de la URL para que las rutas sean entendidas. En cambio, si usamos el servidor de PHP no tendremos que hacer nada. Más abajo entenderás esto.
Con servidor web
Si ya tenemos un servidor configurado, por ejemplo XAMPP, entonces creamos nuestro proyecto ahí y navegamos al locahost/nombredetuproyecto/public. En mi caso navego a:
http://localhost/probarsymfony/public/
Y ya está todo servido. Ahora en el navegador puedo ver mi página:
Con servidor de PHP
Si no tenemos un servidor web o queremos que PHP se encargue, entonces navegamos a donde se creó el proyecto y ejecutamos:
php -S 127.0.0.1:8080 -t public
Ahí iniciamos un servidor en la dirección 127.0.0.1 en el puerto 8080, sirviendo el directorio public. Ahora simplemente navegamos a:
http://127.0.0.1:8080/
Y estará todo servido. En el navegador se ve así:
Lo que recomiendo
Es gusto de cada quien, pero mejor usar el servidor web, no el de PHP.
Hola mundo
Independientemente de cómo hayamos servido nuestra app, es hora de hacer nuestro hola mundo. Para ello navegamos a src/Controller y creamos el archivo HolaController.php. Ponemos este contenido dentro de él:
<?php
namespace App\Controller;
use Symfony\Component\HttpFoundation\Response;
# El nombre de la clase debe coincidir con el nombre del archivo .php
class HolaController
{
public function hola()
{
return new Response(
'<html><body>Hola mundo desde <strong>Symfony</strong><br>parzibyte.me</body></html>'
);
}
}
?>
Lo único que estamos haciendo es definir nuestro controlador. Dentro de él escribimos una función llamada hola que lo único que hace es regresar una respuesta HTML.
¿Y desde dónde se llaman estas funciones? desde la URL, es decir, cuando el usuario navega a una URL las rutas son traducidas para saber a cuáles funciones llamar.
Eso lo configuramos en config/routes.yaml. Al final del archivo agregamos:
hola_mundo:
path: /hola
controller: App\Controller\HolaController::hola
Primero ponemos el nombre de la ruta, por ahora no es importante pero hay que darle un nombre. Y le decimos que su ruta será /hola, para que al ser ejecutada llame a la función hola dentro del controlador HolaController.
Aquí viene la parte que explicaba arriba sobre poner index.php al final de la ruta. Si lo servimos con un servidor web, la ruta es:
http://localhost/probarsymfony/public/index.php/hola
Es decir, tenemos que agregar un index.php entre public y la ruta que definimos en el fichero YAML. Así se ve cuando navegamos a ella:
En cambio, si estamos sirviendo con PHP navegamos a:
http://127.0.0.1:8080/hola
La cual es una ruta más corta y luce así:
Y ya hemos hecho nuestro hola mundo en Symfony.
Alternativa a rutas
Symfony sugiere que, en lugar de configurar todo en el archivo YAML, usemos Anotaciones para definir las rutas en symfony.
¿Qué sigue?
Podemos crear más controladores, y configurar más rutas dentro del fichero de configuración routes.yaml. Más tarde conectaremos estos controladores con Modelos para seguir el patrón MVC e interactuar con bases de datos.
Buenos días. Lo he instalado desde el ejecutable que aparece en la página oficial y también con composer.
Si instalo la versión para microservicio, console application o API, sale todo bien, sin errores, pero, si lo instalo para aplicación Web tradicional (el que usted utilizó para el ejemplo), arroja lo siguiente:
No route found for “GET /”
He intentado solucionarlo agregando un controlador para la ruta, pero persiste el problema.
De antemano, gracias, Mildred
Hola, está usando anotaciones o el archivo yaml? podría compartir un poco de código? si usa anotaciones revise que el comentario está bien definido (ya que debe ser el comentario con astericos en cada línea) y en caso de que use YAML verifique las tabulaciones
Saludos
Pingback: Anotaciones para rutas en Symfony - Parzibyte's blog