Vich загрузить пакет удалить изображение

Привет, ребята, я реализовал vichuploadbundle для загрузки изображений, но я хочу, чтобы в администраторе пользователь удалил изображение.

<?php

namespace George\PageBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use George\UserBundle\Entity\User;
use Gedmo\Mapping\Annotation as Gedmo;
use Symfony\Component\HttpFoundation\File\File;
use Vich\UploaderBundle\Mapping\Annotation as Vich;

/**
 * Page
 *
 * @ORM\Table()
 * @ORM\Entity(repositoryClass="George\PageBundle\Entity\PageRepository")
 * @Vich\Uploadable
 */
class Page
{
/**
 * @var integer
 *
 * @ORM\Column(name="id", type="integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 */
private $id;

/**
 * @var string
 *
 * @ORM\Column(name="title", type="text")
 */
private $title;

/**
 * @var string
 *
 * @ORM\Column(name="content", type="text")
 */
private $content;

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

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

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

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

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

/**
 * @ORM\ManyToOne(targetEntity="George\UserBundle\Entity\User",  inversedBy="pages")
 * @ORM\JoinColumn(onDelete="CASCADE")
 */
private $owner;

//@ORM\Column(length=128, unique=true)
/**
 * @Gedmo\Slug(fields={"title"})
 * @ORM\Column(length=128, unique=true)
 */
private $slug;

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

/**
 * Set title
 *
 * @param string $title
 *
 * @return Page
 */
public function setTitle($title)
{
    $this->title = $title;

    return $this;
}

/**
 * Get title
 *
 * @return string
 */
public function getTitle()
{
    return $this->title;
}

/**
 * Set content
 *
 * @param string $content
 *
 * @return Page
 */
public function setContent($content)
{
    $this->content = $content;

    return $this;
}

/**
 * Get content
 *
 * @return string
 */
public function getContent()
{
    return $this->content;
}

/**
 * Set visible
 *
 * @param boolean $visible
 *
 * @return Page
 */
public function setVisible($visible)
{
    $this->visible = $visible;

    return $this;
}

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

/**
 * Set created
 *
 * @param \DateTime $created
 *
 * @return Page
 */
public function setCreated($created)
{
    $this->created = $created;

    return $this;
}

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

/**
 * Set modefied
 *
 * @param \DateTime $modefied
 *
 * @return Page
 */
public function setModefied($modefied)
{
    $this->modefied = $modefied;

    return $this;
}

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

/**
 * Set description
 *
 * @param string $description
 *
 * @return Page
 */
public function setDescription($description)
{
    $this->description = $description;

    return $this;
}

/**
 * Get description
 *
 * @return string
 */
public function getDescription()
{
    return $this->description;
}

/**
 * Set keywords
 *
 * @param string $keywords
 *
 * @return Page
 */
public function setKeywords($keywords)
{
    $this->keywords = $keywords;

    return $this;
}

/**
 * Get keywords
 *
 * @return string
 */
public function getKeywords()
{
    return $this->keywords;
}

/**
 * @return mixed
 */
public function getOwner()
{
    return $this->owner;
}

/**
 * @param mixed $owner
 */
public function setOwner(User $owner)
{
    $this->owner = $owner;
}

public function getSlug()
{
    return $this->slug;
}

// ..... other fields


/**
 * NOTE: This is not a mapped field of entity metadata, just a simple property.
 *
 * @Vich\UploadableField(mapping="product_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
 */
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 File
 */
public function getImageFile()
{
    return $this->imageFile;
}

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

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

Можете ли вы посоветовать мне, как лучше всего это решить. Я думаю, что будет лучше, если у меня будет метод удаления изображения, и в этом методе попробуйте использовать встроенную функцию связки для удаления изображения (которое я нигде не нахожу) и обновить его в базе данных. Во внешнем интерфейсе это может быть сделано через ajax или на submit... Есть ли встроенная функция для удаления файла в vichuploadbundle?

1 ответ

Решение

Я нашел, как удалить изображение. Пакет предоставляет пользовательский тип формы для упрощения загрузки, удаления и загрузки изображений.

Когда вы создаете форму, вы указываете виджет:

public function buildForm(FormBuilderInterface $builder, array $options)
{
// ...

$builder->add('image', 'vich_image', array(
    'required'      => false,
    'allow_delete'  => true, // not mandatory, default is true
    'download_link' => true, // not mandatory, default is true
));
}

Это добавляет шаблон ветки для удаления IMG:)

Другие вопросы по тегам