oro / layout
dev-master / 1.0.x-dev
2018-04-26 16:14 UTC
Requires
- php: 7.1.*
- jms/cg: 1.2.*
- oro/php-utils: dev-master
- oro/property-access: dev-master
- symfony/dependency-injection: 2.8.*
- symfony/filesystem: 2.8.*
- symfony/form: 2.8.*
- symfony/options-resolver: 2.8.*
- symfony/templating: 2.8.*
- symfony/yaml: 2.8.*
This package is auto-updated.
Last update: 2021-04-19 20:26:40 UTC
README
Oro 布局组件定义了页面结构的面向对象表示,并提供构建、管理和渲染页面的工具。
重要:此组件尚未完成。
Oro 布局组件
提供以下工具
- 定义布局元素(块),可用于构建不同类型的布局,包括HTML、XML等。
- 管理布局结构和主题。
介绍
在开始使用布局之前,请确保您熟悉以下关键Oro 布局组件
概念
-
布局是一组以分层结构排列的小部件,其中小部件是一个包含某些内容的逻辑块。
-
布局和小部件都不知道它们应该如何转换为输出字符串(例如HTML)。为了进行这种转换,我们使用渲染器,例如基于TWIG模板的渲染器。
-
Oro布局的核心理念和实现与Symfony的表单组件大致相似。然而,区别在于布局仅支持单向数据流。这意味着布局小部件的内容可以根据数据渲染,但不能使用布局来处理用户提交的数据。
-
存在两个核心布局小部件,即块和容器
-
块表示一个不能包含任何其他小部件的小部件。块的例子可以是标签、图表、网格等。
-
容器是一个结构化小部件,可以包含其他小部件。容器的例子可以是页眉、侧边栏、页面主体等。
-
高级架构
Oro 布局组件包括三个主要层
- 基础层提供了构建布局所需的主要架构组件。
- 扩展层通过加载DI容器中的小部件和工作与布局继承等功能扩展了布局。
- 视图层提供负责将布局转换为渲染HTML、XML或其他格式的组件。
Oro 布局组件提供了几个开箱即用的可插拔扩展
- 核心扩展提供了组件实现的全部小部件定义(称为块类型)。
- DI扩展增加了对Symfony的依赖注入组件的支持。
- 主题扩展允许基于其他布局构建布局,并提供了灵活的布局配置。
布局生命周期
布局通常经过以下表中概述的阶段。
阶段 | 描述 |
---|---|
创建布局上下文 | 布局上下文应通过调用LayoutContext类的构造函数手动创建。如果需要,可以在这一阶段向上下文中添加额外的变量。 |
配置布局上下文 | 在这个阶段,将调用所有已注册的布局配置器的configureContext 方法。 |
解析布局上下文 | 在此阶段之后,无法向布局上下文添加新变量,但仍可以更改现有变量的值。 |
添加root 块 |
应手动添加根块以启动布局更新的执行链。有关更多详细信息,请参阅下一阶段的描述。 |
执行布局更新 | 布局更新与布局块相关联,因此它们在添加到布局后执行。如果未指定布局更新的块,则将其链接到根块。 |
构建块 | 从父块开始构建块层次结构。首先调用基本块类型的buildBlock 方法,然后调用基本块类型所有已注册扩展的buildBlock 方法;接下来调用继承的块类型及其扩展的buildBlock 方法,等等。 |
构建块视图 | 从父块开始构建块视图层次结构。首先调用基本块类型的buildView 方法,然后调用基本块类型所有已注册扩展的buildView 方法;接下来调用继承的块类型及其扩展的buildView 方法,等等。在构建子视图之前调用buildView 方法,因此无法在此处访问子视图。 |
完成块视图的构建 | 首先完成父视图的构建。首先调用基本块类型的finishView 方法,然后调用基本块类型所有已注册扩展的finishView 方法;接下来调用继承的块类型及其扩展的finishView 方法,等等。finishView 方法在子视图构建之后但子视图完成构建之前调用。 |
渲染布局 | 布局渲染与Symfony表单相同。有关更多详细信息,请参阅如何自定义表单渲染。 |
以下示例说明了如何构建简单的布局。
$context = new LayoutContext(); $context->getResolver() ->setRequired(['some_variable']); $context->set('some_variable', 'some_value'); $layoutFactory = Layouts::createLayoutFactory(); $layout = $layoutFactory->createLayoutBuilder() ->add('root', null, 'root') ->add('header', 'root', 'header') ->add('logo', 'header', 'logo', ['title' => 'Hello World!']) ->getLayout($context); echo $layout->render();
您还可以仅渲染布局子树而不是整个树。为此,您应在LayoutBuilder::getLayout
中设置rootId
参数。
$layout = $layoutFactory->createLayoutBuilder() ... ->getLayout($context, 'some_block_id'); echo $layout->render();
为了更好地理解布局的工作方式,请学习Layouts类、LayoutBuilder类的getLayout
方法和BlockFactory类。请特别注意DeferredLayoutManipulator类的postExecuteAction
方法和LayoutRegistry类。
开发者参考
以下列出了Oro布局组件中最重要的一些类:
- LayoutManager是访问Oro布局组件的主要入口点。
- Layouts是静态辅助工具,如果您的应用程序未使用依赖注入容器,则可以使用它。
- 布局 表示一个准备渲染的布局。
- 布局构建器 提供了一系列构建布局的方法。
- 布局注册表 保存了所有布局扩展。
- 原始布局 表示所有布局数据的存储,包括项目列表、项目层次结构、别名等。这是一个内部类,通常您不需要在组件外部使用它。
- 原始布局构建器 提供了一种构建布局数据存储的方式。这是一个内部类,通常您不需要在组件外部使用它。
- 延迟布局操作器 允许在无需担心方法调用顺序的情况下构建布局。
- 块类型接口 为所有块类型提供了一个接口。
- 抽象类型 可以用作所有 块 块类型的基类。
- 抽象容器类型 可以用作所有 容器 块类型的基类。
- 块工厂 实现了构建布局块及其视图的逻辑。
- 数据提供者装饰器 允许使用预定义的前缀调用方法。
- 主题扩展 加载布局更新。
- 导入访问者 加载导入。