跳转到主要内容

和“
Drupal8
”有关的内容:

系统是如何定义元素类型及如何附加的呢?这里就要介绍一个服务:

它在容器中的服务名为:plugin.manager.element_info 别名为: element_info

通过“+”操作符号进行数组相加

直接将两个数组通过“+”操作符相加,是一种前保留合并,就是说如果键名相同,包括数字索引键名,则前面的覆盖后面的,以前值为准,使用时需特别注意数字索引问题,它的特征是完全保留前面的数组

此函数官方文档请见:http://php.net/manual/zh…

在drupal8的源码实现中有非常多的合并数组操作,这本是php层面的知识,但鉴于用的如此之多,而且drupal还专门实现了一种合并方法,所以特别设置一个主题来讲解。

合并php数组主要有以下几个方法:

1:通过“+”操作符号进行数组相加的前保留合并

2:函数:array_merge 后保留合并

非数字索引的处理体现了和array_merge_recursive函数的区别:
drupal实现是:相同键名间他们的值都为数组,则进行递归合并,否则只要有一个不是数组,将用后面的值覆盖前面的值。
如:(见辅助内容区)…

drupal实现的合并

drupal中实现了一种特殊的合并,和以上所有合并都不一样,代码位于
Drupal\Component\Utility\NestedArray::mergeDeep($arr1, $arr2, ...);
Drupal\Component\…

array_merge_recursive 递归合并

此函数是一种全保留的合并,将所有数组的值都保留下来,特征是不覆盖,将本会覆盖的值合并组成新数组,数字索引将重新索引,这个过程是递归的,如:(代码见辅助内容区)…

渲染数组被渲染的时候,为了提高性能,会将渲染结果保存到缓存中,这样就避免了重复渲染
并且每个子元素的渲染结果都可以被独立缓存,如此一来子元素也可以避免重复渲染

不过缓存中保存的渲染数组是经过简化的,渲染缓存默认只缓存以下内容,这样经简化的数组叫做“CacheableRenderArray”:(见辅助内容区)…

占位渲染缓存:

在drupal实际的使用中,渲染缓存采用的是占位渲染缓存PlaceholderingRenderCache它扩充了RenderCache的功能
我们知道渲染占位符的目的就是将系统不适合缓存的内容独立出来,单独渲染,结果并不会缓存

思考:

能否将渲染后的结果直接保存在渲染前Cid下呢?为什么?
如果这样做,那么在系统其它地方要对这份缓存进行操作时,那么就需要知道它渲染前的Cid,这可能是个问题
缓存API的一般原则是:被缓存的数据对象自带缓存属性数据,可以从渲染后的渲染数组自身计算出对应的缓存id…

我们可以使用$elements['#cache']['bin']自定义渲染结果数组的缓存位置,也可以不指定
不指定相当于:$elements['#cache']['bin']='render',所以缓存默认被保存到数据库的'render'缓存表里

要进行缓存有两个必要条件,同时满足就是充分条件:
$…