aaronbell1 / laravel-csv-bulk-uploader
Requires
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