lightsource / bem-blocks
帮助创建使用BEM块的结构的工具。
2.2.4
2021-02-04 13:04 UTC
Requires
- php: ^7.4
- ext-mbstring: *
- twig/twig: ^3.0
README
这是什么
帮助创建BEM块的MVC结构。
安装
composer require lightsource/bem-blocks
所需文件结构
目标命名空间必须支持PSR-4,因为命名空间和控制器类名将用于动态获取twig模板的路径。
扩展控制器类的类应该具有'_C'后缀(可以设置)。这是为了防止名称冲突(因为每个文件夹都将包含控制器和模型的一个子项)
例如,'FirstHeader_C.php'将被转换为'first-header.twig',而'Header_Type_Short_C.php'将被转换为'header--type--short.php'
以下是一个示例。
/Blocks/FirstHeader/
Type/Short/
FirstHeader_Type_Short_C.php
first-header--type--short.twig
Theme/Green/
first-header--theme--green.scss
first-header.twig
first-header.js
first-header.scss
FirstHeader_C.php
FirstHeader.php // it's a model
使用示例
a) 包含并设置包
use LightSource\BemBlocks\Settings;
require_once __DIR__ . '/vendor/autoload.php';
Settings::Instance()->setBlocksDirPath( '[Path to a blocks directory here]' );
Settings::Instance()->setBlocksDirNamespace( '[Blocks directory namespace here]' ); // e.g. Project\Blocks
b) 创建一个新的块
FirstHeader/
FirstHeader_C.php // extends Controller
FirstHeader.php // extends Model
first-header.twig // template
FirstHeader_C.php(扩展控制器)
use LightSource\BemBlocks\CONTROLLER;
/**
* Class FirstHeader_C
*/
class FirstHeader_C extends CONTROLLER {
//////// construct
/**
* FirstHeader_C constructor.
*/
public function __construct() {
parent::__construct( new FirstHeader() );
}
//////// override extend methods
/**
* @return FirstHeader
*/
public function getModel() {
return parent::getModel();
}
}
FirstHeader.php(扩展模型)
use LightSource\BemBlocks\MODEL;
/**
* Class FirstHeader
*/
class FirstHeader extends MODEL {
//////// fields
/**
* @var string
*/
protected $_value;
//////// constructor
/**
* FirstHeader constructor.
*/
public function __construct() {
parent::__construct();
$this->_value = '';
}
//////// override extend methods (optional)
/**
* @return array
*/
public function getArgs() {
return [
'value' => $this->_value,
];
}
//////// methods
/**
* @param int $id
*
* @return void
*/
public function loadById( $id ) {
$this->_value = 'Test with ' . $id;
}
}
c) 在目标位置渲染块
$firstHeaderC = new FirstHeader_C();
$firstHeaderC->getModel()->loadById(3);
echo $firstHeaderC->render();
附加信息
a) 自由扩展控制器类的功能,例如,您可以使用内置的InitAll()方法添加自动加载资源。
b) 默认情况下,Model类已启用自动加载受保护字段的选项。
因此,您只需声明受保护字段,然后在加载方法中填充它们。 (不需要在构造函数中使用简单类型(int|float|bool|string|array)初始化变量,这已经完成)。
此外,Model->getArgs()方法将自动填充它们,因此不需要手动执行。