Curso de Programación Web con PHP y Symfony

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

Menú de hoy

  • Controladores y rutas
  • Twig: Motor de plantillas
  • Calabaza calabaza...

Controladores y rutas

Controladores y rutas

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.

Controladores y rutas

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

Controladores y rutas

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

Controladores y rutas

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+

Controladores y rutas

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.

Controladores y rutas

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>'
        );
    }
}

Controladores y rutas

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>'
        );
    }
}

Controladores y rutas

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

Controladores y rutas

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

Controladores y rutas

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);

    // ...
}

Twig: Motor de plantillas

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.

Twig: Motor de plantillas

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>

Twig: Motor de plantillas

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).

Twig: Motor de plantillas

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).

Twig: Motor de plantillas

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.

Twig: Motor de plantillas

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

Twig: Motor de plantillas

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>

Symfony

Veamos un ejemplo

Curso de PHP (Clase 4)

By Pedro Flores

Curso de PHP (Clase 4)

  • 44