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;
}
}
Entschuldigung für die späte Antwort. Ich habe es gerade probiert und es hat perfekt funktioniert. Vielen Dank :) – Sirius