aaronbell1/laravel-csv-bulk-uploader

v1.5 2020-02-03 12:03 UTC

This package is auto-updated.

Last update: 2024-09-29 05:02:32 UTC


README

批量上传器旨在允许用户以简单的方式验证并直接将CSV记录上传到数据库。

该软件包使用Laravel验证器来验证数据,并使用Laravel数据库对象将记录提交到数据库。

目录

安装

您可以通过composer安装此软件包

composer require aaronbell1/laravel-csv-bulk-uploader

如果您使用的是Laravel < 5.5,您需要在config/app.php中的'providers'数组中添加以下内容

    Aaronbell1/LaravelCsvBulkUploader/LaravelCsvBulkUploaderServiceProvider::class,

创建批量上传器

要从命令行创建新的上传器,请输入以下内容:

php artisan make:uploader {name}

其中{name}是类名,例如'UserBulkUploader'

这将在app/Uploaders文件夹内生成类。

您需要在类中实现以下三个方法

rules

rules()方法表示验证规则,如Laravel表单请求

此方法必须返回一个数组,其中包含CSV数据单行所需的规则。字段名称表示为列标题的小写和下划线版本,例如User first name将表示为user_first_name

例如

return [
    'firstname' => 'required',
    'email'     => 'required|email',
    'age'       => 'integer|min:18'
];

messages

messages()方法表示验证规则消息,如Laravel表单请求错误消息

例如,您可以使用以下方法覆盖上述消息之一

return [
    'firstname.required' => 'User first name is required.',
    'age.min'            => 'User age must be at least 18.'
];

saveRow

saveRow()方法用于定义如何处理从CSV返回的每一行数据。

数据作为具有通过列标题转换为小写并添加下划线的键的数组传递。

例如,使用上面的验证,您可以使用以下方式访问每一行数据

$name = $row['firstname'];
$email = $row['email'];

使用方法

为了使用此软件包,您必须确保您使用的是具有包含每列唯一名称的标题行的.csv文件。

在需要使用批量上传器的控制器中,您可以注入类的实例

protected $userUploader;

public function __construct(UserBulkUploader $userUploader)
{
    $this->userUploader = $userUploader;
}

或创建一个新的实例

public function store()
{
    $userUploader = new UserBulkUploader;
}

上传器实例有以下方法

load

load()方法接受您正在工作的CSV文件的路径。

public function store()
{
    $userUploader = new UserBulkUploader;
    $userUploader->load('/path/to/file.csv'); 
}

isValid

isValid()方法将使用批量上传器上定义的规则检查CSV是否包含有效数据。

这将返回一个布尔值。

public function store()
{
    $userUploader = new UserBulkUploader;
    $userUploader->load('/path/to/file.csv');
    $isValid = $userUploader->isValid();
    
    if($isValid) {
      // success
    } else {
      // failure
    }
}

如果数据无效,您可以轻松地将错误重定向回显示给用户,如您所需要的那样。

save

save()方法将使用在批量上传器上定义的saveRow()方法处理数据。

这是一个数据库事务,如果在处理过程中遇到任何错误,它将回滚事务并抛出适当的异常,否则如果成功,它将提交。

public function store()
{
    $userUploader = new UserBulkUploader;
    $userUploader->load('/path/to/file.csv');
    $isValid = $userUploader->isValid();
    
    if($isValid) {
      $userUploader->save();
    } else {
      // failure
    }
}

redirectWithErrors

《redirectWithErrors()`方法将使用Laravel 重定向将用户重定向回上一个页面,并携带会话中存储的任何错误。

该方法接受数据数组的名称,默认为data

您可以使用会话辅助器在 blade 文件中使用这些错误。

// Controller.php
public function store()
{
    $userUploader = new UserBulkUploader;
    $userUploader->load('/path/to/file.csv');
    $isValid = $userUploader->isValid();
    
    if($isValid) {
      $userUploader->save();
    } else {
      return $userUploader->redirectWithErrors('users');
    }
}
// View.blade.php

// ERROR MESSAGES
@if ($errors->any())
    <div class="alert alert-danger">
        @foreach ($errors->unique() as $error)
            <li>{{ $error }}</li>
        @endforeach
    </div>
@endif

// USERS WITH ERRORS
@foreach(session('users') as $key => $user)
    <li>{{ $user['firstname'] }}</li>
@endforeach