Instalar Symfony va será el primer paso que vamos a recorrer en este curso o tutoriales según si lo hagas lineal o solo uses esta web como un manual de referencia rápido.
Introducción
Si estas aquí es por que o ya conoces symfony o estas empezando tu camino en este framework.
Symfony es uno de los framework más extendidos en lenguaje PHP. Acutalmetne se disputa el primer puesto con Laravel con el que se empezara en esta misma web un curso en breve.
Por que debo elegir symfony
Realmente yo llevo ya mucho tiempo tanto con symfony como con Laravel y ambos son estupendos framework. Como en todos lados habrá cosas que te gusten más en uno que en otro. Pero realmente a la hora de decantarse por uno solo son predilecciones personales.
Requisitos técnicos
Antes de empezar a instalar Symfony, hay que cumplir unos requisitos técnicos
- Tener instalado 7.2.5 o superior
- Tener instalado las extensiones de PHP necesarias(Ctype, iconv, JSON, PCRE, Session, SimpleXML, y Tokenizer)
- Instalar Composer en nuestra maquina.
El propio Symfony tiene un cliente para poder crear los proyectos, pero realmente no es necesario y en este manual no lo vamos a utilizar.
Creando nuestro proyecto
A la hora de crear nuestro proyecto podemos elegir entre un microsite o una aplicación web, pero en este curso vamos a utilizar directamente el de aplicación web. La diferencia entre estos 2 tipos simplemente es el numero de paquetes instalados.
Ejecutaremos el siguiente comando, estando en el lugar donde queramos instalar symfony.
composer create-project symfony/website-skeleton miprimerproyecto
Esto nos creara una carpeta llamada «miprimerproyecto»
cd miprimerproyecto php -S 127.0.0.1:8000 -t public/
Ahora solo deberemos abrir la url http://localhost:8000/ para poder ver el resultado de lo que hemos hecho

Estructura del proyecto

