lightsource/bem-blocks

帮助创建使用BEM块的结构的工具。

2.2.4 2021-02-04 13:04 UTC

This package is auto-updated.

Last update: 2024-09-20 00:58:46 UTC


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()方法将自动填充它们,因此不需要手动执行。