上海戴文 - Drupal开发 在线教育

你在这里

云客

云客Drupal8源码分析之渲染占位符及其产生器

渲染占位符及渲染占位符产生器

drupal使用渲染占位符机制的目的是为了提高系统性能,具体来讲就是提高缓存利用率和效率

云客Drupal8源码分析之钩子、模块处理器、函数定义

元旦刚刚过去,继续保持一周一篇的速度,这是Drupal8云客源码分析系列在2017年的开篇,来讲几个极其重要的内容,它们是钩子、模块处理器、函数定义。
钩子:
如果是开发新手可能对这个慨念陌生而好奇,许多工作多年的工程师可能对它也缺乏深度理解,不止是在php中,它其实是软件工程中的重要慨念,什么意思呢?为什么要叫做钩子?既然叫做钩子直觉的就会联想到钩什么?怎么钩?简单而直接的回答就是在软件运行的某时刻去钩起一段代码来执行,这个“钩起”也可以称为调用、获取等,但总不能叫做“调子”“获子”吧,所以形象起见叫做钩子,可以将钩子理解为一种软件实现机制,函数调用就是钩子最简单的情况,执行函数时调用它就是钩起它,函数就是钩子实现,函数名就是钩子名,怎么钩就是通过函数名来钩。

云客Drupal8源码分析之缓存上下文CacheContext

“上下文Context”这个词是什么意思呢?平常生活中它常见于语言、文字交流里面,意思是当前交流处于一个特定的环境下,依托前面的内容交流才有意义

比如这句话:“他正在学习drupal”,如果单独说是没有意义的,因为你不知道“他”指代谁,在交流中前面一定定义清楚了“他”是谁,这个“他”就是上下文,这个谁就是上下文的值

在软件工程中,上下文是一种属性的有序序列,它们为驻留在环境内的对象定义环境。不过你无需去理会这样晦涩的定义,只需要知道“上下文”相当于“环境”就行了,它们是等价的。

假设将来能制造出真正的类人智能机器人,那么把它投放到社会中,激活那一刻,他第一件事情就是侦查环境,换句话说就是搞清楚自己所在的上下文,然后他才能有所行动

可见上下文概念是如此重要,在脑子里面建立一个印象:有目的的行为是建立在环境之上的,万事万物皆是如此

 

云客Drupal8源码分析之渲染上下文RenderContext、渲染器renderer

当drupal的控制器返回渲染数组的时候,系统会派发视图事件,渲染数组被main_content_view_subscriber(主内容视图订阅器)处理,它根据请求的格式,将系统流程定向到对应的格式渲染器,系统默认提供了四个格式渲染器,他们被定义在容器的main_content_renderers参数里面,其中html格式对应的是服务id为“main_content_renderer.html”的html格式渲染器,我们得到的html格式页面几乎都是它渲染的,它将渲染分为两个步骤:先渲染body标签,然后渲染html标签,其中我们将html的渲染称为根渲染。

具体的工作是由渲染器完成的,它负责将渲染数组转换为html字符串,本篇的主题就是这个渲染器。

要理解它是怎么工作的需要先理解一些知识。

首先是渲染数组,关于它可阅读本系列的《云客Drupal8源码分析之渲染数组(render array)》

其次是渲染上下文,下面介绍一下渲染上下文:

云客Drupal8源码分析之渲染数组(render array)

从本质上讲现代所有的web软件系统中都用到了渲染数组,只不过在drupal世界里明确给了它这个名字:“渲染数组”。

如果你使用过模板引擎,那么会很熟悉它,要使模板引擎工作,那么需要给它传入一些变量,这些变量将决定模板里面对应变量的显示,传入的这些变量往往是以数组的方式传入,键名代表模板里面的变量名,键值代表变量值,这样的数组就叫做渲染数组,比如著名的php小型框架CodeIgniter(简称CI框架)中的经典用法就是这样:

 

$this->load->view('show_news', $data);

其中参数show_news指定网页模板,参数$data就是程序中准备好的一个数组,包含了传递给模板的变量

 

云客Drupal8源码分析之页面标题

本篇主题讲解drupal8系统是如何计算页面标题的,标题很重要,尤其对于搜索引擎优化来说,标题权重很高

页面有标题当然是针对请求格式为html而言,在整个执行流程中如果控制器直接返回响应对象,那么标题计算就在控制器中随意进行
流程仅仅停留在Symfony的渲染管道中,如果控制器返回的是渲染数组,那么将派发视图事件,主内容视图订阅器MainContentViewSubscriber将判断请求格式,并启动对应的格式渲染器渲染输出
今天的话题就发生在请求格式为html的HtmlRenderer渲染器中,这个渲染器用到了标题解析器
这就是本主题的内容,下面看看标题是怎么计算出来的:

云客Drupal8源码分析之控制器执行及其解析器controller_resolver

在drupal的HttpKernel核心中使用控制器解析器来取得要执行的控制器,以及解析出控制器需要的参数
除此之外也在多个地方用到它,比如渲染数组的回调解析,是一个重点内容

它的服务ID为:controller_resolver,接受以下两个参数:

psr7.http_message_factory:用于创建psr7描述的请求对象(关于这个请看:http://www.php-fig.org/psr/psr-7/
class_resolver:从容器里面取服务

云客Drupal8源码分析之核心处理流程HttpKernel(drupal8执行流程)

有朋友问云客drupal8源码分析系列文章有顺序规律吗?我的回答是有!从第一篇开始以来她是按照drupal的执行流程分主题进行的,除前言外,已经发布12篇了,如果你是跟着drupal8的执行流程进行研究学习的,那么这些文章就像站在路旁等着你的引路人为你揭开一些迷惑的问题,drupal很大,前方很远,有时候你可能感觉站在一望无际的平原,眼前只有遥远天际的落日昏辉,希望这些引路人让走在这条路上的你不那么孤独,应该先读她,再去看代码,这样心中有大局,既舒适又快速。

云客Drupal8源码分析之数据库Schema及创建数据表

本主题是《云客Drupal8源码分析之数据库系统及其使用》的补充,便于查询,所以独立成一个主题

讲解数据库系统如何操作Schema(创建修改数据库、数据表、字段;判断它们的存在性等等),以及模块如何通过一个结构化数组去创建自己用到的数据表

云客Drupal8源码分析之数据库系统及其使用

在开始本主题前请允许一点点题外话:

页面

订阅 RSS - 云客