نمونه ای سریع از کدی که اخیراً مجبور به نوشتن آن شدم. کار ساده است – CSV را بارگذاری کرده و تجزیه کنید. همچنین آن پرونده و رکورد را ذخیره کنید ، کدام کاربر آن را بارگذاری کرده است. بیا یک نگاهی بیندازیم.
در اینجا کد روش Controller وجود دارد ، من آن را ذره ذره توضیح می دهم:
public function importProcess(UploadImportModelRequest $request)
{
$originalFile = $request->file('import_file');
$import = Import::create([
'filename' => $originalFile->getClientOriginalName(),
'user_id' => auth()->id(),
]);
$file = $import->addMediaFromRequest('import_file')
->toMediaCollection('imports');
$filename = storage_path('app/' . $file->id . '/' . $file->file_name);
$reader = new SpreadsheetReader($filename);
foreach ($reader as $row) {
// Parsing the rows...
}
}
توضیح 1. فرم اعتبار سنجی درخواست
کلاس را ببینید UploadImportModelRequest در پارامترها؟ این فقط به ما کمک می کند که پرونده موجود را تأیید کنیم و در واقع CSV یا TXT است.
app / Http / Requests / UploadImportModelRequest.php:
class UploadImportModelRequest extends FormRequest
{
public function authorize()
{
return true;
}
public function rules()
{
return [
'import_file' => [
'required',
'file',
'mimes:csv,txt'
],
];
}
}
درباره قوانین تأیید پرونده بیشتر بخوانید در این مقاله.
توضیح 2. بارگذاری پرونده با Laravel MediaLibrary
این بسته احتمالاً محبوب ترین مورد برای بارگذاری پرونده در لاراول است ، و دلیل آن هم همین است – شما می توانید کارهای زیادی را در چند خط کد انجام دهید.
اما ابتدا باید رکورد واردات واقعاً ذخیره شده را ذخیره کرده و شی object مدل Eloquent را برای آن بدست آوریم:
$originalFile = $request->file('import_file');
$import = Import::create([
'filename' => $originalFile->getClientOriginalName(),
'user_id' => auth()->id(),
]);
بنابراین ما ذخیره می کنیم اصلی نام پرونده ، هرچه باشد ، مانند “ساخت تست ساختگی. csv” یا چیزی شبیه به آن. به زودی من به شما نشان خواهم داد که چرا “اصلی” مهم است.
نتیجه پرسش Eloquent این است واردات $ شی ، و این همان جایی است که Laravel MediaLibrary مفید است – در یک خط کد ما می توانیم پرونده را در یک پوشه ذخیره کنیم ، و همچنین آن پرونده را به آن اختصاص دهیم واردات $ هدف – شی:
$file = $import->addMediaFromRequest('import_file')
->toMediaCollection('imports');
نتیجه این امر:
- رکورد جدید DB ذخیره شده در جدول “رسانه” با نام پرونده و ارتباط با آن واردات $ هدف – شی؛
- یک پوشه ایجاد شده در ذخیره سازی / برنامه پوشه ، با شناسه آن سابقه “رسانه” ؛
- درون آن پوشه جدید – پرونده بارگذاری ذخیره شده است.
- آن شی ضبط “رسانه” به داخل برگردانده می شود پرونده $.
توضیح 3. دریافت نام فایل REAL و تجزیه CSV
نکته مهم این است که Laravel MediaLibrary در واقع نام فایل را تغییر می دهد تا “شلخته” شود ، بنابراین نام فایل واقعی با نام اصلی متفاوت است. تفاوت در نام پرونده را مشاهده کنید و در جدول DB “media” ثبت کنید:
به همین دلیل ما باید فایل CSV را با نام پرونده جدید آن که در داخل آن ذخیره شده است ، بخوانیم پرونده $ هدف – شی.
$filename = storage_path('app/' . $file->id . '/' . $file->file_name);
$reader = new SpreadsheetReader($filename);
foreach ($reader as $row) {
// Parsing the rows...
}
همانطور که مشاهده می کنید ، ما به پرونده به عنوان اشاره می کنیم ذخیره سازی/[media.id]/[media.file_name] اکنون.
در این مثال ، من تجزیه و تحلیل CSV را با جزئیات نشان نمی دهم ، زیرا بسیار فردی است ، اما توصیه می کنم از a استفاده کنید بسته صفحه خوان صفحه گسترده – کاملاً قدیمی است ، اما به دلایلی بسیار سریعتر از اکسل لاراول یا دیگران