CursosEmpresasBlogLiveConfPrecios

Creación de Controladores y Rutas en Symfony

Clase 8 de 17 • Curso de Symfony Framework

Contenido del curso

Symfony Framework

  • 1
    Crea una bolsa de empleo con Symfony

    Crea una bolsa de empleo con Symfony

    01:00 min
  • 2
    Autenticación y Gestión de Ofertas en Symfony

    Autenticación y Gestión de Ofertas en Symfony

    10:12 min
  • 3
    Desarrollo de Bolsa de Empleo con Symfony en PHP

    Desarrollo de Bolsa de Empleo con Symfony en PHP

    02:42 min
  • 4
    Modelo de Datos para Bolsa de Empleo: Entidades y Relaciones

    Modelo de Datos para Bolsa de Empleo: Entidades y Relaciones

    02:17 min
  • 5
    Virtualización y configuración de entornos de desarrollo con Homestead

    Virtualización y configuración de entornos de desarrollo con Homestead

    04:07 min
  • 6
    Creación y Configuración de un Proyecto Symfony con Homestead

    Creación y Configuración de un Proyecto Symfony con Homestead

    02:44 min
  • 7
    Creación de Entidades y Migraciones en Symfony

    Creación de Entidades y Migraciones en Symfony

    04:04 min
  • 8
    Creación de Controladores y Rutas en Symfony

    Creación de Controladores y Rutas en Symfony

    Viendo ahora
  • 9
    Listado y Creación de Empresas en Symfony

    Listado y Creación de Empresas en Symfony

    03:44 min
  • 10
    Control de Acceso y Creación de Usuarios en Symfony

    Control de Acceso y Creación de Usuarios en Symfony

    06:12 min
  • 11
    Creación de usuarios en Symfony para administradores

    Creación de usuarios en Symfony para administradores

    02:41 min
  • 12
    Listado y Postulación a Ofertas de Trabajo en Symfony

    Listado y Postulación a Ofertas de Trabajo en Symfony

    07:08 min
  • 13
    Layouts y herencia de templates en Twig

    Layouts y herencia de templates en Twig

    03:06 min
  • 14
    Envío de Correos en Symfony con Mailer y Transport

    Envío de Correos en Symfony con Mailer y Transport

    02:01 min
  • 15
    Despliegue de Aplicaciones Symfony en Producción

    Despliegue de Aplicaciones Symfony en Producción

    05:16 min
  • 16
    Comparativa de Frameworks PHP: Symfony, Laravel y Más

    Comparativa de Frameworks PHP: Symfony, Laravel y Más

    02:08 min
  • 17
    Symfony proyecto terminado: certifica y planifica

    Symfony proyecto terminado: certifica y planifica

    00:38 min
Tomar examen

