Advertisement
  1. Code
  2. Laravel 5

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

Scroll to top
Read Time: 9 min

Russian (Pусский) translation by Masha Kolesnikova (you can also view the original English article)

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

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

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

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

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

Имея все это под рукой мы готовы погрузиться в реальную разработку.

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

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

  • 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: файл представления, который обрабатывает логику рендеринга.

Не волнуйтесь, если это не имеет особого смысла, поскольку мы подробно обсудим все, когда мы пройдем через это.

Настройка предварительных условий

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

Как разработчик Laravel, вы должны быть знакомы с 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.

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

Контроллер

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

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

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

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

Теперь мы можем использовать экземпляр фабрики файловой системы для создания экземпляров диска по мере необходимости. Экземпляр диска в 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.

Для тех из вас, кто только начинает работать с Laravel или хочет расширить свои знания, сайт или приложение с расширениями, у нас есть множество вещей, которые вы можете изучить на Envato Market.

Как всегда, вы можете оставить свои ценные комментарии и отзывы в ленте ниже!

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.