php Laravel Nova要求每次编辑时上传图像

qij5mzcb  于 2023-03-11  发布在  PHP
关注(0)|答案(3)|浏览(147)

我使用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(),

到目前为止一切顺利,但由于它的要求,我必须上传(相同的)图像每次我想编辑的资源,这是有点烦人,我不想使它不需要。
那么,有没有解决办法呢?

lyfkaqu1

lyfkaqu11#

首先,您希望仅在创建时需要它,因此应该使用->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(),

这将允许你更新你的资源而不必每次都上传一张图片。而且用户只能用另一张图片替换原来的图片。

8dtrkrch

8dtrkrch2#

我整理出来的这种方式,我试图找到如果我已经得到了图像保存在我的模型第一,然后确定如果我想需要它或没有。

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

我希望这能帮助其他人。

igetnqfo

igetnqfo3#

另一个原因可能是混合内容错误。在我的例子中,我错误地将APP_URL配置为http而不是https,这阻止了图像在编辑视图中加载。

相关问题