Может войдёшь?
Черновики Написать статью Профиль

Пакеты

перевод документация 3.x

  1. 1. Основы
  2. 2. Создание пакетов
  3. 3. Регистрация пакетов
  4. 4. Загрузка классов
  5. 5. Запуск пакетов
  6. 6. Маршрутизация
  7. 7. Обращение к ресурсам
  8. 8. Публикация вёб-содержимого
  9. 9. Установка пакетов
  10. 10. Обновление пакетов

Основы

Пакеты (англ. bundle) лежат в основе улучшений, сделанных в Laravel 3. Они позволяют легко структурировать код в удобные для распространения модульные «пакеты». Пакет может иметь свои собственные шаблоны, настройки, маршруты, миграции, задания «Artisan» и т.д. Пакетом может быть всё — начиная от ORM и заканчивая продвинутой системой управления правами. Модульность такого рода — важное понятие, которое стоит почти за всеми решениями в Laravel. На самом деле, во многих случаях вы можете думать о папке application как о специальном пакете, с которым Laravel работает по умолчанию.

Создание пакетов

Первый шаг при создании пакета — сделать для него папку в bundles.Например, давайте создадим пакет admin, который будет содержать в себе административный центр управления нашим приложением. Файл application/start.php даёт возможность настроить окружение, в котором будет работать наше вёб-приложение; точно так же мы создадим файл start.php в папке нашего нового пакета — он будет загружаться каждый раз при запуске пакета.

PHP
<?php
// Файл: bundles/admin/start.php

Autoloader::namespaces(array(
  
'Admin' => Bundle::path('admin').'models',
));

Здесь мы говорим автозагрузчику, что классы в пространстве имён PHPAdmin должны загружаться из папки models нашего пакета. Вы можете делать всё, что угодо в своём start.php, но обычно он предназначен для регистрации классов в автозагрузчике. Но на самом деле вам даже не обязательно создавать этот файл.

Теперь посмотрим, как зарегистрировать пакет в нашем приложении.

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

Теперь когда у нас есть пакет admin нам нужно его зарегистрировать внутри Laravel. Откройте файл application/bundles.php — это как раз то место, куда вносятся все пакеты.

PHP
<?php
// Файл: application/bundles.php

return array('admin');

По умолчанию Laravel предположит, что пакет admin находится внутри папки bundles, но при желании мы можем указать иное размещение:

PHP
<?php
// Файл: application/bundles.php

return array(
  
'admin' => array('location' => 'userscape/admin'),
);

После этого Laravel будет искать пакет в bundles/userscape/admin.

Загрузка классов

Обычно start.php любого пакета содержит только определения для автозагрузчика классов. Если это так, то мы можем не создавать этот файл, а внести их прямо в запись пакета в PHPapplication/bundles.php.

Задание правил автозагрузки в настройках пакета:

PHP
<?php
// Файл: application/bundles.php

return array(
  
'admin' => array(
    
'autoloads' => array(
      
'map' => array(
        
'Admin' => '(:bundle)/admin.php',
      ),
      
'namespaces' => array(
        
'Admin' => '(:bundle)/lib',
      ),
      
'directories' => array(
        
'(:bundle)/models',
      ),
    ),
  ),
);

Заметьте, что каждый элемент массива соответствует методу автозагрузчика. На самом деле значения этих настроек автоматически передаются в соответствующий метод.

Как вы видите, здесь используется (:bundle) — она заменяется на путь к пакету, чтобы вам не нужно было писать его вручную.

Запуск пакетов

Наш пакет создан и зарегистрирован, но мы ещё не можем его использовать. Для начала нам нужно его запустить; это делается следующим вызовом:

PHP
Bundle::start('admin');

Laravel загрузит файл start.php в папке пакета, а так же routes.php, где обычно регистрируются маршруты и контроллеры. Любой из файлов загружается только, если он существует.

Пакет запускается только один раз, все последующие вызовы PHPBundle::start будут проигнорированы.

Если вы очень часто используете какой-то пакет в своём приложении, то было бы полезно запускать его в начале каждого запроса. Это можно сделать, настроив application/bundles.php.

Включение автозапуска для пакета:

PHP
<?php
// Файл: application/bundles.php

return array(
  
'admin' => array('auto' => true),
);

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

Каждый раз при запуске пакета возникает событие, которое вы можете отслеживать.

Отслеживание события при запуске пакета:

PHP
Event::listen('laravel.started: admin', function () {
  
// Пакет "admin" был запущен...
});

Отключение пакета — он никогда не будет запущен:

PHP
Bundle::disable('admin');

Маршрутизация

См. соответствующие разделы в документации по маршрутам и контроллерам.

Обращение к ресурсам

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

Загрузка шаблона в пакете:

PHP
return View::make('admin::view');
// возможное размещение: bundles/admin/views/view.php

Чтение настройки пакета:

PHP
return Config::get('admin::file.option');
// возможное размещение: bundles/admin/config/file.php

Чтение языковой строки пакета:

PHP
return Lang::line('admin::file.line');
// возможное размещение: bundles/admin/languages/en/file.php

Иногда вам может понадобиться узнать системную информацию о пакете — существует ли он, где находится или что-то из его опций в application/bundles.php. Посмотрим, как это делается.

Определение существования пакета:

PHP
Bundle::exists('admin');

Получение пути к пакету:

PHP
$location Bundle::path('admin');

Чтение массива опций пакета:

PHP
$config Bundle::get('admin');

Получение списка установленных пакетов:

PHP
$names Bundle::names();

Публикация вёб-содержимого

Если ваш пакет содержит шаблоны, то он наверняка содержит и нужные ему файлы JavaScript, картинки и прочее — они обычно расположены в его подпапке public. Однако для доступа из Интернета они должны быть внутри папки public вашего приложения — для этого просто скопируйте их туда (например, bundles/admin/public/styles.css в public/bundles/admin/styles.css).

Если у вас есть доступ к командной строке, вы можете использовать «Artisan»:

shphp artisan bundle:publish

Эта команда создаст подпапку в public для каждого пакета и скопирует туда все файлы из его папки public. Например, если у вас есть пакет admin, Artisan разместит его ресурсы в public/bundles/admin.

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

Установка пакетов

Конечно, вы можете устанавливать пакеты вручную, но интерфейс командной строки «Artisan» даёт возможность автоматически устанавливать и обновлять их. Для распространения пакетов используются обычные ZIP-архивы.

Установка пакета с помощью Artisan:

shphp artisan bundle:install eloquent

Отлично! Теперь вы можете зарегистрировать ваш новый пакет и опубликовать его вёб-содержимое.

Официальное хранилище пакетов: http://bundles.Laravel.com.

Обновление пакетов

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

shphp artisan bundle:upgrade admin

Внимание: после обновления вам может потребоваться переопубликовать вёб-содержимое данного пакета.

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

PHP
// Файл: application/start.php

Event::listen('laravel.started: admin', function () {
  
Config::set('admin::file.option''the_value');
});

Написать комментарий

Разметка: ? ?

Авторизуйся, чтобы прокомментировать.