Escuelas

  • Desarrollo Web
    • Fundamentos del Desarrollo Web Profesional
    • Diseño y Desarrollo Frontend
    • Desarrollo Frontend con JavaScript
    • Desarrollo Frontend con Vue.js
    • Desarrollo Frontend con Angular
    • Desarrollo Frontend con React.js
    • Desarrollo Backend con Node.js
    • Desarrollo Backend con Python
    • Desarrollo Backend con Java
    • Desarrollo Backend con PHP
    • Desarrollo Backend con Ruby
    • Bases de Datos para Web
    • Seguridad Web & API
    • Testing Automatizado y QA para Web
    • Arquitecturas Web Modernas y Escalabilidad
    • DevOps y Cloud para Desarrolladores Web
  • English Academy
    • Inglés Básico A1
    • Inglés Básico A2
    • Inglés Intermedio B1
    • Inglés Intermedio Alto B2
    • Inglés Avanzado C1
    • Inglés para Propósitos Específicos
    • Inglés de Negocios
  • Marketing Digital
    • Fundamentos de Marketing Digital
    • Marketing de Contenidos y Redacción Persuasiva
    • SEO y Posicionamiento Web
    • Social Media Marketing y Community Management
    • Publicidad Digital y Paid Media
    • Analítica Digital y Optimización (CRO)
    • Estrategia de Marketing y Growth
    • Marketing de Marca y Comunicación Estratégica
    • Marketing para E-commerce
    • Marketing B2B
    • Inteligencia Artificial Aplicada al Marketing
    • Automatización del Marketing
    • Marca Personal y Marketing Freelance
    • Ventas y Experiencia del Cliente
    • Creación de Contenido para Redes Sociales
  • Inteligencia Artificial y Data Science
    • Fundamentos de Data Science y AI
    • Análisis y Visualización de Datos
    • Machine Learning y Deep Learning
    • Data Engineer
    • Inteligencia Artificial para la Productividad
    • Desarrollo de Aplicaciones con IA
    • AI Software Engineer
  • Ciberseguridad
    • Fundamentos de Ciberseguridad
    • Hacking Ético y Pentesting (Red Team)
    • Análisis de Malware e Ingeniería Forense
    • Seguridad Defensiva y Cumplimiento (Blue Team)
    • Ciberseguridad Estratégica
  • Liderazgo y Habilidades Blandas
    • Fundamentos de Habilidades Profesionales
    • Liderazgo y Gestión de Equipos
    • Comunicación Avanzada y Oratoria
    • Negociación y Resolución de Conflictos
    • Inteligencia Emocional y Autogestión
    • Productividad y Herramientas Digitales
    • Gestión de Proyectos y Metodologías Ágiles
    • Desarrollo de Carrera y Marca Personal
    • Diversidad, Inclusión y Entorno Laboral Saludable
    • Filosofía y Estrategia para Líderes
  • Diseño de Producto y UX
    • Fundamentos de Diseño UX/UI
    • Investigación de Usuarios (UX Research)
    • Arquitectura de Información y Usabilidad
    • Diseño de Interfaces y Prototipado (UI Design)
    • Sistemas de Diseño y DesignOps
    • Redacción UX (UX Writing)
    • Creatividad e Innovación en Diseño
    • Diseño Accesible e Inclusivo
    • Diseño Asistido por Inteligencia Artificial
    • Gestión de Producto y Liderazgo en Diseño
    • Diseño de Interacciones Emergentes (VUI/VR)
    • Desarrollo Web para Diseñadores
    • Diseño y Prototipado No-Code
  • Contenido Audiovisual
    • Fundamentos de Producción Audiovisual
    • Producción de Video para Plataformas Digitales
    • Producción de Audio y Podcast
    • Fotografía y Diseño Gráfico para Contenido Digital
    • Motion Graphics y Animación
    • Contenido Interactivo y Realidad Aumentada
    • Estrategia, Marketing y Monetización de Contenidos
  • Desarrollo Móvil
    • Fundamentos de Desarrollo Móvil
    • Desarrollo Nativo Android con Kotlin
    • Desarrollo Nativo iOS con Swift
    • Desarrollo Multiplataforma con React Native
    • Desarrollo Multiplataforma con Flutter
    • Arquitectura y Patrones de Diseño Móvil
    • Integración de APIs y Persistencia Móvil
    • Testing y Despliegue en Móvil
    • Diseño UX/UI para Móviles
  • Diseño Gráfico y Arte Digital
    • Fundamentos del Diseño Gráfico y Digital
    • Diseño de Identidad Visual y Branding
    • Ilustración Digital y Arte Conceptual
    • Diseño Editorial y de Empaques
    • Motion Graphics y Animación 3D
    • Diseño Gráfico Asistido por Inteligencia Artificial
    • Creatividad e Innovación en Diseño
  • Programación
    • Fundamentos de Programación e Ingeniería de Software
    • Herramientas de IA para el trabajo
    • Matemáticas para Programación
    • Programación con Python
    • Programación con JavaScript
    • Programación con TypeScript
    • Programación Orientada a Objetos con Java
    • Desarrollo con C# y .NET
    • Programación con PHP
    • Programación con Go y Rust
    • Programación Móvil con Swift y Kotlin
    • Programación con C y C++
    • Administración Básica de Servidores Linux
  • Negocios
    • Fundamentos de Negocios y Emprendimiento
    • Estrategia y Crecimiento Empresarial
    • Finanzas Personales y Corporativas
    • Inversión en Mercados Financieros
    • Ventas, CRM y Experiencia del Cliente
    • Operaciones, Logística y E-commerce
    • Gestión de Proyectos y Metodologías Ágiles
    • Aspectos Legales y Cumplimiento
    • Habilidades Directivas y Crecimiento Profesional
    • Diversidad e Inclusión en el Entorno Laboral
    • Herramientas Digitales y Automatización para Negocios
  • Blockchain y Web3
    • Fundamentos de Blockchain y Web3
    • Desarrollo de Smart Contracts y dApps
    • Finanzas Descentralizadas (DeFi)
    • NFTs y Economía de Creadores
    • Seguridad Blockchain
    • Ecosistemas Blockchain Alternativos (No-EVM)
    • Producto, Marketing y Legal en Web3
  • Recursos Humanos
    • Fundamentos y Cultura Organizacional en RRHH
    • Atracción y Selección de Talento
    • Cultura y Employee Experience
    • Gestión y Desarrollo de Talento
    • Desarrollo y Evaluación de Liderazgo
    • Diversidad, Equidad e Inclusión
    • AI y Automatización en Recursos Humanos
    • Tecnología y Automatización en RRHH
  • Finanzas e Inversiones
    • Fundamentos de Finanzas Personales y Corporativas
    • Análisis y Valoración Financiera
    • Inversión y Mercados de Capitales
    • Finanzas Descentralizadas (DeFi) y Criptoactivos
    • Finanzas y Estrategia para Startups
    • Inteligencia Artificial Aplicada a Finanzas
    • Domina Excel
    • Financial Analyst
    • Conseguir trabajo en Finanzas e Inversiones
  • Startups
    • Fundamentos y Validación de Ideas
    • Estrategia de Negocio y Product-Market Fit
    • Desarrollo de Producto y Operaciones Lean
    • Finanzas, Legal y Fundraising
    • Marketing, Ventas y Growth para Startups
    • Cultura, Talento y Liderazgo
    • Finanzas y Operaciones en Ecommerce
    • Startups Web3 y Blockchain
    • Startups con Impacto Social
    • Expansión y Ecosistema Startup
  • Cloud Computing y DevOps
    • Fundamentos de Cloud y DevOps
    • Administración de Servidores Linux
    • Contenerización y Orquestación
    • Infraestructura como Código (IaC) y CI/CD
    • Amazon Web Services
    • Microsoft Azure
    • Serverless y Observabilidad
    • Certificaciones Cloud (Preparación)
    • Plataforma Cloud GCP

