• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Symfony PostRemove - usuwanie grafiki

Aruba Cloud - Virtual Private Server VPS
0 głosów
441 wizyt
pytanie zadane 3 listopada 2017 w PHP przez Adam Ostrogórski Obywatel (1,070 p.)

Witam,

w aplikacji Symfony mam encję "Post", której jednym z elementów jest grafika i możliwość jest uploadowania. Grafika po załadowaniu zapisuje się do folderu "images" w web/uploads. Ustawiłem że w momencie aktualizacji grafiki stara grafika zostaje usunięta i zastępuje ją nowa. Próbuję dodać, aby w momencie usunięcia całego wpisu ("Post") usunięta została również grafika z katalogu web/uploads/images. I nie wiem, gdzie robię błąd.  

Mam następujący kod:

/**
* @ORM\Entity
* @ORM\Table(name="post")
 * @ORM\HasLifecycleCallbacks
*/
class Post {
    
    const UPLOAD_DIR = 'uploads/images/';

    /**
    * @ORM\Column(type="integer")
    * @ORM\Id
    * @ORM\GeneratedValue(strategy="AUTO")
    */ 
    private $id;
	
	/**
    * @ORM\Column(type="string", length=80, nullable=true) 
    */
    private $image = null;
    
    /**
     * @var UploadedFile 
     * 
     */
    private $imageFile;
    
    private $imageTemp;
    
    /**
     * @ORM\Column(type="datetime", nullable = true)
     */
    private $updateDate;
	
	[...]
	
	/**
     * Set image
     *
     * @param string $image
     *
     * @return Post
     */
    public function setImage($image)
    {
        $this->image = $image;

        return $this;
    }

    /**
     * Get image
     *
     * @return string 
     */
    public function getImage()
    {
        return Post::UPLOAD_DIR.$this->image;
    }
    
    public function getImageFile() {
        return $this->imageFile;
    }

    public function setImageFile(UploadedFile $imageFile) {
        $this->imageFile = $imageFile;
        $this->updateDate = new \DateTime();
        return $this;
    }
	
	/**
     * @ORM\PrePersist
     * @ORM\PreUpdate
     */
    public function preSave(){
        if(null !== $this->getImageFile()){
            
            if(null !== $this->image){
                $this->imageTemp = $this->image;
            }
            
            $imageName = sha1(uniqid(null, true));
            $this->image = $imageName.'.'.$this->getImageFile()->guessExtension();
        }
        
        $this->updateDate = new \DateTime();
    }
    
    /**
     * @ORM\PostPersist
     * @ORM\PostUpdate
     */
    public function postSave(){
        if(null !== $this->getImageFile()){
            $this->getImageFile()->move($this->getUploadRootDir(), $this->image);
            unset($this->imageFile);
            
            if(null !== $this->imageTemp){
                unlink($this->getUploadRootDir().$this->imageTemp);
                unset($this->imageTemp);
            }
        }
    }
    
    /**
     * @ORM\PostRemove
     */
    public function postRemove(){
            
        if(null !== $this->image){
            unlink($this->getUploadRootDir().$this->image);
            unset($this->image);
        }
    }
	
	protected function getUploadRootDir(){
        return __DIR__.'/../../../../web/'.Post::UPLOAD_DIR;
    }
	
}
	
	

Podczas aktualizacji grafiki usuwanie działa, ale podczas usuwania postu grafika dalej zostaje w katalogu. 

Z góry dziękuję za wszelką pomoc.

 

 

1 odpowiedź

+1 głos
odpowiedź 3 listopada 2017 przez Boshi VIP (100,240 p.)
https://symfony.com/doc/master/bundles/EasyAdminBundle/integration/vichuploaderbundle.html

 

I nie baw się w wbudowany uploader bo jest tragiczny i zbugowany
komentarz 3 listopada 2017 przez Adam Ostrogórski Obywatel (1,070 p.)
Dzięki za link. Tak zrobię.

A gdybym na ten moment chciał zrobić usuwanie z tym uploaderem, to wiesz może czemu to, co napisałem nie zadziałało?

Podobne pytania

0 głosów
1 odpowiedź 169 wizyt
pytanie zadane 17 lutego 2020 w PHP przez michal_php Stary wyjadacz (13,700 p.)
0 głosów
1 odpowiedź 169 wizyt
pytanie zadane 17 czerwca 2020 w JavaScript przez Piotr Zakrzewski Obywatel (1,260 p.)
0 głosów
2 odpowiedzi 149 wizyt
pytanie zadane 17 listopada 2024 w PHP przez Sebastian Szyja Bywalec (2,950 p.)

93,335 zapytań

142,330 odpowiedzi

322,411 komentarzy

62,670 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...