添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement . We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account list($rules, $input) = $this->hydrateFiles(Arr::get($input, $this->column, []));
多图片排序的时候
hydrateFiles 的参数是 array 但是给的确是 string 如: '1,0'

解决方法:
if (request()->has(static::FILE_SORT_FLAG)) {
return false;

添加多文件扩展

use Encore\Admin\Form\Field\MultipleFile;
use Illuminate\Support\Arr;
class CustomMultipleFile extends MultipleFile
    protected $view = 'admin::form.multiplefile';
     * Related model sort column
     * @var string
    protected $sortColumn;
    public function getValidator(array $input)
        if (request()->has(static::FILE_SORT_FLAG)) {
            return false;
        return parent::getValidator($input);
    public function sortable($sortColumn = 'sort')
        $this->sortColumn = $sortColumn;
        return parent::sortable();
    protected function sortFiles($order)
        $order = explode(',', $order);
        $new            = [];
        $original       = $this->original();
        $relatedKeyName = $this->getRelatedKeyName();
        if ($relatedKeyName) {
            foreach ($order as $sort => $item) {
                $newItem = Arr::first($original,
                    function ($originalItem) use ($item, $relatedKeyName) {
                        return $originalItem[$relatedKeyName] == $item;
                if (!isset($newItem[$this->pathColumn])) {
                    continue;
                $newItem[$this->sortColumn] = $sort;
                $new[]                      = $newItem;
        } else {
            foreach ($order as $item) {
                $new[] = Arr::get($original, $item);
        return $new;
    public function prepare($files)
        $prepare    = parent::prepare($files);
        $sortColumn = $this->sortColumn;
        if (!$sortColumn) {
            return $prepare;
        } else {
            $sortStart = array_reduce($this->original(), function ($carry, $item) {
                $sortVal = $item[$this->sortColumn] ?? 0;
                return $carry > $sortVal ? $carry : $sortVal;
            }, 0);
            foreach ($prepare as &$file) {
                if (!isset($file[$sortColumn])) {
                    $file[$sortColumn] = ++$sortStart;
        return $prepare;

创建多图片扩展

use Encore\Admin\Form\Field\ImageField;
use Symfony\Component\HttpFoundation\File\UploadedFile;
class CustomMultipleImage extends CustomMultipleFile
    use ImageField;
     * {@inheritdoc}
    protected $view = 'admin::form.multiplefile';
     *  Validation rules.
     * @var string
    protected $rules = 'image';
     * Prepare for each file.
     * @param UploadedFile $image
     * @return mixed|string
    protected function prepareForeach(UploadedFile $image = null)
        $this->name = $this->getStoreName($image);
        $this->callInterventionMethods($image->getRealPath());
        /* return tap($this->upload($image), function () {
            $this->name = null;
        }); */
        /* Copied from single image prepare section and made necessary changes so the return
        value is same as before, but now thumbnails are saved to the disk as well. */
        $path = $this->upload($image);
        $this->uploadAndDeleteOriginalThumbnail($image);
        $this->name = null;
        return $path;

在使用多文件的模型上获取文件关联时按照 sortColumn 进行排序

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
class Product extends Model
    protected $fillable = [
        'name',
        'description'
    public function images()
        return $this->morphMany(Media::class, 'attachable')->orderBy('sort');

将自定义的多文件扩展注册到表单字段中, 使用即可

list($rules, $input) = $this->hydrateFiles(Arr::get($input, $this->column, []));
多图片排序的时候
hydrateFiles 的参数是 array 但是给的确是 string 如: '1,0'

解决方法:
if (request()->has(static::FILE_SORT_FLAG)) {
return false;

此方案会导致获取不到图片的验证规则

解决办法:
src/Form/Field/MultipleFile.php 79行 改为

        $value = Arr::get($input, $this->column, []);
        if (is_string($value)) $value = [];
        list($rules, $input) = $this->hydrateFiles($value);

提示:排序时不能上传新图片