Entidad Producto:
<?php namespace App\Entity; use Doctrine\ORM\Mapping as ORM; /** * @ORM\Entity(repositoryClass="App\Repository\ProductoRepository") */ class Producto { /** * @ORM\Id() * @ORM\GeneratedValue() * @ORM\Column(type="integer") */ private $id; /** * @ORM\Column(type="string", length=255) */ private $nombre; /** * @ORM\Column(type="integer") */ private $precio; /** * @ORM\Column(type="integer", nullable=true) */ private $stock; public function getId(): ?int { return $this->id; } public function getNombre(): ?string { return $this->nombre; } public function setNombre(string $nombre): self { $this->nombre = $nombre; return $this; } public function getPrecio(): ?int { return $this->precio; } public function setPrecio(int $precio): self { $this->precio = $precio; return $this; } public function getStock(): ?int { return $this->stock; } public function setStock(?int $stock): self { $this->stock = $stock; return $this; } }
Controlador:
<?php namespace App\Controller; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\Routing\Annotation\Route; use Symfony\Component\HttpFoundation\Request; use App\Entity\Producto; class ProductoController extends AbstractController { /** * @Route("/producto", name="producto") */ public function index() { /* $entityManager = $this->getDoctrine()->getManager(); for ($i = 1; $i <= 10; $i++) { $producto = new Producto(); $producto->setNombre('Producto '.$i); $producto->setPrecio($i); // Guardamos el producto $entityManager->persist($producto); } // Actualizamos los datos en la BD $entityManager->flush(); */ /* //Producto es un objeto del tipo Producto Entity //Con sus propiedades y métodos (concretamente los get y set de las columnas) $producto = $this->getDoctrine() ->getRepository(Producto::class) ->find($id); $producto->setNombre('Nuevo nombre cool para mi producto ¡Mola!'); $entityManager = $this->getDoctrine()->getManager(); $entityManager->remove($producto); $entityManager->flush(); $producto = $this->getDoctrine() ->getRepository(Producto::class) ->findOneBy(['nombre'=>'Producto 5']); * */ $productos = $this->getDoctrine() ->getRepository(Producto::class) ->findAll(); $salida = []; foreach ($productos as $producto) { $salida[] = [$producto->getId(), $producto->getNombre(), $producto->getPrecio()]; } return $this->render('producto/index.html.twig', [ 'productos' => $salida]); } /** * @Route("/producto/nuevo", name="nuevo") */ public function nuevo() { $request = Request::createFromGlobals(); $nombre = $request->request->get('nombre'); $precio = $request->request->get('precio'); $stock = $request->request->get('stock'); $id = ''; if (!empty($nombre) && !empty($precio)) { //Añadir el producto $producto = new Producto(); $producto->setNombre($nombre); $producto->setPrecio($precio); if (empty($stock)) { $stock = 0; } $producto->setStock($stock); $entityManager = $this->getDoctrine()->getManager(); // Guardamos el producto $entityManager->persist($producto); // Actualizamos los datos en la BD $entityManager->flush(); $id = $producto->getId(); } return $this->render('producto/nuevo.html.twig', ['id' => $id]); } /** * @Route("/producto/eliminar/{id}", name="eliminar") */ public function eliminar(Producto $producto) { $nombre = $producto->getNombre(); $entityManager = $this->getDoctrine()->getManager(); $entityManager->remove($producto); $entityManager->flush(); return $this->render('producto/eliminar.html.twig', ['nombre' => $nombre]); } /** * @Route("/producto/editar/{id}", name="editar") */ public function editar(Producto $producto) { $request = Request::createFromGlobals(); $nombre = $request->request->get('nombre'); $precio = $request->request->get('precio'); $stock = $request->request->get('stock'); if (!empty($nombre) && !empty($precio)) { $producto->setNombre($nombre); $producto->setPrecio($precio); if (empty($stock)){$stock=0;} $producto->setStock($stock); $entityManager = $this->getDoctrine()->getManager(); $entityManager->flush(); } return $this->render('producto/editar.html.twig', [ 'nombre' => $producto->getNombre(), 'precio' => $producto->getPrecio(), 'stock' => $producto->getStock(), ]); } }
Plantillas:
index:
{% extends 'base.html.twig' %} {% block title %}{% endblock %} {% block body %} <div class="container"> <h1>Productos</h1> <a href="/producto/nuevo" class="btn btn-success">Nuevo producto</a> <table class="table"> <tr><td>Id</td><td>Nombre</td><td>Precio</td><td>Acciones</td></tr> {% for producto in productos %} <tr><td>{{producto[0]}}</td><td>{{producto[1]}}</td><td>{{producto[2]}}</td> <td><a href="/producto/editar/{{producto[0]}}" class="btn btn-info">Editar</a> <a href="/producto/eliminar/{{producto[0]}}" class="btn btn-danger">Eliminar</a></td></tr> {% endfor %} </table> </div> {% endblock %}
nuevo
{% extends 'base.html.twig' %} {% block title %}{% endblock %} {% block body %} <div class="container"> <h1>Nuevo Producto</h1> {% if id %} <div class="alert alert-success alert-dismissible"> <a href="#" class="close" data-dismiss="alert" aria-label="close">×</a> <strong>Correcto</strong> Se ha insertado con éxito el producto con id {{id}}. </div> {% endif %} <form method="post"> <div class="form-group"> Nombre: <input class="form-control" type="text" name="nombre"></div> <div class="form-group"> Precio: <input class="form-control" type="text" name="precio"></div> <div class="form-group"> Stock: <input class="form-control" type="text" name="stock"></div> <input type="submit" class="btn btn-info"> </form> </div> {% endblock %}
editar:
{% extends 'base.html.twig' %} {% block title %}{% endblock %} {% block body %} <div class="container"> <h1>Editar Producto</h1> <form method="post"> <div class="form-group"> Nombre: <input class="form-control" type="text" value="{{nombre}}" name="nombre"></div> <div class="form-group"> Precio: <input class="form-control" type="text" value="{{precio}}" name="precio"></div> <div class="form-group"> Stock: <input class="form-control" type="text" value="{{stock}}" name="stock"></div> <input type="submit" class="btn btn-info"> </form> <a href="/producto">Volver al listado</a> </div> {% endblock %}
eliminar:
{% extends 'base.html.twig' %} {% block title %}{% endblock %} {% block body %} <div class="container"> <h1>Eliminar Producto</h1> <p>Has eliminado el producto <b>{{nombre}}</b></p> <a href="/producto">Volver al listado</a> </div> {% endblock %}