各位《云客drupal源码分析》系列的读者:
本系列一直以每周一篇的速度进行博客原创更新,希望帮助大家理解drupal底层原理,并缩短学习时间,但自《插件系统(上)》主题开始博客仅发布前言和目录,这是因为云客在思考一个问题:drupal在国外如此流行但在国内却很小众,一个重要原因应该是中文资料的缺乏,我们是否能够找到一种方式来激发中文资料的出产?此时同是积极推动者的晴空提出能否用付费阅读的方式来鼓励更多作者?并建立了一个付费阅读drupal资料的网站,个人觉得也许这能激发高质量原创内容的出产,学习者支付很少费用可以节省大量学习时间是划算的,作者也能分配精力去开发高质量内容而得到报酬,drupal普及开了对大家都有益处,为了支持晴空的这个项目,云客决定将从《插件系统(上)》主题开始后续内容全部放在这个网站上收费阅读,读者只需要付很少费用即可,云客在这里承诺该系列得到的所有订阅费用全部捐献给drupal深圳社区,用以组织活动等等,发展社区需要大家贡献力量,该网站已于2017年3月29日上线,请移步:http://nowicode.com/ 阅读本篇完整版

我是云客,【云游天下,做客四方】,联系方式见主页,欢迎转载,但须注明出处

****************************************以下为前言和目录,请移步:http://nowicode.com/ 阅读本篇完整版*******************************

插件系统是drupal中非常重要的一块内容,非常多的地方用到了它,本系列将分上下两篇来讲解它,上篇为基本内容,能一窥插件全貌和常见使用,下篇为高级使用

插件是什么?

在读本篇前强烈建议看完本系列前面关于钩子的介绍,插件本质上就是使用面向对象程序开发模式实现的钩子,但它比钩子系统更加先进灵活,钩子是相对于面向过程程序开发而言,狭义点讲,一个钩子就是一个函数,一个插件就是一个类。

他们都是在某个点来实现某类似功能,钩子比较简单,通过函数的命名规则来进行查找,而插件类则高级强大许多,一个类可能很大,系统中有许多插件,全部加载的话也会消耗大量内存,类可能也需要配置数据,如果通过命名来查找那么会限制其灵活性,所以依靠命名这种查找方式不适合插件系统,因此在drupal中使用插件类的元数据来查找插件,这个过程叫做插件的发现Discovery

插件的发现Discovery:

在drupal中提供了四种方式来查找插件,他们都是基于插件类的元数据:

1:StaticDiscovery

静态发现,其实很简单,就是将插件的元数据保存在一个对象的属性中,这个对象可以添加、查找元数据,进而通过元数据找到插件类

2:HookDiscovery

用钩子机制去获取插件类的元数据

3:AnnotatedClassDiscovery

释文发现机制,这也是drupal主要使用的发现机制,下文重点讲解

4:YamlDiscovery

将插件元数据保存在yaml文件中,在drupal核心中使用这种方式来进行本地任务

释文插件类发现机制:

这是drupal最主要使用的插件发现方法,它有个优点:将元数据和类放在一起,在我们写php程序的时候,可以用到行注释“//”和块注释“/* */”,释文发现机制就是利用了块注释,插件是一个类文件,我们将这个插件的元数据保存到类的块注释中,系统扫描插件目录,以字符串方式读取php文件内容(并不以php文件加载的方式,这样就节省了内存使用)然后解析出块注释里面的元数据,就可以通过这些元数据找到对应的插件类了,你可能会问那且不是要进行巨大的计算量?确实如此,但别忘了有缓存,因此这样的计算只会进行一次,况且元数据可以携带许多参数,所以释文发现机制是比较不错的。下面来看一看drupal的具体实现:

预备知识:

释文对象:

插件系统的构成:

插件管理器:

插件定义:

释文语法:

定义释文对象:

默认插件管理器DefaultPluginManager:

附属内容:

