proklung / bitrix-blade-bundle
Symfony 的Bundle,支持Blade模板引擎
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') 被修改如下
首先在当前模板组件的目录(template.blade 所在位置)中查找 view。
如果在该目录中没有找到 view,则相对于基本目录(默认为 local/views,但在调用 BladeProvider::register() 时可以指定其他目录)查找。
附加信息
容器中出现两个Blade模板渲染服务
symfony_blade.blade
- 用于Bitrix的渲染器。symfony_blade.blade_instance
- 通用框架的渲染器(例如,在Wordpress中工作)。
方法
返回指定模板的Laravel 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
- 去除字符串两端的空格
指令
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文件中。在大多数情况下,您不需要手动清理这个缓存,因为Blade会检查模板文件和缓存的修改时间,并自动使缓存无效。但是,在某些情况下(例如添加新的用户指令),您可能需要重置这个缓存。这可以通过调用方法 BladeProvider::clearCache() 来完成。
对于Bitrix,存在一个服务 symfony_blade.clear_cache
,当存在 GET 参数 clear_cache 时,会清除缓存。
一些注意事项
Bitrix 允许仅在组件模板中使用第三方模板引擎。网站模板只能使用PHP。
由于显而易见的原因,无法充分利用模板的继承。
不能使用传统的 .blade.php 扩展名。Bitrix 识别到 .php 扩展名时会启用 PHP 引擎。
在模板中应使用 $template 代替 $this - 例如 $template->setFrameMode(true);
不需要在 blade 模板中编写检查 <?if(!defined("B_PROLOG_INCLUDED")||B_PROLOG_INCLUDED!==true) die();?>
,它会在编译后的 view 中自动添加。同时,也会执行 extract($arResult, EXTR_SKIP);
为了让模板中的语言文件能够被连接,它的名称需要像通常一样命名为 - template.php
附加信息
PhpStorm
为了在 PhpStorm 中启用 .blade 文件的语法高亮,需要在设置中添加此扩展:设置 > 编辑器 > 文件类型 > Blade
为了让 PhpStorm 正确理解和突出显示此包中的自定义指令,可以将它们添加到其中。这可以在设置 > 语言 & 框架 > PHP > Blade > 指令 中完成。