2017-09-06 1 views
0

wenn man versucht, ein Bild, das ich es die ScheibeRucksack für Laravel Löschen Bild

Funktion vollständig entfernen müssen löschen bilden:

public function setUrlAttribute($value) 
{ 
    $attribute_name = "url"; 
    $disk = "public"; 
    $destination_path = "uploads/equipos"; 

    if ($value==null) { 
     // delete the image from disk 

     Storage::disk($disk)->delete($this->url); //<---- fix here 
     // set null in the database column 
     $this->attributes[$attribute_name] = null; 
    } 

Bild Route: enter image description here der Datenbank:

enter image description here

beim Löschen des Bildes ändert sich nichts, brauchen Hilfe beim Löschen der Image physisch von der Festplatte.

+0

$value enthalten sein wird, werden Sie die 'Verwendung - > delete() 'Funktion oder setzen Sie url manuell auf' null'? – Quezler

+0

Ich benutze löschen, um das Bild physisch loszuwerden –

+0

Ich habe die gleiche Methode für eine andere Art von Dateien pdf und seltsam funktioniert das Löschen der Datei und die Einstellung Null auf der Datenbank. –

Antwort

1

TLDR; Check für Zieldateien Berechtigungen nach dem Hochladen, versucht auch zu dump($this->url) vor dem Löschen, den richtigen Pfad von Ihrer Festplatte, um sicherzustellen, verwendet wird

Beispiel:

Solange Sie Ihr Feld korrekt definiert haben, Rucksack sollte in der Lage sein, alles automatisch zu verwalten. Zum Beispiel den Umgang mit Client-Images, ich habe dies als das Feld:

$this->crud->addField([ 
    'name' => 'logotipo', 
    'label' => "Logotipo del Cliente", 
    'type' => 'image', 
    'upload' => true, 
    'crop' => true, 
    'disk' => 'uploads', 
    ], 'both'); 

Dann wird in dem Modell

public function setLogotipoAttribute($value) 
{ 
    if ($value==null) { 
     if(isset($this->attributes["logo"])) { 
      \Storage::disk($this->disk)->delete($this->attributes["logo]); 
     } 
     return null; 
    } 
    else 
    { 
     /* Whatever you need, I just create thumbs with a custom \Utils::thumb, you can mutate the atrribute to your needs */ 
     $this->attributes["logo"] = \Utils::thumb($this, $value, "logo", "academias/logos", 300, 200, "png"); 
    } 
} 

Und das ist alles, nimmt Rucksack kümmert sich um alles.

Die einzige Sache, die Sie berücksichtigen müssen, ist, wenn Sie das Modell löschen (Löschen eines Clients in meinem Beispiel), müssen Sie auch auf die Dateien achten, die Sie selbst löschen. Dies kann in der boot Methode des Modells mit einem deleting Ereignis geschehen.

public static function boot() 
{ 
    parent::boot(); 
    static::deleting(function($obj) { 
     if (isset($obj->logo)) \Storage::disk($obj->disk)->delete($obj->logo); 
    }); 
} 

Wie Sie es die $disk und das Feld value übergeben, wird die Datei ohne Probleme löschen, keine Notwendigkeit, den Weg zu geben, wie es in den

Verwandte Themen