devgroup / bh
模板引擎。BEMJSON -> HTML 处理器。https://github.com/bem/bh 的 PHP 版本
Requires
- php: >=5.4.0
Requires (Dev)
- phpunit/php-invoker: 1.*@stable
- phpunit/phpunit: 4.3.*
This package is auto-updated.
Last update: 2024-09-11 14:26:25 UTC
README
![Gitter](https://badges.gitter.im/Join Chat.svg)
BH 是一个将 BEMJSON 转换为 HTML 的处理器。换句话说,它是一个模板引擎。
与 PHP 5.4+
兼容(不与 HHVM
兼容,因为它缺少许多必需的功能)
目录
友好的包
- 带有 BH.PHP 技术的项目模板
- BEM Core 库与 BH.PHP 模板 - tmp 分支
- BEM 组件库与 BH.PHP 模板 - tmp 分支
安装
通过 composer
在您的 shell 中执行
php composer.phar require bem/bh
或者(如果您已将 composer
添加到路径中)
composer require bem/bh
并在您的代码中使用
require "vendor/autoload.php"; $bh = new \BEM\BH(); // ...
手动安装
使用 git
下载(在您的 shell 中执行此操作)
# via git
git clone https://github.com/bem/bh-php.git ./vendor/bem/bh
使用 wget
和 tar
# via wget + tar
wget https://github.com/bem/bh-php/archive/master.tar.gz # download archive
tar -xzvf master.tar.gz --exclude=tests # extract
[ ! -d ./vendor/bem ] && mkdir ./vendor/bem -p # create vendor director
mv ./bh-php-master ./vendor/bem/bh # move library to vendor
rm master.tar.gz # cleanup
或者直接下载 最新版本 并解压缩到 ./vendor/bem/bh
路径(或您想要的任何路径)。
并在您的代码中使用
// manual installation require "vendor/bem/bh/index.php"; $bh = new \BEM\BH(); // ...
用法
项目中的 BH 文件具有 .bh.php
后缀(例如,page.bh.php
)。该文件以类似于 CommonJS 的格式形成
return function ($bh) { $bh->match(/*...*/); // ... };
要加载此文件格式,请使用 include 和 run 技术
// Instantiate BH object $bh = new \BEM\BH(); // Load and apply matchers to BH object in $bh $fn = include('file.bh.php'); $fn($bh); // done. and nothing in global // ...
这允许您同时拥有多个实例
$bh1 = new \BEM\BH(); $bh2 = new \BEM\BH(); // load matchers $indexMatchers = include('bundles/index/index.bh.php'); $mergedMatchers = include('bundles/merged/merged.bh.php'); // apply them $indexMatchers($bh1); // bh1 now contains matchers for index page only $mergedMatchers($bh2); // bh2 now contains all matchers // use it with the same bemjson data $bh1->apply($bemjson); $bh2->apply($bemjson);
使用 apply
方法将 BEMJSON 的源树转换为输出 HTML。使用 processBemJson
方法以详细 BEMJSON 树形式获取中间结果。
常见用例
require "vendor/autoload.php"; $bh = new \BEM\BH(); $bh->match('button', function ($ctx) { $ctx->tag('button'); }); $bh->processBemJson([ 'block' => 'block' ]); // [ 'block' => 'button', 'mods' => new Mods(), 'tag' => 'button' ] $bh->apply([ 'block' => 'button' ]); // '<button class="button"></button>'
转换
BEMJSON 的工作函数是 模板。使用 match
方法声明模板。BEMJSON 转换的逻辑在函数体中声明。
模板函数提供了两个参数
$ctx
–\BEM\Context
类的实例;$json
–\BEM\Json
类的实例(当前 BEMJSON 树节点)。
注意:不要直接更改 $json
对象。请使用 $ctx
对象的方法。我们建议您仅用于读取 $json
对象(另请参阅 $ctx->json()
方法)。
语法
/** * Register matchers * @param string|array $expression bem css expression * @param closure [$matcher] * @return \BEM\BH */ $bh->match(/*string*/ $expression, function (\BEM\Context $ctx, \BEM\Json $json) { // ... actions }); // or... $bh->match([/*string*/ $expression], function (\BEM\Context $ctx, \BEM\Json $json) { // ... actions }); // or... $bh->match(/*array*/ $matchers = [ "$expression" => function(\BEM\Context $ctx, \BEM\Json $json) { // ... actions }, // ... more matchers ]);
请参阅 README.md 或 README.ru.md 中的更多示例。