Урок 18: Пакеты и Composer в Laravel

На 18-ом уроке мы погрузимся в мир пакетов и Composer, ключевых инструментов для расширения возможностей вашего Laravel-приложения. Вы узнаете, как устанавливать сторонние решения, создавать свои собственные пакеты и управлять их конфигурациями.

Что такое Composer?

Composer это менеджер зависимостей для PHP. Представьте, что вы строите дом. Вместо того чтобы создавать каждую деталь с нуля (кирпичи, окна, двери), вы можете использовать готовые компоненты. Composer делает то же самое для вашего кода: он автоматизирует установку и обновление библиотек (пакетов), которые добавляют новые функции в проект.

Laravel тесно интегрирован с Composer. Например, сам фреймворк состоит из набора пакетов, которые вы уже используете. Сегодня мы научимся подключать дополнительные.

Установка пакетов через Composer

Шаг 1: Поиск пакетов

Пакеты хранятся на Packagist.org. Например, если вам нужно работать с Excel-файлами, введите в поиск «laravel excel».

Шаг 2: Установка

Допустим, мы хотим установить пакет maatwebsite/excel. Откройте терминал в корне проекта и выполните:

bash
composer require maatwebsite/excel

Composer автоматически:

  1. Скачает пакет и его зависимости.
  2. Обновит файл composer.json.
  3. Сгенерирует composer.lock для фиксации версий.

Шаг 3: Настройка (если требуется)

Некоторые пакеты требуют дополнительных действий: публикации конфигов, регистрации сервис-провайдеров. Инструкции обычно есть в документации пакета.

Примеры популярных пакетов

1. Laravel Excel (maatwebsite/excel)

Для чего: Импорт/экспорт данных в Excel, CSV.

Пример использования:

php
use Maatwebsite\Excel\Facades\Excel;
use App\Exports\UsersExport;

// Экспорт данных в файл
public function export() 
{
    return Excel::download(new UsersExport, 'users.xlsx');
}

Создайте класс UsersExport:

bash
php artisan make:export UsersExport --model=User

2. Laravel Debugbar (barryvdh/laravel-debugbar)

Для чего: Отладка приложения. Показывает запросы к БД, время выполнения, ошибки.

Установка:

bash
composer require barryvdh/laravel-debugbar --dev

Debugbar автоматически появится в режиме разработки.

Создание своего пакета

Предположим, мы хотим создать пакет для логирования пользовательских сообщений.

Шаг 1: Структура папок

Создайте директорию packages/max/logging в корне проекта:

packages/
└── max/
    └── logging/
        ├── src/
        │   ├── LoggingService.php
        │   └── LoggingServiceProvider.php
        └── composer.json

Шаг 2: composer.json

json
{
    "name": "max/logging",
    "description": "Custom logging package",
    "autoload": {
        "psr-4": {
            "Max\\Logging\\": "src/"
        }
    },
    "extra": {
        "laravel": {
            "providers": [
                "Max\\Logging\\LoggingServiceProvider"
            ]
        }
    }
}

Шаг 3: Сервис-провайдер

LoggingServiceProvider.php:

php
namespace Max\Logging;

use Illuminate\Support\ServiceProvider;

class LoggingServiceProvider extends ServiceProvider
{
    public function register()
    {
        $this->app->singleton('custom-log', function () {
            return new LoggingService();
        });
    }
}

Шаг 4: Подключение пакета в проект

В composer.json вашего приложения добавьте:

json
"autoload": {
    "psr-4": {
        "App\\": "app/",
        "Max\\Logging\\": "packages/max/logging/src/"
    }
}

Выполните:

bash
composer dump-autoload

Теперь пакет готов к использованию!

Публикация конфигов пакетов

Добавим конфигурационный файл в наш пакет.

Шаг 1: Создание конфига

В packages/max/logging/src/config/logging.php:

php
return [
    'enabled' => env('LOGGING_ENABLED', true),
    'path' => storage_path('logs/custom.log'),
];

Шаг 2: Регистрация конфига в сервис-провайдере

В LoggingServiceProvider.php:

php
public function boot()
{
    $this->publishes([
        __DIR__.'/config/logging.php' => config_path('custom-logging.php'),
    ]);
}

Шаг 3: Публикация

Выполните в терминале:

bash
php artisan vendor:publish --provider="Max\Logging\LoggingServiceProvider"

Теперь файл config/custom-logging.php доступен для редактирования.

Практические задачи

  1. Установите Laravel Excel и экспортируйте список пользователей в формате CSV.
  2. Подключите Laravel Debugbar и проанализируйте количество SQL-запросов на странице.
  3. Создайте свой пакет для отправки SMS (можно использовать заглушки) и опубликуйте его конфиг.

Пример кода: Пакет для SMS

SmsService.php:

php
namespace Max\Sms;

class SmsService
{
    protected $config;

    public function __construct($config)
    {
        $this->config = $config;
    }

    public function send($phone, $message)
    {
        // Заглушка для отправки SMS
        logger("SMS to {$phone}: {$message}");
    }
}

Использование в контроллере:

php
$sms = app('custom-sms');
$sms->send('+71234567890', 'Ваш код: 1234');

Итоги 18-го урока

Пакеты это суперсила в Laravel. Они экономят ваше время, позволяя использовать готовые решения и делиться своим кодом с сообществом.

Если вы хотите глубже изучить Laravel, присоединяйтесь к полному курсу по ссылке: Laravel для начинающих