2016-06-02 3 views
0

Я использую VichUploader для управления загрузкой файлов в приложении Symfony 3. Теперь мне интересно, как управлять удалением файлов/объектов?Symfony/VichUploaderBundle: Удалить объект

Выдержка из приложения/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 

Отрывок из Entity:

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() 'был просто тестом и приводит к сообщению об ошибке ("undefined method named remove"). Как правильно удалить/удалить файл/объект, управляемый VichUploader? Любые намеки? Спасибо заранее!

ответ

1

Вы не удаляете их должным образом. basic commands to remove an entity есть;

$em = $this->getDoctrine()->getEntityManager(); 
$em->remove($myEntityObj); 
$em->flush(); 
+0

Спасибо большое - это решило мою проблему! Я новичок в Symfony и не придумал идею взглянуть на учение, а не на документы vichuploader. – Pixelrocker