proklung / bitrix-blade-bundle
Бандл для Symfony, обеспечивающий поддержку шаблонизатора Blade
Installs: 25
Dependents: 0
Suggesters: 0
Security: 0
Stars: 1
Watchers: 1
Forks: 0
Type:symfony-bundle
Requires
- php: >=7.3 || ^8.0
- arrilot/bitrix-hermitage: ^1
- illuminate/container: ~6 | ~7 | ~8
- illuminate/view: ~6 | ~7 | ~8
- symfony/config: ^4.4 || ^5.0
- symfony/dependency-injection: ^4.4 || ^5.0
- symfony/http-kernel: ^4.4 || ^5.0
Requires (Dev)
README
На базе https://github.com/arrilot/bitrix-blade
Установка
composer require proklung/bitrix-blade-bundle
Использование
Заменяем шаблон компонента с template.php на template.blade и можно писать на Blade
Директива @include('path.to.view') модифицирована следующим образом:
Сначала view ищется относительно директории текущего шаблона компонента (там где лежит template.blade).
Если не view там не нашёлся, то он ищется относительно базовой директории (по умолчанию local/views, но может быть указана другая при вызове BladeProvider::register()).
Дополнительно
В контейнере появляются два сервиса рендеринга из шаблонов Blade:
symfony_blade.blade
- рендерер для Битрикса.symfony_blade.blade_instance
- фреймворконезависимый рендерер (работает, например, в Wordpress).
Методы:
Вернет ларавеловский View для указанного шаблона. Внутри него магический метод __toString
, вызывающий рендерер.
/** * Получить View шаблона. * * @param string $file Blade шаблон. * @param array $data Данные. * @param array $mergeData Данные. * * @return View */ public function file(string $file, array $data = [], array $mergeData = []) : View;
Можно динамически задать пути, где шаблонизатор будет искать шаблоны.
/** * Добавить базовый путь. * * @param string $path Базовый путь. * * @return void */ public function addBasePath(string $path): void;
Пользовательские директивы (custom directives)
При установке пакета за вас уже автоматически зарегистрировано некоторое количество полезных директив:
@bxComponent
- аналог $APPLICATION->IncludeComponent()
@block('key')
и @endblock
- всё что заключено между ними будет выведено в месте, где вызван метод $APPLICATION->ShowViewContent('key')
@lang('key')
- равносильно {!! Bitrix\Main\Localization\Loc::getMessage('key') !!}
@auth
и @endauth
- сокращенная запись IsAuthorized()) ?> ...
@guest
и @endguest
- аналогично, но проверка на неавторизованного юзера.
@admin
и @endadmin
- аналогично, но $USER->IsAdmin()
@csrf
- сокращенная форма для
Фильтры:
lcfirst
- первый символ в нижний регистр
ucfirst
- первый символ в верхний регистр
date
- строку в дату, согласно заданному формату
trim
- trim строки
Директивы:
istrue
/ endistrue
isfalse
/ endisfalse
isnull
/ endisnull
isnotnull
/ endisnotnull
Дампы
dump
dd
Добавление своих фильтров и директив Blade
Чтобы подцепить кастомный фильтр - нужно пометить сервис тэгом blade.custom.filter
.
Директиву - тэгом blade.custom.directive
(класс должен реализовывать интерфейс BladeDirectiveInterface
).
Конфигурация
При необходимости пути можно поменять в конфигурации бандла в local/configs/packages/symfony_blade.yaml
:
symfony_blade: baseViewPath: '%kernel.project_dir%/local/views' cachePath: '%kernel.project_dir%/bitrix/cache/blade' readonly: false
Очистка кэша
Для обеспечения высокой скорости работы Blade кэширует скомпилированные шаблоны в php файлы. В большинстве случаев чистить этот кэш самостоятельно потребности нет, потому что блейд сверяет время модификации файлов шаблонов и кэша и самостоятеьно инвалидирует этот кэш. Однако в некоторых случаях (например при добавлении новой пользовательской директивы), этот кэш всё-же надо сбросить. Делается это методом BladeProvider::clearCache()
Для Битрикса существует сервис symfony_blade.clear_cache
, очищающий кэш в случае присутствия GET параметра clear_cache.
Некоторые моменты
Битрикс позволяет использовать сторонние шаблонизаторы только в шаблонах компонентов. Шаблоны сайтов только на php.
По понятным причинам наследованием шаблонов в полную силу воспользоваться не получится.
Традиционное расширение .blade.php использовать нельзя. Битрикс видя .php включает php движок.
Вместо $this в шаблоне следует использовать $template - например $template->setFrameMode(true);
Проверку <?if(!defined("B_PROLOG_INCLUDED")||B_PROLOG_INCLUDED!==true) die();?>
прописывать в blade-шаблоне не нужно, она добавляется в скомпилированные view автоматически. Также вместе с этим выполняется и extract($arResult, EXTR_SKIP);
Чтобы языковой файл из шаблона подключился, его (этот языковой файл) надо назвать как обычно - template.php
Дополнительно
PhpStorm
Чтобы включить подсветку синтаксиса в PhpStorm для .blade файлов нужно добавить это расширение в Settings->Editor->File Types->Blade
Чтобы PhpStorm понимал и подсвечивалл должным образом пользовательские директивы из этого пакета их можно добавить в него. Делается это в Settings->Language & Frameworks->PHP->Blade->Directives