laravel 删除图片的背包
backpack for laravel deleting image
尝试删除图像时,我需要将其从磁盘中完全删除
功能:
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;
}
图片路线:
数据库:
删除图像时,没有任何变化,需要帮助从磁盘中物理删除图像。
TLDR;上传后检查目标文件权限,在删除前也尝试 dump($this->url)
,以确保使用正确的磁盘路径
示例:
只要你的字段定义正确,backpack 应该能够自动管理一切。比如处理客户端图片,我的字段是这样的:
$this->crud->addField([
'name' => 'logotipo',
'label' => "Logotipo del Cliente",
'type' => 'image',
'upload' => true,
'crop' => true,
'disk' => 'uploads',
], 'both');
然后,在模型中
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");
}
}
仅此而已,背包搞定一切。
唯一需要注意的是,如果删除模型(在我的示例中删除客户端),您还需要注意自己删除的文件。这可以在模型的 boot
方法中使用 deleting
事件完成。
public static function boot()
{
parent::boot();
static::deleting(function($obj) {
if (isset($obj->logo)) \Storage::disk($obj->disk)->delete($obj->logo);
});
}
当您将 $disk
和字段 value
传递给它时,它将毫无问题地删除文件,无需指定路径,因为它将包含在 $value
尝试删除图像时,我需要将其从磁盘中完全删除
功能:
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;
}
图片路线:
删除图像时,没有任何变化,需要帮助从磁盘中物理删除图像。
TLDR;上传后检查目标文件权限,在删除前也尝试 dump($this->url)
,以确保使用正确的磁盘路径
示例:
只要你的字段定义正确,backpack 应该能够自动管理一切。比如处理客户端图片,我的字段是这样的:
$this->crud->addField([
'name' => 'logotipo',
'label' => "Logotipo del Cliente",
'type' => 'image',
'upload' => true,
'crop' => true,
'disk' => 'uploads',
], 'both');
然后,在模型中
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");
}
}
仅此而已,背包搞定一切。
唯一需要注意的是,如果删除模型(在我的示例中删除客户端),您还需要注意自己删除的文件。这可以在模型的 boot
方法中使用 deleting
事件完成。
public static function boot()
{
parent::boot();
static::deleting(function($obj) {
if (isset($obj->logo)) \Storage::disk($obj->disk)->delete($obj->logo);
});
}
当您将 $disk
和字段 value
传递给它时,它将毫无问题地删除文件,无需指定路径,因为它将包含在 $value