Управление пакетами в Laravel

Управление пакетами в Laravel

От автора: в этой статье мы рассмотрим , как управляются в Laravel пакеты. В ходе статьи мы рассмотрим реальный пример, чтобы продемонстрировать цель статьи. Управление пакетами в Laravel — важная функция, которая позволяет объединить и распределить функциональность. Кроме того, можно опубликовать свой пакет в хранилищах вроде Packagist и GitHub, это позволит другим разработчикам извлечь пользу из вашего пакета.

Чтобы продемонстрировать концепцию, для примера мы создадим страницу в Laravel, которая загружает изображение в облако Amazon S3. Вместо того чтобы идти с обычным потоком, мы разработаем его как пакет, который можно легко распределять и поддерживать.

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

Кроме того, вам необходимо иметь действительную учетную запись AWS и учетные данные для доступа к API Amazon, чтобы следовать вместе с примером в этой статье. Итак, убедитесь, что всё это у вас есть. Теперь мы готовы погрузиться в изучение.

Настройка файлов пакетов

Давайте быстро рассмотрим список файлов, которые мы будем внедрять на протяжении всего урока.

Бесплатный курс «Laravel + Angular. Быстрый старт»

Изучите курс и узнайте, как создать веб-приложение с нуля на Angular и Laravel

Получить курс

composer.json: Нам нужно добавить сопоставление классов нашего пакета в существующий composer.json файл в корневом каталоге.

config/app.php: Это существующий файл, который мы будем использовать для добавления записи нашего пользовательского поставщика услуг, чтобы загружать представления и маршруты с использованием этого файла.

composer.json: Это пакетный composer.jsonфайл, если вы хотите распространять пакет вместе с другими.

packages/envato/aws/src/Providers/AwsServiceProvider.php: Обычный файл поставщика услуг Laravel, который будет использоваться для загрузки других компонентов пакета.

packages/envato/aws/src/routes/web.php: Загружает пользовательские маршруты пакета.

packages/envato/aws/src/Controllers/AwsController.php: Это файл контроллера, который обрабатывает логику приложения пакета.

packages/envato/aws/src/views/upload.blade.php: Файл представления, который обрабатывает логику рендеринга.

Не волнуйтесь, если это не имеет для вас особого смысла, поскольку мы ещё всё это подробно обсудим. Как мы обсуждали ранее, наш пакет реализует процесс загрузки файлов в облако Amazon S3. В этом разделе мы рассмотрим предварительные условия, которые необходимо настроить для успешного запуска нашего пакета.

Как разработчик, вы должны быть знакомы с Flysystem, которая обеспечивает хороший уровень абстракции для взаимодействия с файловой системой. Он предоставляет простые в использовании драйверы, чтобы вы могли легко взаимодействовать с ним независимо от типа файловой системы, с которой вы имеете дело: либо это локальная файловая система, либо облачная система AWS S3.

Чтобы включить поддержку облачной файловой системы Amazon S3 с помощью Flysystem, вам необходимо установить соответствующий пакет адаптер.

Для запуска пакета flysystem-aws-s3-v3 выполните команду компилятора из корневого каталога проекта.

После успешного выполнения этой команды теперь вы можете использовать Laravel Flysystem для взаимодействия с облачной файловой системой Amazon S3 так же, как вы использовали бы ее для локальной файловой системы.

Теперь давайте быстро потянем за config/filesystems.php файл, чтобы увидеть настройки, предоставленные для файловой системы Amazon S3.

Как вы можете видеть, конфигурация уже установлена для Amazon S3; просто нужно установить соответствующие ENV переменные в .env файл.

Идем дальше и добавляем в .env файл следующие переменные.

Конечно, нужно заменить заполнители их фактическими значениями. Теперь можно использовать адаптер Flysystem AWS S3 в своем приложении Laravel.

Переход через файлы пакета

Чтобы создать свой собственный пакет Laravel, нужно создать соответствующую структуру каталогов, которая соответствует соглашениям системы Laravel. Я предполагаю, что вы уже используете базовое приложение Laravel; потому что приложение по умолчанию для блога тоже будет работать.

Идем дальше и создаем каталог packages в корне вашего приложения. Учитывая, что мы планируем распространять свой пакет с другими, предпочтительная структура пакета должна быть {vendor_name}/{package_name}.

Следуя этому соглашению, создадим envato/aws каталог под каталогом packages. Как вы, возможно, догадались, envato это имя поставщика и aws обозначает название пакета. Наконец, создадим каталог packages/envato/aws/src, содержащий исходные файлы нашего пакета.

Теперь нам нужно сообщить Laravel о нашем новом пакете. Открываем файл composer.json в корне приложения Laravel и добавляем запись «Envato\\Aws\\»: «packages/envato/aws/src» в раздел автозагрузки, как показано ниже.

Как можно увидеть, пространство имен Envato\Aws\ отображается в packages/envato/aws/srcкаталог. Теперь нам просто нужно запустить команду dump-autoload для восстановления композиционных сопоставлений.

Теперь вы можете использовать пространство имен Envato\Aws\ в своем приложении, и оно подберет файлы из правильного местоположения!

Файл композиции пакета

Теперь давайте добавим специфичный для пакета файл composer.json, чтобы была возможность распространять свой пакет в репозитории packagist. Перейдите в packages/envato/aws каталог и выполните следующую команду для создания composer.json файла.

