Construir un listado de comentarios que se relacione de forma inversa con los productos es una pieza fundamental para dominar las consultas en Symfony. Aquí se trabaja la relación many to one (muchos a uno), donde múltiples comentarios pertenecen a un solo producto, y se muestra cómo organizar controladores, vistas y vistas parciales de forma profesional.
¿Cómo crear el controlador para listar comentarios?
El punto de partida siempre es el controlador, porque desde allí se define tanto la consulta como la ruta [01:00]. El proceso consiste en importar la entidad de comentarios y crear un nuevo método que recupere todos los registros.
- Se importa la entidad
Comment (app comments) al controlador.
- Se crea un método que ejecuta la consulta
findAll() sobre la entidad de comentarios.
- El resultado se almacena en una variable
$comments y se pasa a la vista correspondiente.
Este patrón es muy similar al método home que lista productos, solo que ahora se trabaja con la entidad de comentarios. La consulta básica es: obtén todos los comentarios y pásalos a la vista [02:24].
¿Cómo estructurar las vistas parciales en Twig?
Una práctica clave es la refactorización mediante vistas parciales [02:48]. En lugar de colocar todo el HTML en una sola plantilla, se aísla el código de cada comentario individual en un archivo separado.
- Se crea la vista principal de comentarios que itera sobre la colección.
- Dentro de esa vista se incluye una vista parcial con la sintaxis
{{ include('comentario.html.twig') }}.
- La vista parcial contiene la estructura de un solo comentario: su ID y un enlace al producto asociado.
¿Qué información se muestra en cada comentario?
Dentro de la vista parcial se trabaja con un h4 que contiene un enlace hacia el producto relacionado [03:08]. Para construir ese enlace se utiliza la función path() de Twig:
- Se genera la ruta con
path('app_product', { id: comment.product.id }).
- Se muestra el nombre del producto con
comment.product.name.
- Se aplican clases CSS como
text-dark para eliminar el subrayado y mejorar la presentación.
Esta es precisamente la consulta many to one en acción: desde un comentario se accede directamente al producto al que pertenece mediante comment.product.
¿Por qué reutilizar vistas parciales en distintas plantillas?
La vista parcial creada para un comentario individual puede pegarse también en la plantilla de productos [03:52]. Este enfoque de código genérico aislado permite mantener una sola fuente de verdad para la representación visual de cada entidad.
¿Cómo mejorar el rendimiento de las consultas?
Al verificar el resultado en el navegador, la barra de depuración de Symfony (debug toolbar) revela datos importantes sobre el rendimiento [04:42]:
- La página de home genera cuarenta y una consultas SQL.
- La página de comentarios genera dieciséis consultas.
- Al hacer clic en una etiqueta individual, se ejecutan cuarenta y dos consultas.
Estos números indican que hay espacio para optimizar el rendimiento con consultas personalizadas, tema que se aborda en la siguiente sesión.
El resultado final es un sistema con cuatro métodos en el controlador que cubren todas las consultas necesarias: listado de productos, detalle de producto, listado de comentarios y navegación entre entidades relacionadas. La organización del código en vistas parciales, como aislar un comentario o un producto en su propio archivo Twig, refleja buenas prácticas de mantenimiento y escalabilidad.
Prueba que todos los enlaces funcionen correctamente y que puedas ir de un comentario al producto asociado. Si lograste replicar la estructura, comparte en los comentarios qué parte del proceso te resultó más clara.