Platzi y comunidad

  • Platzi Business
  • Live Classes
  • Lanzamientos
  • Executive Program
  • Trabaja con nosotros
  • Podcast

Recursos

  • Manual de Marca

Soporte

  • Preguntas Frecuentes
  • Contáctanos

Legal

  • Términos y Condiciones
  • Privacidad
  • Tyc promociones
Reconocimientos
Reconocimientos
Logo reconocimientoTop 40 Mejores EdTech del mundo · 2024
Logo reconocimientoPrimera Startup Latina admitida en YC · 2014
Logo reconocimientoPrimera Startup EdTech · 2018
Logo reconocimientoCEO Ganador Medalla por la Educación T4 & HP · 2024
Logo reconocimientoCEO Mejor Emprendedor del año · 2024
De LATAM conpara el mundo
YoutubeInstagramLinkedInTikTokFacebookX (Twitter)Threads

      ¿Qué puede hacer el administrador?

      El administrador debe ser capaz de velar por el correcto funcionamiento del sistema, con lo cual, deberá tener acceso a ver todo lo que ocurre.

      En particular, deberá tener acceso a ver todas las ofertas registradas, todos los postulantes, etc.

      Para que el sistema pueda comenzar a funcionar será necesario que existan algunas empresas registradas y, siendo el administrador el único habilitado a crearlas, vamos a comenzar por darle esa funcionalidad.

      El controlador de empresas

      Symfony está basado en el patrón MVC (Model View Controller).

      En este esquema existen clases que definen el modelo de datos (Las que vimos antes, que maneja Doctrine), otras que se encargan de recibir y responder a las peticiones de los usuarios (Los controladores) y otras que permiten generar las pantallas (Vistas).

      El primer paso para crear un controlador es usar el comando php bin/console make:controller

      La primera pregunta que debemos responder es qué nombre llevará este controller.

      En general es una buena práctica definir los controladores en función de los objetos o entidades que manejarán.

      En nuestro caso, ya que estaremos trabajando sobre empresas, le llamaremos CompanyController.

      Al finalizar contaremos con dos archivos:

      • src/Controller/CompanyController.php
      • templates/Company/index.html.twig

      Como te imaginarás, el que contendrá el código php será el primero, el segundo dejémoslo para dentro de un ratito.

      Veamos el contenido de CompanyController:

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

      Comencemos viendo que tenemos un método llamado index que lo único que hace es llamar a $this->render pasando dos parámetros: una cadena que contiene una ruta al otro archivo creado y un arreglo.

      El método render es heredado (Nota que la clase CompanyController extiende a AbstractController).

      Su función es tomar una plantilla y convertirla en una respuesta que pueda ser enviada al cliente (por general HTML, aunque podría ser de otro tipo).

      ¿Te da curiosidad ver qué generó esto? Ok, date el gusto :)

      Si abres tu navegador en http://homestead.test/Company te encontrarás con una pantalla similar a:

      Ejemplo de como se ve la app en el navegador

      ¿Cómo es eso posible? Es parte de la magia de Symfony :)

      Lo que está sucediendo es que se está creando una ruta (/company) y mapeándose al método CompanyController::index()

      ¿Cómo?

      Simplemente gracias al annotation:

      /** * @Route("/company", name="company") */

      Symfony cuenta con un poderoso sistema de ruteo que permite que cada petición sea “atrapada” por un script que actúa como único punto de entrada a la aplicación y, de acuerdo a su URL sea derivada hacia el controlador que corresponde para generar una respuesta.

      Eso responde a la pregunta de cómo se interpreta la URL que usaste… ahora queda la otra pregunta: ¿por qué ves ese HTML?

      Ese HTML es el resultado de renderizar el template templates/company/index.html.twig.

      El hecho de que el nombre del archivo finalice en .twig tampoco es casual.

      Twig es un motor de templates muy potente (el usado por defecto en Symfony).

      La idea de Twig es dar una sintaxis simple (lo más parecida a HTML que se pueda) para que personas sin amplios conocimientos de programación (léase diseñadores) puedan encargarse de los temas de FrontEnd.

      Démosle una mirada al template:

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

      A simple vista nos encontramos con algo de HTML y algunos tags de otro tipo… por si no los notaste, se trata de tags {{ }} y {% %}

      Te los muestro de nuevo resaltados en color:

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

      Los bloques {{ }} son el equivalente a llamadas a la función echo de php, se utilizan para mostrar, por ejemplo, el contenido de variables.

      Los bloques {% %} son bloques de control. A través de ellos es posible realizar comparaciones, bucles y demás herramientas de lógica.

      Y ahora, para completar quiero que notes un detalle: en la llamada a $this->render que se realiza en CompanyController::index() se envía como segundo parámetro este arreglo:

      [ 'controller_name' => 'CompanyController', ]

      Y dentro del template encontramos una línea que dice:

      <h1>Hello {{ controller_name }}! ✅</h1>

      Y en la vista obtenida vemos:

      Titulo de la app "Hello CompanyController"

      ¿Coincidencia? ¡Claro que no!

      El arreglo que se pasa como segundo parámetro a la llamada a render es, precisamente, un conjunto de asignaciones de variables que el template podrá utilizar como requiera.

      ¡Genial!

      Ya sabes:

      1. Cómo crear un nuevo controlador.
      2. Cómo vincular un método a una ruta.
      3. Cómo pasar variables a un template.

      Con todo esto, no falta mucho para crear la primera funcionalidad: el listado de empresas.

      Acompáñame a la próxima clase donde lo veremos en detalle.

      Comentarios

        Alessandro Staiano

        Alessandro Staiano

        student•
        hace 6 años

        Lamentablemente voy a tener que hacerme un curso en youtube o udemy para poder hacer el examen, ya que con este curso es imposible, espero que rectifiquen. :(

          Edward Acu

          Edward Acu

          student•
          hace 6 años

          Yo también estoy decepcionado de este curso, por lo general son buenos... pero bueno, no puedo seguir lamentándome.

          Te comparto estos cursos que encontré: https://symfonycasts.com/ Hay algunos gratuitos pero los buenos son los pagados, aunque están en inglés, pero la cosa es que están bastante completos, por si te interesa.

          Juan David Rueda Quiroga

          Juan David Rueda Quiroga

          student•
          hace 6 años

          Siento lo mismo de este curso, he tenído que documentarme desde fuentes externas más de lo habitual

        Japheth Calzada López

        Japheth Calzada López

        student•
        hace 6 años

        Si lo estan haciendo con laragon o xampp

        code/public/index.php/company

          Rodrigo Ortega

          Rodrigo Ortega

          student•
          hace 5 años

          perfecto, lo tenia con un acceso directo mediante apache2 y siempre me arrojaba 404 ;)

          Gustavo Marín

          Gustavo Marín

          student•
          hace 5 años

          Gracias!!

        Carlos Eduardo Gomez García

        Carlos Eduardo Gomez García

        teacher•
        hace 5 años

        Vale, comprendo prácticamente un controlador similar al de Laravel, la diferencia es que Laravel tiene archivos de rutas especificos, Symfony define las rutas a través de un comentario:

        /** * @Route("/company", name="company") */

        Tu puedes cambiar ese /company por /queso y en tu navegador podrás acceder desde /queso sin problemas, y el render es similar a Laravel, en el segundo parámetro mandas tus variables.

        Cristian Rafael Cala Sierra

        Cristian Rafael Cala Sierra

        student•
        hace 4 años

        Está muy bueno y entendible, pero este curso veo que no es apto para los que se inician en este campo, yo pude levantar el entorno con docker, mysql, nginx y php pero estoy seguro que para muchos esto es muy dificil si no se detalla paso a paso.

        Nilson Reyes Sigua

        Nilson Reyes Sigua

        student•
        hace 5 años

        Muy bien. Avanzando y aplicando lo de los compañeros. $ composer require symfony/apache-pack Utilice lo que comento Juan Caviglia y funcionó. Gracias.

        Kenet Andrés Chungandro Montenegro

        Kenet Andrés Chungandro Montenegro

        student•
        hace 6 años

        Todo ok, sigamos!

        Alejandro Zorita

        Alejandro Zorita

        student•
        hace 6 años

        Espero que tenga fichero de rutas, la verdad es que con Laravel se hace muy útil. Se echará de menos blade....??

        Jimmy Buriticá Londoño

        Jimmy Buriticá Londoño

        student•
        hace 5 años

        Listo el Contolador de Company y el Template. La ruta me quedo funcionando un poco extraña.

        http://127.0.0.1/symfony5/public/index.php/company
          Diego Ricardo Orellana Olivo

          Diego Ricardo Orellana Olivo

          student•
          hace 5 años

          A mi me pasa lo mismo:

          http://localhost/code/public/index.php/company```
        Carlos Eduardo Gomez García

        Carlos Eduardo Gomez García

        teacher•
        hace 5 años

        Algo extraño, por alguna razón a mi Symfony no me intalo ningún .htaccess para redirigir las rutas de la aplicación y me mandaba a Not Found.

        La solución es crear un archivo llamado .htaccess en la carpeta public y poner todo el código que explican en este repositorio:

          Juan Caviglia

          Juan Caviglia

          company_admin•
          hace 5 años

          Mismo problema. Recomiendo usar: $ composer require symfony/apache-pack