Вы можете подойти к нему, создав макрос объекта Request, чтобы превратить CSV в массив, а затем использовать промежуточное ПО для анализа входящего запроса, если это CSV-файл, и слияния его с входящим запросом.Тогда проверка вашего приложения может проверить его с помощью проверки массива.
Начните с того, что заставите поставщика услуг разместить ваш макрос запроса:
php artisan make:provider RequestMacroParseCsvProvider
Затем в поставщике услуг:
Добавьте это вверху, чтобы получить класс запросов:
use Illuminate\Http\Request;
Внутри метода регистра провайдера:
Request::macro('parseCsv', function ($fileNameKey) {
// Note: while working inside of the request macro closure, you can access the request object by referencing $this->{key_of_request_item}
// You will be running your parser against $fileNameKey which will be the key of the request file coming in. So you'd access it like:
if ($this->hasFile($fileNameKey)) {
// Your code to parse the csv would go here. Instantiate your csv parsing class or whatever...
// $file = $this->file($fileNameKey);
// Store the parsed csv in an array, maybe named $parsedCsv?
}
return empty($parsedCsv) ? [] : $parsedCsv;
});
Зарегистрируйте поставщика услуг в своем config/app.php
App\Providers\RequestMacroParseCsvProvider::class,
Создайте промежуточное ПО для проверки, содержит ли входящий запрос csv
php artisan make:middleware MergeCsvArrayIntoRequest
В методе handle
:
if ($request->has('your_csv_request_key)) {
$parsedCsv = $request->parseCsv('your_csv_request_key');
// Then add it into the request with a key of 'parsedCsv' or whatever you want to call it
$request->merge(['parsedCsv' => $parsedCsv]);
}
return $next($request);
Зарегистрируйте ваше промежуточное ПО в app/Http/Kernel.php
:
protected $middleware = [
...
\App\Http\Middleware\MergeCsvArrayIntoRequest::class,
...
];
Или введите его в $routeMiddleware
, если вы не хотитебыть глобальным.
'parse.csv' => \App\Http\Middleware\MergeCsvArrayIntoRequest::class,
Теперь ваше промежуточное ПО перехватывает и конвертирует любые загруженные вами CSV-файлы, и вы можете проверить parsedCsv
ключ запроса с помощью проверки массива Laravel .
Вы можете сделать некоторые улучшения, чтобы сделать его более гибким, если хотите.Я сделал нечто похожее, но не совсем связанное с файлами, в другом проекте, где мне нужно было изменить запрос, прежде чем он добрался до проверки моего контроллера, и он заработал.
Надеюсь, это поможет.