Ir al contenido

Qué es Symfony y por qué deberías conocerlo

Symfony es un framework de código abierto para PHP. Técnicamente se trata de un conjunto de librerías que puedes utilizar en tus aplicaciones.

Usar un framework permite:

  • Acelerar significativamente los tiempos de desarrollo
  • Mejorar la calidad de los productos

Esto se logra al utilizar código ya desarrollado para resolver tareas comunes (y usualmente complejas). Por otra parte, al ser código abierto, está sujeto al escrutinio constante de miles de desarrolladores los cual, además de detectar tempranamente los problemas, aportan soluciones mediante pull requests (¡Incluso puedes hacer tus propios aportes!).

En definitiva, utilizar un framework hace nuestro trabajo mucho más eficiente y placentero. La pregunta al final debería ser más bien ¿por qué NO usar un framework?

Siendo PHP un lenguaje tan popular, no es raro encontrar en Internet un sinfín de frameworks, algunos más maduros que otros, algunos orientados a resolver tareas específicas, etc. Entre los más comúnmente utilizados están:

  1. Symfony
  2. Laravel
  3. Yii
  4. CodeIgniter

Este punto es el más complejo seguramente. Es muy común que los desarrolladores se aferren a su herramienta de preferencia como lo hacen a su equipo de fútbol favorito. Voy a dar simplemente las razones que, a mi entender, hacen de Symfony la elección acertada:

  1. La arquitectura desacoplada (El framework está diseñado de tal forma que es perfectamente posible tomar solo lo necesario para cada aplicación)
  2. La comunidad de desarrolladores (Symfony es un framework en evolución constante, siempre a la vanguardia de lo que sucede en el mundo PHP)
  3. La documentación existente (Aprender Symfony, si bien es una tarea que nunca termina, es realmente un placer, hay muchísimo material para consultar con grandes ejemplos de lo más variado)
  4. El rendimiento que logran las aplicaciones (Symfony se apoya en varios mecanismos de caché para lograr una performance excelente)
  5. El conjunto de herramientas incorporadas para generar código automáticamente

Arrancar una aplicación con Symfony es bastante simple: sólo se necesita tener composer instalado:

Ventana de terminal
composer create-project symfony/website-skeleton my-website

Con esto sólo ya tendrás una aplicación Symfony lista para probar!

Una característica importante de Symfony es su interface de línea de comandos. A través de esta utilidad es posible realizar toda clase de tareas como veremos a continuación.

Para ver nuestra aplicación funcionando podemos usar el siguiente comando:

Ventana de terminal
php bin/console server:run

Lo que hace este comando es levantar un servidor web especial para Symfony (Básicamente se trata de un envoltorio alrededor del servidor incorporado a PHP). Si diriges tu navegador a http://127.0.0.1:8000 podrás ver tu aplicación funcionando.

Las aplicaciones web basadas en Symfony utilizan el patrón MVC, con lo cual, es de esperar contar con elementos para administrar:

  • El modelo
  • Las vistas
  • Los controladores

El directorio donde pasarás la gran mayoría de tu tiempo es src. Particularmente, ahí encontrarás el directorio Controller y Entity. En estos directorios crearás tus controladores y entidades (respectivamente). Las vistas se almacenarán en el directorio templates.

Veamos un ejemplo muy simple de una aplicación que saludará al visitante por su nombre (parámetro de la URL). Lo que haremos será crear un nuevo controlador usando este comando:

Ventana de terminal
php bin/console make:controller

Y respondiendo las preguntas hasta obtener este código (En el archivo src/Controller/MyController.php):

<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Annotation\Route;
class MyController extends AbstractController
{
/**
* @Route("/my", name="my")
*/
public function index()
{
return $this->render('my/index.html.twig', [
'controller_name' => 'MyController',
]);
}
}

Aquí lo que vemos es nuestro primer controlador. Este archivo está acompañado de un template (templates/my/index.html.twig) que hace a la vista:

{% extends 'base.html.twig' %}
{% block title %}Hello MyController!{% 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=" '/home/mauro/my-website/src/Controller/MyController.php'|file_link(0) ">src/Controller/MyController.php</a></code></li>
<li>Your template at <code><a href=" '/home/mauro/my-website/templates/my/index.html.twig'|file_link(0) ">templates/my/index.html.twig</a></code></li>
</ul>
</div>
{% endblock %}

Para completar el ejemplo que estábamos buscando sólo se necesita hacer algunos pequeños cambios. El controlador debe quedar de este modo:

<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Annotation\Route;
class MyController extends AbstractController
{
/**
* @Route("/my/{name}", name="my")
*/
public function index($name)
{
return $this->render('my/index.html.twig', [
'controller_name' => 'MyController',
'name' => $name,
]);
}
}

Y el template:

{% extends 'base.html.twig' %}
{% block title %}Hello MyController!{% 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=" '/home/mauro/my-website/src/Controller/MyController.php'|file_link(0) ">src/Controller/MyController.php</a></code></li>
<li>Your template at <code><a href=" '/home/mauro/my-website/templates/my/index.html.twig'|file_link(0) ">templates/my/index.html.twig</a></code></li>
<li>Hello name !</li>
</ul>
</div>
{% endblock %}

Y ahora está todo listo. Para probarlo dirígete a http://127.0.0.1:8000/my/TU_NOMBRE y verás como la aplicación te saluda.

Hay muchísimas cosas por aprender aún pero me temo que no cabe todo en un solo post. Sólo voy a nombrar dos componentes que, si bien no son parte de Symfony como tal, definitivamente conforman dos patas importantísimas del desarrollo basado en este framework:

  • Sistema de templating Twig
  • ORM Doctrine para la interacción con bases de datos

Espero que este artículo haya despertado tu curiosidad y que pronto decidas profundizar en este excelente framework. Te prometo que valdrá la pena el esfuerzo!

Descarga el código de Qué es Symfony y por qué deberías conocerlo

Aprende qué es Symfony y por qué usarlo. Descubre cómo este framework PHP acelera el desarrollo, mejora la calidad y ofrece herramientas potentes.

Descargar código