云客Drupal源码分析之插件系统(上)相关推荐

  1. 云客Drupal源码分析之插件系统(下)

    以下内容仅是一个预览,完整内容请见文尾: 至此本系列对插件的介绍全部完成,涵盖了系统插件的所有知识 全文目录(全文10476字): 实例化插件 插件映射Plugin mapping 插件上下文   具 ...

  2. 云客Drupal源码分析之配置系统Configuration(一)

    各位<云客drupal源码分析>系列的读者: 本系列一直以每周一篇的速度进行博客原创更新,希望帮助大家理解drupal8底层原理,并缩短学习时间,但自<插件系统(上)>主题开始 ...

  3. 云客Drupal源码分析之权限系统(上)

    系统权限设计架构: 权限系统的终极目的是判断在某情景下谁能对某物做什么或者不能做什么,可以看出有三个基本要素:操作者.被操作者.操作环境(或者叫上下文),对应的权限系统就好像一个警卫,房间里面是被操作 ...

  4. 云客Drupal源码分析之日志系统与监控

    系统日志让你了解系统内部发生了什么,当出现故障时首先想到的就是日志,drupal日志系统可以按信息类别分别记录日志,并且按照RFC 5424和PSR-3将各类信息按紧迫程度划分为8个级别,这样方便筛选 ...

  5. 云客Drupal源码分析之Session进阶

    在本系列之前写过<云客Drupal源码分析之Session系统>,但那部分仅仅讲到了drupal会话的基础:Symfony的Session组件 至于drupal怎么去使用这个基础就是本主题 ...

  6. 云客Drupal源码分析之类型化数据Typed Data API

    各位<云客drupal源码分析>系列的读者: 本系列一直以每周一篇的速度进行博客原创更新,希望帮助大家理解drupal底层原理,并缩短学习时间,但自<插件系统(上)>主题开始博 ...

  7. 云客Drupal源码分析之国际化Internationalization:核心翻译系统

    各位<云客drupal源码分析>系列的读者: 本系列一直以每周一篇的速度进行博客原创更新,希望帮助大家理解drupal底层原理,并缩短学习时间,但自<插件系统(上)>主题开始博 ...

  8. 云客Drupal源码分析之前端js中的翻译

    从本主题开始<云客Drupal源码分析>系列将连续发布和前端js相关的内容,如果您对JavaScript还不熟悉或者需要来一次系统性的整理回顾,在此云客为您准备了以下资料: <PHP ...

  9. 云客Drupal源码分析之数据库Schema及创建数据表

    本主题是<云客Drupal源码分析之数据库系统及其使用>的补充,便于查询,所以独立成一个主题 讲解数据库系统如何操作Schema(创建修改数据库.数据表.字段:判断它们的存在性等等),以及 ...

最新文章

  1. iOS 后台挂起的一些坑
  2. 他来阿里 4 年,刻苦奋斗、稳扎稳打终于爬到 P7 ,他说一定要感谢这几个公众号的指导!...
  3. 图解 Redis 五种数据结构底层实现
  4. 模板:后缀数组(SA)
  5. 您真的理解了SQLSERVER的日志链了吗?
  6. 曾经一手好牌,但如今却被网友怼或已堕落
  7. 暴风集团否认暴风TV公司解散:融资事项正在加紧推进中
  8. 数据挖掘实践(金融风控)——task1:赛题理解
  9. Ubuntu 11.10 下安装 JDK_6_27
  10. Java 拦截器自定义(添加响应头)
  11. 学子商城项目1(项目 第十六阶段)
  12. 近世代数课后习题作业 1
  13. 菲尼克斯交换机FL SWITCH SFN 5TX
  14. PS 前端技能一 白色背景图片变为透明的图片
  15. c语言程序如何防止盗用,如何用C语言程序盗取QQ密码
  16. 移动硬盘插入提示需要格式化RAW_移动硬盘怎么分区,硬盘分区教程学习
  17. java增大字體_往JRE里增加字体
  18. 云服务器操作系统 版本选择,云服务器选择操作系统版本
  19. goland依赖一直飘红解决 MAC GOLANG
  20. floor ceil fract 函数的区别

热门文章

  1. xp计算机时间与网络时间不一致,windows xp系统时间无法同步网络时间怎么办
  2. vim插入字符的各种姿势
  3. 安捷伦网络分析仪面板介绍
  4. 用友java笔试_用友Java类笔试题大全
  5. 上网浏览器如何选?适合的就是最好的
  6. c语言标准库字符串截取,C语言专题——标准库string.h
  7. c#判断输入是否为数字类型
  8. 【IOT数据库】tdengine学习使用,非常方便,速度十分快,开源IOT数据库,支持集群方式进行部署,支持分区,支持Topic,流式计算
  9. 方格网提取高程点lisp_CAD中高程点提取横断面数据的方法
  10. Linux软件太少了,LINUX挺好,可惜应用软件太少