arrilot / bitrix-blade
此包已被弃用且不再维护。没有建议的替代包。
0.8.0
2020-10-13 16:05 UTC
Requires
- php: >=5.4.0
- arrilot/bitrix-hermitage: ^1
- illuminate/container: 5.*
- illuminate/events: 5.*
- illuminate/view: 5.*
README
该包不再活跃
原因是我们在自己的项目中不再使用Bitrix。如果您对这个项目感兴趣并希望支持它,请将其分叉并在此存储库中创建Issue,以便我们将分叉链接放置在此处。
分叉
Bitrix Blade - Blade 模板引擎在 Bitrix 中的集成
安装
1)composer require arrilot/bitrix-blade
- 添加到 init.php
use Arrilot\BitrixBlade\BladeProvider; require $_SERVER['DOCUMENT_ROOT']."/vendor/autoload.php"; BladeProvider::register();
使用
将组件模板从 template.php
改为 template.blade
,然后可以使用 Blade
指令 @include('path.to.view')
被修改如下
- 首先在当前模板组件目录(即 template.blade 所在目录)中查找 view
- 如果在该目录中没有找到 view,则在基本目录(默认为
local/views
,但在调用BladeProvider::register()
时可以指定其他目录)中查找
用户自定义指令(custom directives)
为了添加自己的指令,需要将其在编译器中注册
$compiler = BladeProvider::getCompiler();
$compiler->directive('directiveName', function ($expression) {
return '...';
});
安装包时,BladeProvider::register()
会自动为您注册一些有用的指令
@bxComponent
- 等同于$APPLICATION->IncludeComponent()
@block('key')
和@endblock
- 之间包含的内容将在调用$APPLICATION->ShowViewContent('key')
的地方输出@lang('key')
- 等同于!!Bitrix\Main\Localization\Loc::getMessage('key')!!
@auth
和@endauth
- 简化的?php if($USER->IsAuthorized()) ?php ... ?php endif
@guest
和@endguest
- 类似,但检查非授权用户@admin
和@endadmin
- 类似,但使用$USER->IsAdmin()
@csrf
- 简化形式为<input type="hidden" name="sessid" value="!!bitrix_sessid()!!" />
- 与仓库相关的指令
配置
如有必要,可以在配置文件中更改路径。.settings_extra.php
'bitrix-blade' => [ 'value' => [ 'baseViewPath' => '/absolute/path/or/path/from/document/root', // по умолчанию 'local/views' 'cachePath' => '/absolute/path/or/path/from/document/root', // по умолчанию 'local/cache/blade' ], 'readonly' => false, ],
清理缓存
为了确保Blade运行速度快,它将编译后的模板缓存到PHP文件中。在大多数情况下,不需要手动清理这个缓存,因为Blade会检查模板文件和缓存的修改时间,并自动使缓存无效。然而,在某些情况下(例如添加新的用户指令),仍然需要重置这个缓存。这可以通过方法BladeProvider::clearCache()
完成。
一些注意事项
- 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文件的语法高亮,需要在
Settings->Editor->File Types->Blade
中添加此扩展。 - 为了使PhpStorm正确理解并高亮显示此包中的用户指令,可以将它们添加到其中。这可以在
Settings->Language & Frameworks->PHP->Blade->Directives
中完成。