我正在使用 VichUploader 在我的 Symfony 3 应用程序中管理文件上传。现在我想知道如何管理删除文件/实体?
app/config/config.yml 的摘录:
vich_uploader:
db_driver: orm
mappings:
upload_artists:
uri_prefix: /upload/artists
upload_destination: %kernel.root_dir%/../web/upload/artists
directory_namer: artist_directory_namer
namer: vich_uploader.namer_uniqid
inject_on_load: false
delete_on_update: true
delete_on_remove: true
实体摘录:
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Component\HttpFoundation\File\File;
use Vich\UploaderBundle\Mapping\Annotation as Vich;
/**
* @ORM\Entity
* @ORM\Table(name="image_file")
* @Vich\Uploadable
*/
class ImageFile {
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\Column(type="string", length=255, nullable=true)
*
*/
private $title;
/**
* NOTE: This is not a mapped field of entity metadata, just a simple property.
*
* @Vich\UploadableField(mapping="upload_artists", fileNameProperty="imageName")
*
* @var File
*/
private $imageFile;
/**
* @ORM\Column(type="string", length=255)
*
* @var string
*/
private $imageName;
/**
* @ORM\Column(type="datetime")
*
* @var \DateTime
*/
private $updatedAt;
/**
* @ORM\ManyToOne(targetEntity="Artist")
* @ORM\JoinColumn(name="artist_id", referencedColumnName="id")
*/
private $artist;
/**
* @ORM\Column(type="boolean")
*/
private $deleted;
控制器摘录:
namespace Acme\Bundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Acme\Bundle\Entity\Artist;
use Acme\Bundle\Entity\ImageFile;
class ArtistPhotoController extends Controller {
// ...
public function deleteDisabledAction($id = null) {
$artist = $this->getDoctrine()
->getRepository('Bundle:Artist')
->find($id)
;
$repository = $this->getDoctrine()->getRepository('Bundle:ImageFile');
$photosDisabled = $repository->findBy(array('artist' => $artist, 'application' => $this->application, 'deleted' => 1), array('updatedAt' => 'DESC'));
$counter = 0;
foreach ($photosDisabled as $disabled) {
if($disabled->remove()) {
$counter++;
}
}
if ($counter > 0) {
$this->addFlash(
'success',
$counter.' items successfully deleted!'
);
}
}
}
... '$disabled->remove()' 只是一个测试并导致错误消息(“名为 remove 的未定义方法”)。删除/删除由 VichUploader 管理的文件/实体的正确方法是什么?有什么提示吗?提前致谢!