Después de instalar Symfony, vamos a dar un repaso a las distintas carpetas y ficheros que forman nuestro proyecto, en este Framework recién creado.
Con el tiempo y conforme vayamos avanzando el curso, aparecerán nuevo documentos y carpetas con los que iremos aumentando las funcionalidades del proyecto.
Directorios
bin
Esta carpeta contiene los ejecutables, entre ellos phpunit y el comando que usaremos has la saciedad console. Si desde la raíz del proyectos escribes el siguiente comanda veras la variedad de opciones que nos ofrece
php bin/console
config
En esta carpeta encontraremos todos los ficheros de configuración. No tengas prisa en intentar conocerlos todos, realmente la configuración es muy fácil e iremos viéndolo conforme avancemos en el curso.
migrations
En esta carpeta se encuentran las migraciones. Son unos ficheros que nos ayudaran a realizar los cambios necesarios en las bases de datos, conforme vayamos evolucionando nuestro proyecto y cambiando de versión.
public
Esta será la parte visible de nuestro proyecto y donde podrás encontrar css, js o imágenes.
src
En esta carpeta estarán los ficheros que darán la funcionalidad a nuestro proyecto
templates
Sera utilizada para las plantillas twig de nuestro proyecto
test
Aquí tenemos los test que realizaremos sobre nuestro Proyecto.
translations
Esté es el lugar donde están los ficheros de traducción, que nos permiten la traducción de nuestra aplicación.
var
En este lugar estarán cache y logs que nos permitirán agilizar y analizar nuestra aplicación.
vendor
En esta carpeta se encuentran los bundles de nuestra aplicación.
Ficheros
.env
En este ficheros tenemos la configuración básica de nuestra aplicación.(Entorno, secreto, conexión a base de datos)
.gitignore
Ficheros y carpetas que deberán ser ignoradas por defecto a la hora de subir el proyecto a git.
composer.json
Este fichero esta generado por composer, y contiene las librerías que forman el proyecto.
Como subir nuestro proyecto a Git
Tras instalar Symfony vamos a subir nuestro proyecto a este sistema de versiones. Si no lo conoces Git es un sistema de versiones. Y en la actualidad de los más usados
1.Inicializamos git
La inicialización de Git en nuestro proyecto es tan fácil como ejecutar el siguiente comando.
> git init
Esto generara una serie de ficheros que precisa Git para manejar el sistema de versiones.
Con el siguiente fichero añadiremos los ficheros al control de versiones.
git add .
Creamos nuestra primera subida.
git commit -m "Subida inicial"
Para el siguiente paso deberemos tener tener acceso a un servidor de Git.
Si no a tienes uno puedes conseguir una cuenta en GitHub o Bitbucket
git remote add origin https://github.com/ktinformatica/miprimerproyecto.git
Por ultimo solo nos faltara subir todo a nuestro servidor
git push -u origin master
Después de realizar esto te pedirán usuario y contraseña para poder realizar la subida.
Configuración de base de datos
La configuración de la base de datos se encuentra en el ficheor .env.
Dependiendo del sistema de base de datos que utilicemos, deberemos ajustar la configuración con los datos pertinentes.
Aquí tenéis deferente ejemplos.
DATABASE_URL="sqlite:///%kernel.project_dir%/var/data.db" DATABASE_URL="mysql://ktinformatica:password@127.0.0.1:3306/miprimerproyecto?serverVersion=5.7" DATABASE_URL="postgresql://ktinformatica:passwordd@127.0.0.1:5432/miprimerproyecto?serverVersion=13&charset=utf8"
donde «ktinformatica» será el usuario de base de datos. «password» nuestra contraseña y «miprimerproyecto» el nombre de la base de datos.
Si la base de datos no ha sido creada aun la podremos crear con el siguiente comando.
php bin/console doctrine:database:create
Creamos la primera pagina.
A la hora de generar la mayoría de archivos que hay en Symfony vamos a poder generarlos desde la consola.
En primer lugar para generar nuestra página vamos a empezar creando un controller.
php bin/console make:controller Choose a name for your controller class (e.g. FiercePizzaController): > HomeController created: src/Controller/HomeController.php created: templates/home/index.html.twig Success! Next: Open your new controller class and add some pages!
Después de ejecutar este comando obtendremos 2 ficheros un fichero controller y un template de twig
<?php namespace App\Controller; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Annotation\Route; class HomeController extends AbstractController { /** * @Route("/home", name="home") */ public function index(): Response { return $this->render('home/index.html.twig', [ 'controller_name' => 'HomeController', ]); } }
{% extends 'base.html.twig' %} {% block title %}Hello HomeController!{% endblock %} {% block body %} <style> .example-wrapper { margin: 1em auto; max-width: 800px; width: 95%; font: 18px/1.5 sans-serif; } .example-wrapper code { background: #F5F5F5; padding: 2px 6px; } </style> <div class="example-wrapper"> <h1>Hello {{ controller_name }}! ✅</h1> This friendly message is coming from: <ul> <li>Your controller at <code><a href="{{ 'C:/wamp64/www/miprimerproyecto/src/Controller/HomeController.php'|file_link(0) }}">src/Controller/HomeController.php</a></code></li> <li>Your template at <code><a href="{{ 'C:/wamp64/www/miprimerproyecto/templates/home/index.html.twig'|file_link(0) }}">templates/home/index.html.twig</a></code></li> </ul> </div> {% endblock %}
Pero vamos a analizar estos 2 ficheros y explicar que hace.
/** * @Route("/home", name="home") */
Esta anotación es la que indica la dirección de la pagina que acabamos de crear. En los controller de symfony esta anotación se puede colocar tanto a la clase como a la función. En el ejemplo anterior la ruta seria «midominio/home«.
Cuando estamos realizando una gestión de una entidad(CRUD) utilizaremos un comentario en en el controller pero este ejemplo lo veremos más adelante.
<?php namespace App\Controller; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Annotation\Route; class HomeController extends AbstractController { /** * @Route("/home", name="home") */ public function index(): Response { return $this->render('home/index.html.twig', [ 'controller_name' => 'HomeController', ]); } }
En la función render del controller le estamos indicando que fichero twig queremos que renderice y le pasamos un array de valores.
Sistema de seguridad
Cuando hablamos de añadir la seguridad en primer lugar nos referimos a realizar un sistema de gestión de usuarios y en segundo lugar un sistema de autentificación que nos permita entrar a nuestro sistema.
Empecemos por instalar el paquete necesario para realizar las acciones que deseamos.
composer require symfony/security-bundle