和“
Drupal8
”有关的内容:
在drupal控制器中返回的渲染数组及子渲染数组(注:不同于子元素,以“子渲染数组”这个名词表示非#开始的数组子元素)可以选择性的指定元素类型,也就是渲染数组的$elements['#type']值,这里讲的元素类型,不同于html的元素类型,后者往往表示html标签,…
drupal中实现了一种特殊的合并,和以上所有合并都不一样,代码位于
Drupal\Component\Utility\NestedArray::mergeDeep($arr1, $arr2, ...);
Drupal\Component\…
此函数是一种全保留的合并,将所有数组的值都保留下来,特征是不覆盖,将本会覆盖的值合并组成新数组,数字索引将重新索引,这个过程是递归的,如:(代码见辅助内容区)…
直接将两个数组通过“+”操作符相加,是一种前保留合并,就是说如果键名相同,包括数字索引键名,则前面的覆盖后面的,以前值为准,使用时需特别注意数字索引问题,它的特征是完全保留前面的数组
此函数官方文档请见:http://php.net/manual/zh…
在drupal8的源码实现中有非常多的合并数组操作,这本是php层面的知识,但鉴于用的如此之多,而且drupal还专门实现了一种合并方法,所以特别设置一个主题来讲解。
合并php数组主要有以下几个方法:
1:通过“+”操作符号进行数组相加的前保留合并
2:函数:array_merge 后保留合并
…非数字索引的处理体现了和array_merge_recursive函数的区别:
drupal实现是:相同键名间他们的值都为数组,则进行递归合并,否则只要有一个不是数组,将用后面的值覆盖前面的值。
如:(见辅助内容区)…
能否将渲染后的结果直接保存在渲染前Cid下呢?为什么?
如果这样做,那么在系统其它地方要对这份缓存进行操作时,那么就需要知道它渲染前的Cid,这可能是个问题
缓存API的一般原则是:被缓存的数据对象自带缓存属性数据,可以从渲染后的渲染数组自身计算出对应的缓存id…
我们可以使用$elements['#cache']['bin']自定义渲染结果数组的缓存位置,也可以不指定
不指定相当于:$elements['#cache']['bin']='render',所以缓存默认被保存到数据库的'render'缓存表里
要进行缓存有两个必要条件,同时满足就是充分条件:
$…
注意:它并不包括$elements['#cache']['keys']
默认如上,但是当我们也想缓存其他内容的时候怎么处理?可以这样:
指定$elements['#cache_properties'],它是一个数组,键值为想要缓存的元素的键名即可
比如在Drupal\Core\Render\MainContent\…
渲染数组被渲染的时候,为了提高性能,会将渲染结果保存到缓存中,这样就避免了重复渲染
并且每个子元素的渲染结果都可以被独立缓存,如此一来子元素也可以避免重复渲染
不过缓存中保存的渲染数组是经过简化的,渲染缓存默认只缓存以下内容,这样经简化的数组叫做“CacheableRenderArray”:(见辅助内容区)…