Создание пакета для Laravel

Ромчик
0

Создание пакета для Laravel

Доброго времени суток. В одной из статей «Реализация модульной структуры в Laravel» мы с вами реализовали модульную систему в Laravel. А в данной статье давайте весь наш код оформим в пакет для Laravel. Затем опубликуем пакет на github и зарегистрируем на packagist. После этого мы сможем с помощью composer устанавливать наш пакет в любом проекте Laravel.

У нас есть реализованный функционал, который позволяет нам использовать модульную структуру в Laravel. Напомню. В папке app есть папка Modules, где находится сервис-провайдер ModulesServiceProvider.php, а также папки с модулями. Также в папке с конфигурационными файлами находится файл конфигурации module.php, где хранятся подключаемые модули и их настройки. Ок. Давайте весь этот функционал перенесем в пакет.

Создаем репазиторий Composer

Давайте создадим локальный репазиторий composer (пока локальный). В корне нашего проекта создадим папку packages, в которой создадим папку zloykolobok (это будет имя вендора), и уже в папке zloykolobok создадим папку нашего пакета modules.

Папка для пакета

Теперь в консоли переходим в папку packages/zloykolobok/modules. И инициализируем репазиторий composer


composer init

Создание локального репазитория для Composer

Дальше нам необходимо ввести:

  • Название пакета, в формате <вендор>/<название>
  • Описание пакета
  • Автор, в формате John Smith john@example.com
  • Minimum Stability указываем dev
  • Package Type оставляем пустым
  • License []: ставим MIT
  • Затем определяем зависимости, у нас их нет, поэтому ставим no
  • Подтверждаем

Отлично, у нас появился composer.json

файл конфигурации репазитория Composer

Открываем на редактирование composer.json. И первое, что нам необходимо сделать это добавить версию:


…

"version": "1.0.0",

…

Второе добавляем автозагрузку:


…
"autoload": {
    "psr-4": {
        "Zloykolobok\\Modules\\": ""
    }
…

Отлично мы с вами создали локальный репазиторий composer. Да, он у нас пока пустой. Дальше мы и будем его наполнять. А сейчас давайте проверим. Установим его в наш проект.

Установка локального репазитория Composer

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

Обратите внимание не в папке packages/zloykolobok/modules, а именно в корне проекта. В моем случае это e:\OpenServer\domains\module.loc

И добавляем:


…
"repositories": [
    {
        "type": "path",
        "url": "packages/zloykolobok/modules/"
    }
],
…

Теперь включаем пакет в список зависимостей «zloykolobok/modules»: «*» И обновляем composer. Для этого переходим в корень нашего проекта и запускаем команду:


composer update

Обновление зависимостей Composer

Отлично пакет установлен.

И если, мы перейдем в vendor, то у нас есть папка zloykolobok, а в ней ссылка на modules (ссылка, т.к. у нас данный пакет расположен локально)

Теперь приступим к наполнению нашего пакета.

Создание пакета для Laravel

Первое перенесем сервис-провайдер ModulesServiceProvider.php в наш пакет packages/zloykolobok/modules

И откроем его на редактирование.

Меняем namespace на Zloykolobok\Modules

Добавим переменную


…
$dir = app_path().'/Modules';
…

 

и заменим __DIR__ на $dir.

Зарегистрируем конфигурацию


…
$this->mergeConfigFrom(__DIR__ . '/config/module.php', 'module');
…

указываем откуда и куда.

И делаем нашу конфигурацию для модуля публикуемой, добавляем:


…
$this->publishes([
    __DIR__.'/config' => base_path('config'),
]);
…

 

Вот в принципе и все. Листинг нашего сервис-провайдера:


<?php 
    namespace Zloykolobok\Modules; 
    /** 
    * Сервис провайдер для подключения модулей 
    */ 
    class ModulesServiceProvider extends \Illuminate\Support\ServiceProvider 
    { 
        public function boot() 
        { 
            //регистрируем конфиг 
            $this->mergeConfigFrom(__DIR__ . '/config/module.php', 'module');
            $this->publishes([
                __DIR__.'/config' => base_path('config'),
            ]);
            $modules = config("module.modules");
            $dir = app_path().'/Modules';
            // dd($dir);
            if($modules) {
                while (list(,$module) = each($modules)){
                    // dd(file_exists($dir.'/'.$module.'/Routes/routes.php'));
                    //Подключаем роуты для модуля
                    if(file_exists($dir.'/'.$module.'/Routes/routes.php')) {
                        $this->loadRoutesFrom($dir.'/'.$module.'/Routes/routes.php');
                    }
                    //Загружаем View
                    //view('test::admin')
                    if(is_dir($dir.'/'.$module.'/Views')) {
                        $this->loadViewsFrom($dir.'/'.$module.'/Views', $module);
                    }
                    //Подгружаем миграции
                    if(is_dir($dir.'/'.$module.'/Migration')) {
                        $this->loadMigrationsFrom($dir.'/'.$module.'/Migration');
                    }
                    //Подгружаем переводы
                    //trans('test::messages.welcome')
                    if(is_dir($dir.'/'.$module.'/Lang')) {
                        $this->loadTranslationsFrom($dir.'/'.$module.'/Lang', $module);
                    }
                }
            }
        }

         public function register() 
         {
         }
    } 

Все файлы вы можете найти на github
Теперь осталось только подключить этот сервис-провайдер к Laravel. Для этого открываем на редактирование файл config/app.php

И в разделе «Providers» добавляем


…
Zloykolobok\Modules\ModulesServiceProvider::class,
…

Все. Теперь наш пакет необходимо выложить на github.

Создание репазитория на github.

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

Переходим в консоли в корень нашего пакета (в моем случае packages/zloykolobok/modules) и выполняем команду, для создание git репазитория


git init

Дальше добавляем наши файлы под версионный контроль выполняем:


git add *

Теперь необходимо закомитеть наши файлы:


git commit -m "Modular system in Laravel"

Следующим шагом подключаем удаленный репазиторий на github


git remote add origin git@github.com:zloykolobok/modules.git

Учтите, что адрес у вас будет другой

Все репазиторий подключен. Теперь мы можем запушить (выложить) наш репазиторий на github:


git push -u origin master

Заливаем пакет на github

Все наш пакет на гите.

Пакет для Laravel на github

Супер. Теперь нам необходимо зарегистрировать наш проект на packagist.org, чтобы composer знал о нашем пакете.

Регистрация пакета на packagist

Переходим packagist.org и входим в наш аккаунт. Жмем «Submit» и добавляем ссылку на git-репазиторий

Регистрация пакета в packagist

Жмем «Check». Еще раз подтверждаем и все наш пакет зарегистрирован на packagist.

Пакет в каталоге packagist

Отлично теперь мы можем проверить.

Установка нового пакета Laravel через composer.

Удаляем из composer.json нашего проекта локальный репазиторий, убираем  зависимость «zloykolobok/modules»: «*»

Запускаем команду в консоли, находясь в корне нашего проекта


composer update

Пакет удален.

Удаляем файл конфигураций module.php из папки config.

И убираем из config/app.php (давайте просто закоментируем)


…

Zloykolobok\Modules\ModulesServiceProvider::class,

…

Все.

Теперь давайте установим наш пакет с помощью composer (уже не из локального репазитория)

Добавим зависимость в composer.json нвшего проекта


…

"zloykolobok/modules": "dev-master"

…

Ок. И теперь через консоль, находясь в корне нашего проекта запускаем команду


composer update

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

Вуаля, пакет скачался и установился.

Теперь нам необходимо опубликовать наш файл конфигурации. Тут нам поможет artisan. Выполняем команду:


php artisan vendor:publish

Публикация файла конфигурации

Все файл конфигураций для модулей в Laravel скопирован.

Отредактируем наш файл конфигураций (добавим модуль Test) и проверим. Все работает..

Заключение.

В этой статье мы с вами вынесли функционал реализации модульной системы в Laravel в отдельный пакет. Затем этот пакет опубликовали на github и зарегистрировали на packagist. Теперь в любом проекте на Laravel мы можем использовать модульную систему в Laravel установив пакет zloykolobok/modules с помощью composer.

Чтобы не пропустить выхода новых статей подписываемя: VK, twitter, facebook. И канал на youtube
Понравилась статья? Поделись с друзьями.
  • Add to favorites
  • Добавить ВКонтакте заметку об этой странице
  • Twitter
  • Facebook
  • Мой Мир
  • LiveJournal
  • Одноклассники
  • Блог Я.ру
  • MySpace
  • FriendFeed
  • В закладки Google
  • Google Buzz
  • Яндекс.Закладки
  • Reddit
  • StumbleUpon
  • Technorati
  • del.icio.us
  • БобрДобр
  • LinkedIn
  • Memori.ru
  • Сто закладок
  • Blogger
©2012-2017 По всем вопросам обращайтесь через форму обратной связи

Яндекс.Метрика