提问人:owf 提问时间:10/1/2023 更新时间:10/3/2023 访问量:114
Laravel Excel 导入验证未给出结果
laravel excel import validation not giving the result
问:
我尝试按照这个 laravel excel 文档在 Laravel Excel 的导入类中使用 Validator 来验证 excel 行,但似乎验证结果没有给出结果
控制器:(顺便说一句,我正在使用带电线)
public function save()
{
$this->validate();
try {
$import = new OutputImport();
$import->import($this->excel);
} catch (\Maatwebsite\Excel\Validators\ValidationException $e) {
$failures = $e->failures();
dd($failures);
}
}
Import 类:
class OutputImport implements ToCollection, WithStartRow, SkipsEmptyRows
{
use Importable;
protected $outputs;
protected $outputIds;
public function __construct()
{
$this->outputs = Output::where('status',1)->get();
$this->outputIds = $this->outputs->pluck('id')->toArray();
}
public function collection(Collection $rows)
{
Validator::make($rows->toArray(), [
'*.0' => ['required', function(string $attribute, mixed $value, Closure $fail) {
if (!in_array($value, $this->outputIds))
$fail('Periksa dan pastikan kembali ID yang diinput.');
}],
'*.5' => 'required',
'*.6' => 'required|min:0',
'*.7' => 'required|min:0',
])->validate();
}
public function startRow(): int
{
return 2;
}
}
excel数据在那里,但是在验证执行后,它根本没有给我任何响应 如何获得验证结果?
答:
1赞
kris gjika
10/3/2023
#1
通过以下方式创建一个验证器实例并手动验证而不会引发异常:
$validator = \Illuminate\Support\Facades\Validator::make($rows->toArray(), $rules);
if ($validator->fails()) {
// save messages wherever to access them later from your controller
$messages = $validator->errors();
} else {
// handle your import ...
}
但是,您无法真正从导入中“返回”这些错误,尤其是在导入排队时。我建议将这些错误存储在表格中,或者根据您打算存储它们的时间进行缓存,并将它们显示给用户。您可以创建一个导入模型来跟踪您的导入(如果执行很多操作),其中包含状态和错误等字段。
评论
0赞
owf
10/5/2023
咕,谢谢,它有效!
评论
use Maatwebsite\Excel\Validators\Failure;