[Из песочницы] Puli: Управление ресурсами в php приложениях

imagePuli — это инструмент, позволяющий универсально управлять ресурсами в php приложениях. Главная цель проекта — стандартизировать такие понятия как bundle, plugin, module для разных библиотек и фраймворков в одно общее независимое решение.

В чем проблема?

Иногда, вы возможно получали файл, используя константу __DIR__:

echo file_get_contents(__DIR__.'/../../res/views/index.html.twig');


Однако, как правило при доработке проекта путь к файлу меняется, и данный код перестает работать. Но многие фраймворки используют собственное решение с предустановленной root директорией, где лежать ваши ресурсы.

// res/views/index.html.twig
echo load_file('views/index/html.twig');


Такое решение работает неплохо. А что если вы хотите загрузить ресурсы из другой директории, допустим из установленной через composer библиотеки. Фреймворки решают эту проблему, поддерживая aliases для ресурсов.

// vendor/acme/blog/res/views/index.html.twig
echo load_file('acme-blog:views/index/html.twig');


К сожалению, каждый фреймворк имеет собственные соглашения о наименовании директорий.

Как работает Puli

Компонент для управления ресурсами через репозитории принимает путь, как в файловой системе Unix.

// res/views/index.html.twig
echo $repo->get('/app/views/index.html.twig')->getBody();


Puli находит файлы с помощью puli.json в корне вашего проекта и во всех установленных композером пакетах. Добавить новый путь можно с помощь команды:

$ php puli.phar map /app res


В данном примере мы добавили приставку /app для res директории вашего приложения. Сейчас Puli знает, что все файлы с приставкой /app должны быть найдены в директории res.

image

Puli собирает данные о путях из puli.json вашего проекта.

URL генератор

Когда вы пишите html, css, javasript код, вы часто нуждаетесь в других ресурсах. Для примера ссылка на картинку в html теге img:

<img src="/images/logo.png" />


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

Puli решает эту проблему автоматической генерацией URL.

<img src="{{ resource_url("/batman/blog/public/images/logo.png") }}" />


Относительный путь:

<img src="{{ resource_url("../public/images/logo.png") }}" />


Пользователи вашего пакета нуждаются в небольшой настройке Puli.

image

Теперь пользователь должен указать как минимум один web сервер (название и URL формат). Для примера используем localhost как имя и examle.com/%s как URL формат для нашего web сервера. Мы настроили наш puli так, что путь /batman/blog/public соответствовал корневой директории /blog/ нашего web сервера. Получаем URL:

<img src="https://example.com/blog/images/logo.png" />


Puli может автоматически разместить ваши ресурс для web сервера. Указав ваш web сервер и как ваши ресурсы должны быть опубликованы (symlink, copy, rsync), вы можете установить их с помощью cli команды:

$ php puli.phar publish --install
Installing /batman/blog/public into public_html/blog via symlink...


Мне кажется, Puli будет отличным решением для многих разработчиков модулей. Ведущим проекта является один из разработчиков Symfony — Bernhard Schussek. На данный момент версия puli 1.0.0-beta8. Сейчас имеется:

Composer plugin
Symfony Bidge
Twig Extension
Symfony Bundle
gulp-plugin

Источники:
docs.puli.io
github.com/puli
DrupalCon Barcelona 2015: Puli: PHP's Next Package Revolution

© Habrahabr.ru