2016-10-15 6 views
0

Ich habe ein Formular, wo ein user kann ein Bild hochladen, sobald das Bild hochgeladen wird es auch als true fortbestehen. Ich möchte, dass nur das neueste Bild hochgeladen wird als Standard (true) und das andere Bild von diesem bestimmten user_id auf wahr gesetzt werden, um als false persistent zu bleiben. Ich möchte nicht, dass ein Benutzer viele Bilder als Standard hat.Legen Sie eine Einheit als Standard [symfony2]

Dies ist, was ich getan habe:

public function avatarUserAction(Request $request) 
{ 
    $em = $this->getDoctrine()->getManager(); 
    $user = $this->container->get('security.token_storage')->getToken()->getUser(); 
    $entity = new Avatar(); 
    $form = $this->createForm(new AvatarType(),$entity); 
    if ($this->get('request')->getMethod() == 'POST') { 
     $form->handleRequest($request); 
     if ($form->isSubmitted() && $form->isValid()) { 

      $entity->setCreatedAt(new \DateTime()); 
      $entity->setDefaultPicture(true); 
      $entity->setUser($this->container->get('security.token_storage')->getToken()->getUser()); 
      $em->persist($entity); 
      $em->flush(); 
     } 
     return $this->redirect($this->generateUrl('avatarUser')); 
    } 

    return $this->render('ApplicationSonataUserBundle:Profile:avatar.html.twig', array('user' => $user,'entity' => $entity, 
     'form' => $form->createView())); 
} 

.

public function avatarUserAllAction() 
{ 
    $em = $this->getDoctrine()->getManager(); 
    $user = $this->container->get('security.token_storage')->getToken()->getUser(); 
    $entity = $em->getRepository('ApplicationSonataUserBundle:Avatar')->byAvatar($user); 
    return $this->render('ApplicationSonataUserBundle:Profile:avatar_all_image.html.twig', array('user' => $user,'entity' => $entity)); 
} 

routing.yml

avatarUser: 
    pattern: /profile/picture 
    defaults: { _controller: FLYBookingsBundle:Post:avatarUser } 

avatarUserAll: 
    pattern: /profile/picture 
    defaults: { _controller: FLYBookingsBundle:Post:avatarUserAll } 

UserRepository

public function byAvatar($user) 
{ 
    $qb = $this->createQueryBuilder('u') 
     ->select('u') 
     ->where('u.user = :user') 
     ->orderBy('u.createdAt', 'DESC') 
     ->setParameter('user', $user); 
    return $qb->getQuery() 
     ->getResult(); 
} 

Avatar.php

class Avatar 
{ 
    /** 
    * @ORM\Id 
    * @ORM\Column(type="integer") 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    protected $id; 

    /** 
    * @var User 
    * @ORM\ManyToOne(targetEntity="Application\Sonata\UserBundle\Entity\User", inversedBy="avatar") 
    */ 
    protected $user; 

    /** 
    * @var boolean 
    * @ORM\Column(name="defaultPicture", type="boolean") 
    */ 
    protected $defaultPicture; 

    public function __construct() 
    { 
     $this->defaultPicture = false; 
     $this->createAt = new \DateTime(); 
    } 

    /** 
    * @var \DateTime 
    * @ORM\Column(name="createdAt", type="datetime", nullable=true) 
    */ 
    protected $createdAt; 

    /** 
    * NOTE: This is not a mapped field of entity metadata, just a simple property. 
    * 
    * @Vich\UploadableField(mapping="user_image", fileNameProperty="imageName") 
    * 
    * @var File 
    */ 
    private $imageFile; 

    /** 
    * @ORM\Column(type="string", length=255) 
    * 
    * @var string 
    */ 
    private $imageName; 

    /** 
    * @ORM\Column(type="datetime") 
    * 
    * @var \DateTime 
    */ 
    private $updatedAt; 

    /** 
    * If manually uploading a file (i.e. not using Symfony Form) ensure an instance 
    * of 'UploadedFile' is injected into this setter to trigger the update. If this 
    * bundle's configuration parameter 'inject_on_load' is set to 'true' this setter 
    * must be able to accept an instance of 'File' as the bundle will inject one here 
    * during Doctrine hydration. 
    * 
    * @param File|\Symfony\Component\HttpFoundation\File\UploadedFile $image 
    * 
    * @return Avatar 
    */ 
    public function setImageFile(File $image = null) 
    { 
     $this->imageFile = $image; 

     if ($image) { 
      // It is required that at least one field changes if you are using doctrine 
      // otherwise the event listeners won't be called and the file is lost 
      $this->updatedAt = new \DateTime('now'); 
     } 

     return $this; 
    } 

    /** 
    * @return File|null 
    */ 
    public function getImageFile() 
    { 
     return $this->imageFile; 
    } 

    /** 
    * @param string $imageName 
    * 
    * @return Avatar 
    */ 
    public function setImageName($imageName) 
    { 
     $this->imageName = $imageName; 

     return $this; 
    } 

    /** 
    * @return string|null 
    */ 
    public function getImageName() 
    { 
     return $this->imageName; 
    } 


    /** 
    * Get id 
    * 
    * @return integer 
    */ 
    public function getId() 
    { 
     return $this->id; 
    } 

    /** 
    * Set defaultPicture 
    * 
    * @param boolean $defaultPicture 
    * @return Avatar 
    */ 
    public function setDefaultPicture($defaultPicture) 
    { 
     $this->defaultPicture = $defaultPicture; 

     return $this; 
    } 

    /** 
    * Get defaultPicture 
    * 
    * @return boolean 
    */ 
    public function getDefaultPicture() 
    { 
     return $this->defaultPicture; 
    } 

    /** 
    * Set createdAt 
    * 
    * @param \DateTime $createdAt 
    * @return Avatar 
    */ 
    public function setCreatedAt($createdAt) 
    { 
     $this->createdAt = $createdAt; 

     return $this; 
    } 

    /** 
    * Get createdAt 
    * 
    * @return \DateTime 
    */ 
    public function getCreatedAt() 
    { 
     return $this->createdAt; 
    } 

    /** 
    * Set updatedAt 
    * 
    * @param \DateTime $updatedAt 
    * @return Avatar 
    */ 
    public function setUpdatedAt($updatedAt) 
    { 
     $this->updatedAt = $updatedAt; 

     return $this; 
    } 

    /** 
    * Get updatedAt 
    * 
    * @return \DateTime 
    */ 
    public function getUpdatedAt() 
    { 
     return $this->updatedAt; 
    } 

    /** 
    * Set user 
    * 
    * @param \Application\Sonata\UserBundle\Entity\User $user 
    * @return Avatar 
    */ 
    public function setUser(\Application\Sonata\UserBundle\Entity\User $user = null) 
    { 
     $this->user = $user; 

     return $this; 
    } 

    /** 
    * Get user 
    * 
    * @return \Application\Sonata\UserBundle\Entity\User 
    */ 
    public function getUser() 
    { 
     return $this->user; 
    } 
} 

Antwort

1

Setzen Sie defaultPicture für alle Benutzeravatare auf "false", bevor Sie eine neue erstellen.

if ($form->isSubmitted() && $form->isValid()) { 
    foreach ($this->container->get('security.token_storage')->getToken()->getUser()->getAvatar() as $avatar) { 
     $avatar->setDefaultPicture(false); 
    } 

    ... 
} 
+0

Entschuldigung für die späte Antwort. Ich habe es gerade probiert und es hat perfekt funktioniert. Vielen Dank :) – Sirius

Verwandte Themen