Laravel-Excel到阵列验证不起作用

2admgd59  于 2023-02-14  发布在  其他
关注(0)|答案(1)|浏览(127)

我正在使用laravel-excel包,并希望将excel导入到数组中,它对于主代码运行良好(没有验证),但当我尝试添加验证/规则时,验证无法正常工作(我的意思是,就像验证被跳过一样,因此如果我上传了不符合格式的文件,数组输出仍然会出现),以下是我的导入代码

<?php

namespace App\Imports;

use App\Models\Request;
use Maatwebsite\Excel\Concerns\ToModel;
use Maatwebsite\Excel\Concerns\Importable;
use Maatwebsite\Excel\Concerns\WithHeadingRow;
use Maatwebsite\Excel\Concerns\WithValidation;
use Illuminate\Validation\Rule;

class RequestImport implements ToModel, WithValidation, WithHeadingRow
{
    use Importable;

    /**
    * @param array $row
    *
    * @return \Illuminate\Database\Eloquent\Model|null
    */
    public function model(array $row)
    {
        return new Request([
            'no' => $row[0],
            'username' => $row[1],
            'name' => $row[2],
        ]);
    }

    // create validation by heading row
    public function rules(): array
    {
        return [
            'no' => 'required',
            'username' => 'required',
            'name' => 'required',
        ];
    }
}

这是我调用RequestImport类时的控制器代码

$file = request()->file('fileExcel');

// save file
if (isset($request->upload)) {
    $this->saveFile($file);
}

// return excel import into array
$data = (new RequestImport)->toArray($file); //here I call the RequestImport

return response()->json([
    'status' => 'success',
    'message' => 'success,
    'data' => $data[0],
]);

我的代码有问题吗?或者我错过了什么?

eyh26e7m

eyh26e7m1#

这不是正式,但我找到了一个变通方法。首先,我添加了可导入的关注点,然后定义了一个类属性$data。这将在满足所有验证后存储行。

<?php

namespace App\Imports;

use Maatwebsite\Excel\Concerns\Importable;
use Maatwebsite\Excel\Concerns\ToArray;
use Maatwebsite\Excel\Concerns\WithHeadingRow;
use Maatwebsite\Excel\Concerns\WithValidation;

class ImportData implements ToArray, WithValidation, WithHeadingRow
{
    use Importable;
    public $data;

    public function array(array $rows)
    {
        $this->data = $rows;
    }

    public function rules(): array
    {
        return [
            // validation rules
        ];
    }
}

在我的控制器中

$import = new ImportData;
Excel::import($import, request()->file('file'));
return response()->json($import->data);

相关问题