نمونه ای سریع از کدی که اخیراً مجبور به نوشتن آن شدم. کار ساده است – 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 استفاده کنید بسته صفحه خوان صفحه گسترده – کاملاً قدیمی است ، اما به دلایلی بسیار سریعتر از اکسل لاراول یا دیگران