Symfony: creando, listando, editando y borrando datos de la BD

Symfony Flex, Symfony 4, Doctrine

De nuevo continuando con el post anterior sobre cómo trabajar modificaciones en la base de datos, vengo hoy con otro HOWTO para modificar los datos de nuestra aplicación web que tenemos en la BD. Es decir, no para modificar la estructura de la BD como en el post anterior, sino para crear, listar, modificar o borrar los datos con Doctrine. Para los nuevos, Doctrine es la herramienta que viene con Symfony Flex, Symfony 4 para trabajar la persistencia de los datos.

Así que, continuando con el ejemplo del post anterior..

Creando un controlador para probar en el navegador

Continuando con el proyecto creado en el post anterior, llamado symfony-tutorial-working-with-databases, vamos a crear un controlador con las 4 acciones:

php bin/console make:controller

Si le llamamos creandoListadoModificandoBorrando, nos dará el siguiente código:

<?php

namespace App\Controller;

use Symfony\Component\Routing\Annotation\Route;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;

class CreandoListadoModificandoBorrandoController extends Controller
{
    /**
     * @Route("/creando/listado/modificando/borrando", name="creando_listado_modificando_borrando")
     */
    public function creando()
    {
        return $this->render('creando_listado_modificando_borrando/index.html.twig', [
            'controller_name' => 'CreandoListadoModificandoBorrandoController',
        ]);
    }
}

Ahora vamos a modificarlo para hacer las acciones

El código que puede quedar, una vez editado el controlador de src/Controller/CreandoListadoModificandoBorrandoController.php, es algo como esto:

<?php

namespace App\Controller;

use Symfony\Component\Routing\Annotation\Route;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use App\Entity\Direccion;

class CreandoListadoModificandoBorrandoController extends Controller
{
    /**
     * @Route("/creando", name="creando")
     */
    public function creando()
    { 
        $entityManager = $this->getDoctrine()->getManager();
        $debug = '';

        for ($i = 1; $i < 10; ++$i) {
            $address = new Direccion();
            $address->setNombre('Nombre '.$i);
            $address->setMovil('Móvil '.$i);
            $address->setDireccion('Dirección '.$i);
            $address->setEmail('Email '.$i);
            $address->setFijo('Fijo '.$i);

            $entityManager->persist($address);
            $debug .= 'Guardando.. '.$address->getNombre().'<br>';
        }
        $entityManager->flush();

        return $this->render('creando_listado_modificando_borrando/index.html.twig', [
            'controller_name' => 'CreandoListadoModificandoBorrandoController',
            'debug' => $debug,
        ]);
    }

    /**
     * @Route("/listando", name="listando")
     */
    public function listando()
    {
        $entityManager = $this->getDoctrine()->getManager();
        $debug = '';

        $addresses = $entityManager->getRepository('App:Direccion')->findAll();

        foreach ($addresses as $address) {
            $debug .= $address->getNombre().'<br>'
                .$address->getMovil().'<br>'
                .$address->getDireccion().'<br>'
                .$address->getEmail().'<br>'
                .$address->getFijo().'<br><br>';
        }

        return $this->render('creando_listado_modificando_borrando/index.html.twig', [
            'controller_name' => 'CreandoListadoModificandoBorrandoController',
            'debug' => $debug,
        ]);
    }

    /**
     * @Route("/editando", name="modificando")
     */
    public function editando()
    {
        $entityManager = $this->getDoctrine()->getManager();
        $debug = '';

        $addresses = $entityManager->getRepository('App:Direccion')->findAll();

        foreach ($addresses as $address) {
            $address->setNombre('Editando '.$address->getNombre());
            $entityManager->persist($address);
            $debug .= 'Guardando editado.. '.$address->getNombre().'<br>';
        }
        $entityManager->flush();

        return $this->render('creando_listado_modificando_borrando/index.html.twig', [
            'controller_name' => 'CreandoListadoModificandoBorrandoController',
            'debug' => $debug,
        ]);
    }

    /**
     * @Route("/borrando", name="borrando")
     */
    public function borrando()
    {
        $entityManager = $this->getDoctrine()->getManager();
        $debug = '';

        $addresses = $entityManager->getRepository('App:Direccion')->findAll();
  
        foreach ($addresses as $address) {
            $entityManager->remove($address);
            $debug .= 'Borrando.. '.$address->getNombre().'<br>';
        }
        $entityManager->flush();

        return $this->render('creando_listado_modificando_borrando/index.html.twig', [
            'controller_name' => 'CreandoListadoModificandoBorrandoController',
            'debug' => $debug,
        ]);
    }
}

Y la plantilla Twig que nos ha autogenerado Symfony en templates/creando_listado_modificando_borrando/index.html.twig también editada:

{% extends 'base.html.twig' %}

{% block title %}Hello {{ controller_name }}!{% 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>

<p>This is debug info:</p>
<code>{{ debug | raw }}</code>
</div>
{% endblock %}

Terminando, probando los resultados

Sólo nos queda lanzar el servidor de desarrollo para probar en el navegador los resultados. Así que lanzamos el servidor:

php bin/console server:start

Y tenemos las siguientes direcciones que lanzar y juguetear para probar el código:

http://localhost:8000/creando
http://localhost:8000/listando
http://localhost:8000/editando
http://localhost:8000/borrando

Espero que sirva.

¡Un saludo!

Compartir..

Dejar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

cuatro × cinco =

4 ideas sobre “Symfony: creando, listando, editando y borrando datos de la BD”