Я против ужасной войны! Я выражаю свой протест. Я русский. Нам всем пиздец из-за всего лишь одного человека.

Laravel Excel - Базовый экспорт

Установка Laravel Excel 3.1

Системные требования:

  • PHP: ^7.0
  • Laravel: ^5.5
  • PhpSpreadsheet: ^1.6
  • PHP extension php_zip enabled
  • PHP extension php_xml enabled
  • PHP extension php_gd2 enabled

Установка через composer. Команда установит пакет, а также PhpSpreadsheet

composer require maatwebsite/excel

Maatwebsite\Excel\ExcelServiceProvider автоматически обнаруживается (auto-discovered) и регистрируется по умолчанию

Если вы хотите зарегистрировать его самостоятельно, добавьте ServiceProvider в config/app.php
В документации описано как это сделать

Базовый экспорт за 5 минут

Чтобы создайть класс экспорта в app/Exports выполните команду artisan

Передавая параметр --model=User вы указываете, что экспорт нужно подготовить для модели User

php artisan make:export ExportBasic --model=User

Файл будут расположен так:

.
├── app
│   ├── Exports
│   │   ├── ExportBasic.php
│ 
└── composer.json

А содержание файла ExportBasic.php:

namespace App\Exports;

use App\User;
use Maatwebsite\Excel\Concerns\FromCollection;

class ExportBasic implements FromCollection
{
  /**
  * @return \Illuminate\Support\Collection
  */
  public function collection()
  {
    return User::all();
  }
}

Теперь в контроллере можно вызвать созданный экспорт:

namespace App\Http\Controllers;

use App\Exports\ExportBasic;
use Maatwebsite\Excel\Facades\Excel;

class UsersController extends Controller 
{
  public function exportBasic() 
  {
    return Excel::download(new ExportBasic, 'users-'.__FUNCTION__.'.xlsx');
  }
}

Также не забудем указать роут для экспорта:

Route::get('exportBasic', 'UsersController@exportBasic');

Дополнительные настройки экспорта

Использование шаблонизатора Blade

Вы можете определить содержание экспортируемой таблицы в шаблоне. Для этого вам понадобится создать файл resources/view/exports/users.blade.php:

  <table>
    <thead>
    <tr>
      <th>ID</th>
      <th>Имя</th>
      <th>Email</th>
    </tr>
    </thead>
    <tbody>
    @foreach($items as $item)
      <tr>
        <td>{{$item->id}}</td>
        <td>{{$item->name}}</td>
        <td>{{$item->email}}</td>
      </tr>
    @endforeach
    </tbody>
  </table>
  

Файл экспорта app/Exports/ExportBladeBasic.php

  namespace App\Exports;
  
  use App\User;
  
  // Для вывода с использованием Blade
  use Illuminate\Contracts\View\View;
  use Maatwebsite\Excel\Concerns\FromView;
  
  class ExportBladeBasic implements FromView
  {
    // Экспорт с использованием шаблонизатора Blade
    public function view(): View
    {
      $items = User::all();
      return view('exports.users', ['items' => $items]);
    }
  }
  

Метод в контроллере

  use Maatwebsite\Excel\Facades\Excel;
  use App\Exports\ExportBladeBasic;
  //..
  
  public function exportBladeBasic() 
  {
    return Excel::download(new ExportBladeBasic, 'users-'.__FUNCTION__.'.xlsx');
  }
  

Роут

Route::get('exportBladeBasic', 'UsersController@exportBladeBasic');

... Материал будет дополняться.

Комментарии (0)

  1. Напишите первый комментарий
*Комментарий будет опубликован после проверки модератором

Похожие статьи

Наш сайт использует куки, нажмите «ОК» если вы не против
OK