Symfony 5 : Add Collection in twig template

Tengo un Subscribers entidad y entidad PaInstance entidad (PA) . Estos dos están relacionados como uno subscriber puede tener muchos PaInstances y la relación funciona. Mi problema es que en la plantilla de twig para show_subscriber Quiero usar el addPaInstance funciona y no sé cómo hacer eso. Esta es la entidad suscriptora :

class Subscribers
{
    /**
     * @ORM\Id
     * @ORM\GeneratedValue
     * @ORM\Column(type="integer")
     */
    private $id;
  /**
     * @ORM\OneToMany(targetEntity=PaInstances::class, mappedBy="subscriber")
     */
    private $paInstances;
   public function __construct()
    {$this->paInstances = new ArrayCollection(); }
    
 /**
     * @return Collection|PaInstances[]
     */
    public function getPaInstances(): Collection
    {
        return $this->paInstances;
    }

    public function addPaInstance(PaInstances $paInstance): self
    {
        if (!$this->paInstances->contains($paInstance)) {
            $this->paInstances[] = $paInstance;
            $paInstance->setSubscriber($this);
        }

        return $this;
    }
   public function removePaInstance(PaInstances $paInstance): self
    {
        if ($this->paInstances->removeElement($paInstance)) {
            // set the owning side to null (unless already changed)
            if ($paInstance->getSubscriber() === $this) {
                $paInstance->setSubscriber(null);
            }
        }

        return $this;
    }
    }

This is the PaInstances entity
class PaInstances
{
    /**
     * @ORM\Id
     * @ORM\GeneratedValue
     * @ORM\Column(type="integer")
     */
    private $id;
        /**
     * @ORM\ManyToOne(targetEntity=Subscribers::class, inversedBy="paInstances")
     */
    private $subscriber;
    
     public function getSubscriber(): ?Subscribers
    {
        return $this->subscriber;
    }

    public function setSubscriber(?Subscribers $subscriber): self
    {
        $this->subscriber = $subscriber;

        return $this;
    }
    }

Y en show_subscriber.html.twig Quiero hacer algo como


que abrirá una ventana modal donde puedo crear el PaInstance para ese suscriptor específico.

Pregunta hecha hace 3 años, 4 meses, 27 días - Por hackharbinger


2 Respuestas:

  • Para lograr agregar una nueva instancia de PaInstance para un suscriptor específico en Symfony 5 y mostrarlo en un modal en la plantilla Twig, hay varios pasos que debes seguir. Aquí te muestro cómo hacerlo:

    • En tu controlador de Symfony, asegúrate de tener una acción que renderice la plantilla `show_subscriber.html.twig` y que pase el suscriptor específico a esa plantilla. Algo así como:
    php
    public function showSubscriberAction($subscriberId)
    {
        $subscriber = $this->getDoctrine()->getRepository(Subscribers::class)->find($subscriberId);
    
        return $this->render('show_subscriber.html.twig', [
            'subscriber' => $subscriber
        ]);
    }
    
    • En la plantilla `show_subscriber.html.twig`, puedes agregar un botón que abre un modal para crear una nueva instancia de `PaInstance`. Puedes utilizar JavaScript y Bootstrap o algún otro framework de frontend para lograr esto. Aquí tienes un ejemplo básico con Bootstrap:
    twig
    
    
    
    
    • Luego, en tu controlador, debes manejar la acción para crear una nueva instancia de `PaInstance` cuando el formulario se envíe. Puedes crear una nueva acción como esta:
    php
    public function createPaInstanceAction(Request $request)
    {
        $subscriberId = $request->request->get('subscriber_id');
        $subscriber = $this->getDoctrine()->getRepository(Subscribers::class)->find($subscriberId);
    
        $paInstance = new PaInstances();
        // Asigna los valores a la nueva instancia de PaInstance según los datos del formulario
    
        $subscriber->addPaInstance($paInstance);
    
        $entityManager = $this->getDoctrine()->getManager();
        $entityManager->persist($paInstance);
        $entityManager->flush();
    
        // Redirige o renderiza la respuesta según tus necesidades
    }
    

    Recuerda que debes ajustar el código según la estructura y las necesidades de tu proyecto Symfony. Además, es recomendable implementar medidas de seguridad adicionales, como validación de formularios y control de acceso, para evitar posibles vulnerabilidades en tu aplicación.

    Respondida el Dec 21, 2020 a las 23:13 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • Para agregar una colección en una plantilla Twig en Symfony 5, puedes utilizar el siguiente enfoque:

    En tu controlador, crea el formulario para agregar una nueva instancia de Pa:

    php
    public function addPaInstance(Request $request, Subscribers $subscriber)
    {
        $paInstance = new PaInstances();
    
        $form = $this->createForm(PaInstanceType::class, $paInstance);
        $form->handleRequest($request);
    
        if ($form->isSubmitted() && $form->isValid()) {
            $em = $this->getDoctrine()->getManager();
            $paInstance->setSubscriber($subscriber);
            $em->persist($paInstance);
            $em->flush();
    
            $this->addFlash('success', 'PA Instance added successfully!');
    
            return $this->redirectToRoute('show_subscriber', ['id' => $subscriber->getId()]);
        }
    
        return $this->render('pa_instance/add.html.twig', [
            'form' => $form->createView(),
            'subscriber' => $subscriber,
        ]);
    }
    

    En tu plantilla pa_instance/add.html.twig, crea el formulario:

    twig
    {{ form_start(form) }}
        {{ form_row(form.name) }}
        {{ form_row(form.description) }}
        
    {{ form_end(form) }}
    

    En tu plantilla show_subscriber.html.twig, agrega el botón que abrirá el modal:

    twig
    
    
    
    

    Asegúrate de incluir jQuery y Popper.js en tu página para que funcione el modal.

    Respondida el Dec 21, 2020 a las 23:22 - por Gemini

    Votos positivos: 0 | Votos negativos: 0