Laravel Nova 要求在每次编辑时上传图片

Laravel Nova required image upload on every edit

我正在使用 laravel-nova 并且在一个资源上我正在使用 Image 字段:

use Laravel\Nova\Fields\Image;

Image::make('Top Image', 'hero_image')
      ->help('Upload an image to display as hero')
      ->disk('local')
      ->maxWidth(400)
      ->prunable()
      ->rules('required')
      ->hideFromIndex(),

到目前为止一切顺利,但由于它是必需的,所以我每次想编辑资源时都必须上传(相同的)图像,这有点烦人,我不想让它不需要。

那么,有解决办法吗?

首先,你想让它只在创建时需要,所以你应该使用 ->creationRules('required') 而不是 ->rules('required')

但问题是用户可以删除照片,并保存没有图像的资源。

要解决这个问题,您只需使用 ->deletable(false) 禁用字段上的删除功能。

Image::make('Top Image', 'hero_image')
    ->help('Upload an image to display as hero')
    ->disk('local')
    ->maxWidth(400)
    ->prunable()
    ->creationRules('required')
    ->deletable(false)
    ->hideFromIndex(),

这样您就可以更新资源,而不必每次都上传图片。并且用户只能用另一张图片替换原始图片。

我是这样整理的,我试着先看看我是否已经把图像保存在我的模型上,然后再确定我是否需要它。

$imageRules =  $this->company_logo ? 'sometimes' : 'required';
    return [
        Image::make('Shop Logo', 'company_logo')
            ->disk('images')
           ->rules($imageRules, 'mimes:png')
            ->disableDownload()->deletable(false),

希望对其他人有所帮助。