Вам будут заданы обычные вопросы, просто пройдите их, и файл composer.json будет создан. Он должен выглядеть примерно так.

Маршрут

В пакете мы создадим простую страницу, отображающую статус загруженного файла. Поэтому нам нужно создать маршрут, связанный с этой страницей. Давайте создадим файл маршрута в packages/envato/aws/src/routes/web.php.

Бесплатный курс «Laravel + Angular. Быстрый старт»

Изучите курс и узнайте, как создать веб-приложение с нуля на Angular и Laravel

Получить курс

Требуется ли здесь вообще какое-либо объяснение? Очевидным следующим шагом является создание связанного файла контроллера.

Контроллер

Давайте создадим файл контроллера packages/envato/aws/src/Controllers/AwsController.phpсо следующим содержимым.

Давайте рассмотрим файл, чтобы понять, для чего предназначен каждый фрагмент кода. Мы запускаем вещи, устанавливая пространство имен нашего контроллера в пространство имен Envato\Aws\Controllers. Напомним, что мы добавили отображение Envato\Awsв packages/envato/aws/srcв корневой composer.json файл, чтобы он мог найти наши файлы пакета.

Затем определяем upload метод, который требует синхронизации локальных файлов с облаком Amazon S3. Важно отметить здесь первый аргумент метода загрузки, который запрашивает \Illuminate\Contracts\Filesystem\Factory зависимость. Во время исполнения будет заключен соответствующий контракт с Laravel.

Теперь мы можем использовать экземпляр factory файловой системы для создания экземпляров диска по мере необходимости. Экземпляр диска в Laravel-это драйвер, который позволяет вам легко обращаться к базовым файловым системам, таким как локальный диск, облако Amazon S3 и тому подобное.

Для упрощения мы передадим статический файл изображения, который уже доступен в локальном хранилище Laravel по умолчанию, и путь storage/app/test.jpg. Давайте возьмем содержимое исходного файла в качестве первого шага.

Вы должны иметь возможность синхронизировать файл с Amazon S3 с помощью метода put.

Убедитесь, что вы правильно настроили переменные среды AWS, в том случае, если что-то не работает должным образом. И последнее — вызвать файл представления, в котором отображается синхронизированное изображение и соответствующее сообщение.

Конечно, мы еще не создали файл представления, и именно о нём пойдет речь в следующем разделе.

Представление

Давайте создадим файл вида packages/envato/aws/src/views/upload.blade.php со следующим содержимым.

Это довольно стандартный файл представления, который отображает загруженное изображение при успешной загрузке или соответствующее сообщение об ошибке.

Поставщик услуг

Мы почти закончили с нашим пакетом, так как мы создали необходимые файлы. Следующим шагом будет создание поставщика услуг, чтобы мы могли регистрировать маршруты и представления нашего пакета.

Давайте создадим файл поставщика услуг packages/envato/aws/src/Providers/AwsServiceProvider.php со следующим содержимым.

Очевидно, что вы могли бы создать файл поставщика услуг, используя команду artisan. Но это потребовало бы дополнительного шага перемещения файла из app/Providers в наш пакет.

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

Затем мы предлагаем поддержку публикации представлений наших пакетов, чтобы разработчики, которые хотят переопределить представления, могли это сделать. В следующий раз, когда они запустили команду php artisan vendor:publish, Laravel скопировал представления из packages/envato/aws/src/views/в resources/views/vendor/aws.

Теперь они могут изменять представления под resources/views/vendor/aws каталогом, и он будет автоматически выбран Laravel вместо представлений packages/envato/aws/src/views/. Фактически, это более правильный способ изменения сторонних представлений пакетов, нежели прямое изменение пакетов. Что касается поставщика услуг, нам нужно добавить config/app.php. Добавьте в providers массив следующую запись.

Всё готово. Теперь мы можем проверить наш пакет.

Запустите URL- адрес http: // your-laravel-application / aws / s3 / upload в своем браузере. Если все сделано правильно, вы должны увидеть изображение, загруженное из облака Amazon S3, на своей странице. Пожалуйста, дайте мне знать, если у вас возникнут какие-либо проблемы, я буду более чем счастлив разобраться с ними.

Итак, мы находимся в заключительной части этой статьи, и я надеюсь, вам понравилось!

Заключение

Сегодня мы обсудили одну из важных особенностей управления базой данных Laravel. В процессе создания нашего индивидуального пакета Laravel мы рассмотрели пример реального мира, который продемонстрировал, как вы можете загрузить изображение в облако Amazon S3.

Это действительно полезная функция, если вы хотите объединить и распределить набор функций вместе. Фактически, вы можете посмотреть на это как на подход к разработке пользовательских модулей в Laravel.

Автор: Sajal Soni

Источник: //code.tutsplus.com/

Редакция: Команда webformyself.

Бесплатный курс «Laravel + Angular. Быстрый старт»

Изучите курс и узнайте, как создать веб-приложение с нуля на Angular и Laravel

Получить курс

Хотите узнать, что необходимо для создания сайта?

Посмотрите видео и узнайте пошаговый план по созданию сайта с нуля!

Смотреть

Метки:

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

Комментарии Вконтакте: