Пакет Laravel 5.2: создание, деплой, установка

Всем привет! Из этого урока ты узнаешь, как создать собственный пакет Laravel, загрузить его и сделать доступным для всех и как устанавливать его при помощи composer. Пакеты - это мощный инструмент создания приложений. Используя пакеты вы можете в один клик добавлять функционал, используемый регулярно.

Итак, начнём. Сперва установим Laravel.

laravel new Packages

Теперь создадим папку для пакетов в корне проекта. Назовём её packages. Внутри этой папки создадим папку поставщика/разработчика - её имя - твой ник на github. После создадим папку пакета example  и папку исходных фалов src. Кстати, чтобы лучше разобраться с политике формирования каталогов почитайте о стандартах PSR.

packages/zogxray/example/src

Создадим сервис-провайдер нашего пакета в папке src. В методе boot мы подключаем роутер и файлы шаблонов. О методе register лучше всего почитать в исходниках Alaouy/Youtube. Здесь этот метод носит декоративный характер.

namespace Zogxray\Example;

use Illuminate\Support\ServiceProvider;

class ExampleServiceProvider extends ServiceProvider {

public function boot(){

require_once __DIR__.'/Http/routes.php';

$this->loadViewsFrom(__DIR__.'/Views', 'example');

}

public function register()

{

$this->app['example'] = $this->app->share(function(){

return new Example;

});

}

}

Добавим классы пакета в автозагрузку Laravel отредактировав composer.json в секции автозагрузки.

"autoload": {

"classmap": [

"database"

],

"psr-4": {

"App\\": "app/",

"Zogxray\\Example\\": "packages/zogxray/example/src"

}

},

Обновим загруженные классы. Можно использовать команды dump-autoload и dumpautoload.

composer dumpautoload

Теперь добавим наш провайдер в массив провайдеров Laravel - это здесь config/app.php.

Zogxray\Example\ExampleServiceProvider::class,

Далее добавляем роут (src/Http/router.php), контролёр (src/Http/Controllers/ExampleController.php) и шаблон (src/Views/index.blade.php). Параметр namespace объясняет приложению где искать наш контроллер.

Route::group(['namespace'=>'Zogxray\Example\Http\Controllers', 'prefix' => 'example'], function() {

Route::get('/','ExampleController@index');

});

А вот контроллер. Обратите внимание на пространство имён контроллера и пространство имён при вызове шаблона, которое мы регистрировали в методе boot сервис-провайдера.

namespace Zogxray\Example\Http\Controllers;

use Illuminate\Routing\Controller;

class ExampleController extends Controller {

public function index() {

return view('example::index');

}

}

Ну и шаблон сделаем простой:

<h1>Laravel Example Package</h1>

Окей. Теперь наш пакет работает и выводит «Laravel Example Package» по сслыке http://sitename/example.

Удивим мир этим чудесным функционалом. В терминале перейдём в папку пакета packages/zogxray/example/ и выполним команду composer init

После заполнения полей и небольшого редактирования файл должен выглядеть так:

{

"name": "zogxray/example",

"description": "Laravel Example Package",

"keywords":["laravel","demo"],

"license": "MIT",

"authors": [

{

"name": "Viktor Pavlov",

"email": "zogxray@gmail.com"

}

],

"minimum-stability": "dev",

"require": {},

"autoload": {

"psr-4": {

"Zogxray\\Example\\": "src/"

}

}

}


Теперь создаём репозиторий GitHub, загружаем наш пакет, а после регистрируем этот репозиторий на сайте Packagist.

git initgit add .git commit -m "First commit"git remote add origin git@github.com:zogxray/laravel-example-package.gitgit push -u origin mastergit tag -a 1.0.0 -m “First version”git push --tags

Отлично. Теперь в любой проект на Laravel мы можем добавить наш пакет при помощи одной команды.

composer require zogxray/example

Laravel 5.2 Laravel Видеоурок