Разработка пакета (package) для Laravel 4.2

Категория: Laravel

Пакет может регистрировать несколько сервис-провайдеров.

Для начала нам понадобится чистая установка фреймворка Laravel 4.2 (так удобней):

composer create-project laravel/laravel NEW-EMPTY-DIR-NAME 4.2 --prefer-dist

Пропишите правило определения локального окружения (имя хоста) и укажите ваши name и email как разработчика пакета в файле app/config/local/workbench.php.

Генерация базовой структуры нового пакета в каталоге workbench/ (будет создан, если не существует):

php artisan workbench vendor/package --resources

Параметр --resources указывает, что для нового пакета нужно генерировать дополнительные каталоги для конфигов, контроллеров, моделей, миграций, assets-файлов..

Примечание

Если в workbench конфиге вашего проекта не указаны name и email разработчика - вы получите исключение:

[Composer\Json\JsonValidationException]
 "./composer.json" does not match the expected JSON schema:
 - authors[0].email : Invalid email

Заготовка для нового пакета все же будет сгенерирована, но зависимость illuminate/support не будет загружена в каталог с новым пакетом!

Примечание

При генерации пакета впервые, в момент загрузки зависимости illuminate/support, вы можете получить запрос:

Could not fetch https://api.github.com/repos/illuminate/support/zipball/db61f3f6d507ce417ca993e1f93585db7efd8b12, enter your GitHub credentials to go over the API rate limit
A token will be created and stored in "/home/stas/.composer/auth.json", your password will never be stored
To revoke access to this token you can visit https://github.com/settings/applications

Просто укажите ваш логин/пароль чтобы сгенерить токен для последующего доступа к API GitHub.

Примечание

Laravel автоматически проверяет папку workbench/ на наличие пакетов, загружая их файлы при запуске приложения.

Подключите класс сервис-провайдера %Vendor%\%Package%\%Package%ServiceProvider в секции providers конфига app/config/app.php.

Сгенерируйте повторно файлы автозагрузки:

php artisan dump-autoload

Сервис-провайдер пакета - это класс первичной инициализации пакета, в котором вы можете делать все, что нужно - регистрировать другие сервисы в IoC контейнере, подключать файлы с маршрутами, задавать обработчики событий. Подробнее смотрите в статье «Сервис-провайдеры в Laravel 4.2».

<?php

namespace MyVendorName\MyPackage;
use Illuminate\Support\ServiceProvider; class MyPackageServiceProvider extends ServiceProvider { /** * Отложенная загрузка сервисов этого провайдера (по запросу сервиса из IoC контейнера). * Сервис-провайдер будет зарегистрирован при обращении к одному из предоставляемых пакетом сервисов, см. provides() */ protected $defer = false; /** * Регистрируем пакет. Задаем настройки пакета для получения ресурсов (конфиги, шаблоны) */ public function boot() { // Настройки пакета для доступа к его ресурсам $this->package('MyVendorName/MyPackage', 'my-package'); // default resource namespace: MyPackage // Пример доступа к ресурсам: $template = View::make('my-package::directory.some-template'); $cfgValue = Config::get('my-package::cfg_key'); } public function register() { // Регистрируем нужные нам сервисы, см. http://onedev.net/post/539 } }

#package, #service providers, #plugin

категория: Laravel