Pedro Flores
Developer, happy husband and now a happy father!
Miryam Godoy
CODELAB
10/08/2024
https://meet.google.com/psd-mrvz-gzb
Para ver mejor las presentaciones y la pantalla de ejercicios
hay un link generado para pode acceder al google meet:
https://meet.google.com/psd-mrvz-gzb
Introducción
El componente de enrutamiento de Symfony es una parte integral de las aplicaciones Symfony, ya que asigna URL a las acciones del controlador. Te permite definir cómo se manejan las diferentes rutas en tu aplicación. El sistema de enrutamiento se configura en el archivo routes.yaml o routes.xml o mediante anotaciones PHP.
Definición de rutas:
En Symfony, puedes definir rutas utilizando distintos formatos, como YAML, XML o anotaciones.
# config/routes.yaml
app_home:
path: /
controller: App\Controller\HomeController::index
Parámetros de la ruta
Los parámetros de ruta permiten crear rutas dinámicas. Por ejemplo, una ruta para mostrar el perfil de un usuario específico:
# config/routes.yaml
app_user_profile:
path: /user/{username}
controller: App\Controller\UserController::profile
Restricciones de ruta
Puede aplicar restricciones a los parámetros de ruta. Por ejemplo, restringir un parámetro de ID para que sea numérico:
# config/routes.yaml
app_post:
path: /post/{id}
controller: App\Controller\PostController::show
requirements:
id: \d+
Controlador
Un controlador es una función PHP que creas y que lee información del Request objeto, crea y devuelve un Responseobjeto. La respuesta puede ser una página HTML, JSON, XML, una descarga de archivo, una redirección, un error 404 o cualquier otra cosa. El controlador ejecuta cualquier lógica arbitraria que tu aplicación necesite para representar el contenido de una página.
Un controlador básico
Si bien un controlador puede ser cualquier elemento invocable de PHP (función, método de un objeto o un Closure), un controlador suele ser un método dentro de una clase de controlador
// src/Controller/LuckyController.php
namespace App\Controller;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
class LuckyController
{
#[Route('/lucky/number/{max}', name: 'app_lucky_number')]
public function number(int $max): Response
{
$number = random_int(0, $max);
return new Response(
'<html><body>Lucky number: '.$number.'</body></html>'
);
}
}
Un controlador básico
Si bien un controlador puede ser cualquier elemento invocable de PHP (función, método de un objeto o un Closure), un controlador suele ser un método dentro de una clase de controlador
// src/Controller/LuckyController.php
namespace App\Controller;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
class LuckyController
{
#[Route('/lucky/number/{max}', name: 'app_lucky_number')]
public function number(int $max): Response
{
$number = random_int(0, $max);
return new Response(
'<html><body>Lucky number: '.$number.'</body></html>'
);
}
}
La clase y los servicios del controlador base
Para facilitar el desarrollo, Symfony incluye una clase de controlador base opcional llamada AbstractController . Se puede ampliar para obtener acceso a métodos auxiliares.
// src/Controller/LuckyController.php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
class LuckyController extends AbstractController
{
// ...
}
Ahora tienes acceso a métodos como $this->render() y muchos otros
Generando controladores
Para ahorrar tiempo, puedes instalar Symfony Maker y decirle a Symfony que genere una nueva clase de controlador
symfony console make:controller BrandNewController
El objeto de solicitud como argumento del controlador
¿Qué sucede si necesitas leer parámetros de consulta, obtener un encabezado de solicitud u obtener acceso a un archivo cargado? Esa información se almacena en el Request objeto de Symfony. Para acceder a ella en tu controlador, agrégala como argumento y agrégala con la clase Request :
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
// ...
public function index(Request $request): Response
{
$page = $request->query->get('page', 1);
// ...
}
Introducción
Una plantilla es la mejor manera de organizar y renderizar HTML desde dentro de tu aplicación, ya sea que necesites renderizar HTML desde un controlador o generar el contenido de un correo electrónico . Las plantillas en Symfony se crean con Twig: un motor de plantillas flexible, rápido y seguro.
Lenguaje de creación de plantillas Twig
El lenguaje de plantillas Twig permite escribir plantillas concisas y legibles que son más fáciles de usar para los diseñadores web y, en muchos sentidos, más potentes que las plantillas PHP.
<!DOCTYPE html>
<html>
<head>
<title>Welcome to Symfony!</title>
</head>
<body>
<h1>{{ page_title }}</h1>
{% if user.isLoggedIn %}
Hello {{ user.name }}!
{% endif %}
{# ... #}
</body>
</html>
La sintaxis de Twig se basa en estas tres construcciones
{{ ... }}, se utiliza para mostrar el contenido de una variable o el resultado de evaluar una expresión;
{% ... %}, utilizado para ejecutar alguna lógica, como un condicional o un bucle;
{# ... #}, se utiliza para agregar comentarios a la plantilla (a diferencia de los comentarios HTML, estos comentarios no se incluyen en la página renderizada).
La sintaxis de Twig se basa en estas tres construcciones
{{ ... }}, se utiliza para mostrar el contenido de una variable o el resultado de evaluar una expresión;
{% ... %}, utilizado para ejecutar alguna lógica, como un condicional o un bucle;
{# ... #}, se utiliza para agregar comentarios a la plantilla (a diferencia de los comentarios HTML, estos comentarios no se incluyen en la página renderizada).
Nomenclatura de plantillas
Utilice mayúsculas y minúsculas para los nombres de archivos y directorios (por ejemplo blog_posts.html.twig, admin/default_theme/blog/index.html.twig, , etc.);
Defina dos extensiones para los nombres de archivo (por ejemplo, index.html.twig o blog_posts.xml.twig) siendo la primera extensión ( html, xml, etc.) el formato final que generará la plantilla.
Vinculación a CSS, JavaScript y recursos de imagen
Si una plantilla necesita vincularse a un recurso estático (por ejemplo, una imagen), Symfony proporciona una asset() función Twig para ayudar a generar esa URL. Primero, instala el asset paquete:
composer require symfony/asset
Vinculación a CSS, JavaScript y recursos de imagen
{# the image lives at "public/images/logo.png" #}
<img src="{{ asset('images/logo.png') }}" alt="Symfony!"/>
{# the CSS file lives at "public/css/blog.css" #}
<link href="{{ asset('css/blog.css') }}" rel="stylesheet"/>
{# the JS file lives at "public/bundles/acme/js/loader.js" #}
<script src="{{ asset('bundles/acme/js/loader.js') }}"></script>
Veamos un ejemplo
By Pedro Flores