跳转到主要内容

和“
Drupal8
”有关的内容:

hook_info.bin:钩子信息函数返回的合并结果,键名为钩子名,键值为一个数组,group代表该钩子实现还可以存放在$module.$group.inc文件中

Array ( [token_info] =>…
模块怎么定义一个钩子名呢?

比如模块名叫“yunke”,要定义一个钩子(名)叫做“sendMail”那么在模块的主目录中建立一个名为“yunke.api.php”的文件,里面定义一个样板函数叫做:hook_sendMail(...),加上注释,说明在yunke这个模块中怎么运用这个钩子的,…

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

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

如何自定义一个缓存上下文呢?

定义一个服务,它实现了以上两种接口之一,服务id为:cache_context.context_id,这里“cache_context.”是系统要求的强制前缀,“context_id”就是要使用的上下文id了

定义好服务后给出“cache.context…

这里有一个问题,请思考:我们知道一个缓存上下文id指代一种环境参数,体现了这种环境参数的改变带来的数据变体改变,然而环境参数是非常非常多的,比如请求头、cookie他们都包含很多子条目

每个子条目都可以是一个上下文id,那么我们岂不是要定义非常多的缓存上下文对象?但我们发现这样的上下文有一个共同特点:…

题外话:

一直坚持每周出一篇帖子来介绍drupal,这篇帖子恰逢是2016年的最后一篇,时间过的好快,drupal8一岁了,我的两个宝贝,小的也一岁多了,在drupal中和生活里都有好多感慨

为什么要坚持写作呢?

一方面源于希望对中国开源社区有所贡献。…

这些上下文id都有对应的上下文对象,加上“cache_context.”前缀就是这些对象的容器服务id,下面我们来看一下缓存上下文的具体实现:

通过理解具体实现能够掌握更多高级用法

处理缓存上下文的代码位于:\core\lib\Drupal\Core\Cache\Context

额外的笔者提醒思考以下问题:

缓存ID碰撞:

有没有可能两份数据出现同一个Cid呢?

其实是有可能的,但系统采取的措施很难遇到这样的情况,首先不同用途的数据已经分别被放在不同缓存Bin里面,即使碰撞也没有关系,再次数据会使用多个缓存上下文的组合,这降低了碰撞概率…

缓存上下文的用法:

缓存上下文的值是一个字符串数组,字符串是特定的,代表一种上下文,这个上下文用一个上下文对象实现,以容器的服务形式存在,加上“cache_context.”前缀就是它对应的容器服务id。

这个字符串经常被叫做“token”、上下文id、缓存上下文占位符等。…

回过头来,应该明白为什么缓存管理器在计算返回cid时返回的是ContextCacheKeys对象了吧,它承担缓存数据冒泡的工作,这个对象包含了缓存属性,缓存系统将合并它到被缓存数据的缓存属性

 

上下文优化的原则是指定的缓存上下文中,如果同时存在具备共同父级的上下文,将只保留共同父级上下文,冒号视为句点,…