2016-10-15 3 views
0

私はuserの画像をアップロードするとという名前の画像をアップロードすることができます。私は最新の写真アップロードのみをデフォルト(true)に設定し、その特定のuser_idの他の画像はtrueに設定して、falseのままにしておきたいと思います。私はユーザーがデフォルトとして多くの写真を持っていることを望んでいません。デフォルトとしてエンティティを設定する[symfony2]

これは私がやっていることです:

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; 
    } 
} 

答えて

1

新しいアバターを作成する前に、すべてのユーザーアバターに対してdefaultPictureをfalseに設定します。

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

    ... 
} 
+0

ご迷惑をおかけします。私はちょうど今試して、それは完全に働いた。ありがとうございます :) – Sirius

関連する問題