云客Drupal源码分析

云客Drupal源码分析

我是云客,《云客Drupal源码分析》系列的作者,伴随着Drupal 8第一个正式版本发布到现在,该系列已经发布逾150期,超过110万字,作为过来人、同时也是时间最早的第一批用户之一,云客觉得有义务帮助初学者准备好行囊,叮嘱好一路上的注意事项,之前也零星写过一些入门方面的资料,会在本文末给出链接(这些资料也很值得参考),本篇将为您全面整理需要的一切和规划学习步骤,这里假定您是一个刚刚学会php正在寻找下一步方向的开发者。

注意:Drupal 9是Drupal 8的平滑升级,核心架构以及许多方面均相同,因此有关Drupal8的文档通常也适用于Drupal9,D8打下OOP的基础,已成熟部分不会做调整

首先是语言问题,Drupal是国际协作的开源软件,以英语作为主要沟通语言,因此很多第一手资料是英语的,但不用担心,一是现在中文资料已经有很多了,二是在官网文档和源代码注释里面使用的英语都非常简单,建议您安装有道词典,该软件可以划词翻译,很方便,在翻译软件的帮助下,八零后初中英语水平(学时三年),在学习上应不成问题,如果换成现代教育,小学英语水平即可,不要被英语阻碍了您的步伐,事后会发现其实这没什么。

然后是搭建本地开发环境,假定您使用win操作系统,这里推荐您使用phpwamp或者phpStudy集成套件,这两个软件都很优秀,它们集成了多个php版本、主流的三种服务器软件、多个mysql版本等等,可以随意切换, 经过简单的配置和本地hosts文件修改就可以在本地安装多个任意域名的站点,对于开发而言非常方便

再选择一款优秀的集成开发工具(IDE),这里推荐您使用phpstorm,这是一款非常优秀聪明的开发工具,智能化水平非常高,在新建项目时内置了以drupal模块方式新建,开启Drupal集成支持后,在开发上带来极大的辅助,这里列出一些最常用的操作和快捷键:
打开drupal类文件:“Ctrl+N”,粘贴类的完全限定名称,回车即可,因为Drupal系统使用PSR-0和PSR-4标准的类自动加载器,phpstorm会依据这自动打开,因此您不需要到文件系统里去手动查找,非常方便,此外对着类名点击鼠标中键可以起到同样的作用,也正因为drupal使用自动加载机制,所以在很多资料里面在谈及某个类文件时,只给出全限定类名,而不会提到类文件的路径,有经验的开发人员或IDE能够通过类名判断出文件所在位置
格式化代码:“Ctrl+Shift+Alt+L”打开格式化代码对话框
添加删除注释:行注释“Ctrl+/”,块注释“Ctrl+Shift+/”,删除时再按一次即可
在某路径下所有文件中查找某字符:“Ctrl+Shift+F”,这非常有用,可以用来查找钩子或函数在哪些地方被使用,关于该功能另外一款软件Sublime也很不错
查看一个类或接口在哪些地方被使用了:光标定位到类名,再点击“Ctrl+B”或“Ctrl+ Alt+B”
云客通常使用4种开发工具,phpstorm是最喜欢的,她还有很多非常棒的功能,这里不一一例举了

在Drupal里面有些变量非常巨大,且存在循环引用问题,如果您采用print_r($var);或var_dump($var);的方式查看,即便有16GB的内存,系统也会被耗尽卡死,因此您需要使用断点调试工具,关于这请查看云客的专门介绍:《php调试工具Xdebug使用教程》,地址:
http://www.indrupal.com/node/158
如果你觉得断点调式不方便也可以安装“yunke_help”模块来打印大变量,这是《云客Drupal源码分析》的配套模块,见下文

开发所需的环境和工具准备好了,我们来谈一谈学习步骤:
首先您需要知道一些基本的Drupal概念,比如:实体、插件、释文、钩子、主题、区块等等,因此建议您花一周的时间去官网浏览一些基本文档,同时也熟悉官网的结构,浏览完后您依然会对一些概念不甚理解,但没有关系,有一个初步的印象足够了,接下来去查看中文资料,对一些疑惑的地方做进一步的了解,以下这些网站都很不错:
  爱码文档汇:http://www.nowicode.com/
  drupal中国:http://drupalchina.cn/
  drupal大学:http://www.drupal001.net/
还有很多,不一一列举了,在浏览这些网站的时候不要对一些高深的内容惦念不放,这一阶段的主要目的是熟悉基本概念、社区、资料来源等等,这会为以后的学习打下基础
接下来您需要一本简单的较系统的介绍Drupal如何使用的中文书籍,推荐《Beginning Drupal 8》,地址:
     http://drupalchina.cn/node/6096
该书着重讲解如何使用Drupal,不涉及开发内容,篇幅不多,但较为系统的让您融会贯通了一次,有了一次完整的使用体验,此时您应该可以在使用层面获得一些成就感,对Drupal的强大有更加深入的了解了,此时请您在心里感谢一下那些参与该书翻译的社区成员,龙马组织大家花费了很多的时间,云客有幸也参与了其中一章的翻译,感受到社区的力量和良好氛围,各类翻译工作还在继续,有朝一日您成为过来人也请不要忘记辅助正在入门的新人。

现在您的基础已经足够了,可以开始学习开发,首先您需要对整个系统的主要结构有所了解,drupal是典型的结构简单,但细节繁多,这里需要告诉您一句话:任何web系统都是将请求转化为响应的系统。这是一个非常朴实但博大的理念,这是由symfony框架提出的,symfony在这个理念基础上设计了系统基本流程,如图:

Drupal核心执行流程图
Drupal核心执行流程图

该图非常重要,详细请参考:
  https://symfony.com/doc/master/components/http_kernel.html
这也是Drupal的核心执行流程,是系统的核心骨架,同时Drupal也采用了symfony框架的部分组件,因此该链接应是您学习开发时详细阅读的第一篇资料。

关于Drupal和symfony的关系,需要在这里进行一下说明,有一些资料说Drupal是基于symfony的,这里要告诉您这不能说错,但并不恰当,准确的说法是drupal采用了symfony的一些组件,在代码量上symfony占比是非常小的,而且采用的组件中非常多的地方经过了继承修改,如果说是“基于”,那么容易误导学习者,让人误以为必须要先学习symfony才能开始学习Drupal,而事实上完全没有必要,当然如果您已经学习过symfony那么对Drupal的学习会很有帮助,没有学过也没关系,您可以直接开始学习Drupal。说是 “基于”还带来一个误解,一些评论人员会说symfony的bug会影响到Drupal,使得Drupal不安全,更有甚者说Drupal会受制于symfony,其实都是庸人自扰,他们太过高估了symfony的代码占比,又低估了Drupal对symfony的继承修改,云客在此想告诉您:事物的发展是递进的,依次建立在前者的基础上,对前者的担心没有必要,就像我们做web开发不会去担心操作系统或者硬件是不是足够好一样,Drupal作为一款优秀的开源系统势必会接纳和采用已有的优秀第三方组件。

在了解了核心流程骨架后您可以从系统的入口index.php文件开始看一看,接下来马上就是对composer运用的学习,她负责加载系统运行中的所有类文件,此时您可以开始阅读《云客Drupal源码分析》系列了,从第一篇开始阅读,此系列是依据系统执行流程发布的,跟您的探索步骤相吻合,虽然取名为源码分析,实则也是开发者教程,是云客从不知道变为知道的过程中留下的资料,非常注重学习者的心理状态,在您的学习路上答疑解惑,Drupal很庞大,这个过程会很漫长,云客将在此系列的字里行间常伴您左右,直到您可以成为一名Drupal核心贡献人员,这个过程中您仅需要的是:坚持,祝您心有所成,坚持并快乐着。

云客为您准备了一个学习模块:yunke_help模块,下载链接:
   http://www.indrupal.com/yunkehelp
该模块专门为drupal学习者打造,适用于D8及以上版本,通过她您可以查看到系统的许多数据,也提供了一些常用操作,不管是学习还是正式的开发,都带来极大的方便,如果您需要一些开发方面的示例代码,可以下载官网的示例模块,下载地址:
   https://www.drupal.org/project/examples
更多的资源链接已经集成到了yunke_help模块,请下载查看

最后讲一讲drupal大版本的区别和联系:
在drupal7时,系统是用过程式代码开发的,伴随php语言本身的发展,drupal8实现了一次大飞跃,采用面向对象方式开发(oop),重写了几乎所有代码,因此对于学习而言,版本8是一个新的切入点,您不需要去专门学习D7版本;发展是递进的,D8虽然代码重写了,但很多思想和概念是历史版本的沉淀和延续,如您有兴趣可以多去了解D7版本,如果您学习过D7那么学习D8会容易许多;Drupal9在2020年6月推出,但您不必担心学习资料过时,尽管很多资料是直接提到“Drupal8”,因为D9是在D8基础上平滑升级,变化远远没有D7到D8那么大,已成熟部分不会改动,更多的是新功能加入,和累积弃用代码删除,在云客看来对于开发者的影响会非常小,因为已经跨入了OOP方式,极大部分代码是不需要变化的,所学内容会被自然延用。

相关链接:
《drupal心得:难的价值、未来趋势、拥抱王者》(写于2018年):
http://www.indrupal.com/node/165

《为什么选择drupal?为什么做贡献?怎么学?怎么贡献?》(写于2017年):
https://blog.csdn.net/u011474028/article/details/74295701

《drupal 8 入门》 (写于2016年,强烈推荐看一看,对理解系统整体架构很有帮助):
https://blog.csdn.net/u011474028/article/details/52514472

“水滴间”网站建立前《云客drupal源码分析系列》发布于以下博客(现该博客已不再更新,仅存留历史内容):
https://blog.csdn.net/u011474028

专业drupal文档网站:
http://www.nowicode.com/

外记:
《云客drupal源码分析系列》已于2020年8月前成功完成,耗时6年,总字数110余万字,您可以提前看一看完结总结,请见:
   《完结篇,云客drupal源码分析系列终于完成了
   http://www.indrupal.com/drupal/success

我是云客,【云游天下,做客四方】,微信号:indrupal,欢迎转载,但须注明出处,讨论请加qq群203286137

 

 

 

本书共161小节。


目前全部收费内容共295.00元。购买全部

评论 (3)

    • 2017-04-08

    感谢云客的分享,也欢迎大家就本专栏中的问题留言讨论。

    • 2017-11-23

    各位《云客drupal8源码分析》系列的读者:本系列分享希望帮助大家理解drupal8底层原理,并缩短学习时间,但部分重点内容在博客仅发布前言和目录,这是因为:drupal在国外如此流行但在国内却很小众,一个重要原因应该是中文资料的缺乏,我们是否能够找到一种方式来激发高质量的中文资料出产?此时同是积极推动者的晴空提出能否用付费阅读的方式来鼓励更多教程作者?并建立了一个付费阅读drupal资料的网站,学习者仅需支付很少费用即可查询到最用心的知识注解,避免大量查找资料,可以节省大量学习时间是划算的,作者也能分配精力去开发高质量内容而得到回报,drupal是精品中的精品,超过一半的世界五百强用她做网站,难能可贵,国内普及初期需要一个良好的土壤,普及开后免费内容会越来越多,为了支持国内发展,云客决定将重点内容放在晴空的这个网站上收费阅读,读者只需要微信支付很少费用即可,云客在这里承诺该系列得到的所有订阅费用全部捐献给drupal深圳社区,用以组织活动等等,发展社区需要大家贡献力量,该网站于2017年3月29日上线,请移步:http://nowicode.com/ 阅读本篇完整版

    我是云客,【云游天下,做客四方】,微信号:php-world,欢迎转载,但须注明出处,讨论请加qq群203286137

    • 2021-12-17

    George Bernard Shaw said “The reasonable man adapts himself to the world; the unreasonable one persists in trying to adapt the world to himself. Therefore, all progress depends on the unreasonable man.” 

    萧伯纳说,识时务的人适应社会。不识时务的人坚持试着让世界适应自己。因此,所有的进步,都有赖于那不识时务的人。

    在这个信息爆炸、标题党横行、只要你稍微有点追求你就会特别焦虑——偏偏到处都还喜欢贩卖焦虑的时代里,你可以很容易的发现这样一件事实:写小众技术类书籍和写言情、穿越小说是完全不一样的。因为人家一天的销量能顶你三年。

    其实Drupal中文社区的每一个人都是这本书的见证者。我们看到他几乎每个周五都会发一篇。随随便便,少则两三千字,多则上万——就这样一直持续了6年。时间真是过得很快。不过时间是公平的,每个人每天都只有24个小时。有些人会选择每周发布一篇自己的文字,也会有其他一些人选择每天发两篇别人写的东西。这背后都一定有着他们自己的原因。Drupal和她的社区,能够走到今天,多半还是因为有那么一些人,真的喜欢Drupal。所以很多时候,其实原因很简单,能坚持下去仅仅只是因为“喜欢”。

    了解我的人,知道我也写过两本Drupal教程,2014年-2015年,2017年-2019年我分别写了一本关于Drupal7和Drupal8的主题教程。令人欣慰的是,看的人不少,反响也不错。很多圈内的朋友后来告诉我,他们入门Drupal是从看我的教程开始的。我的这两本书加上云客的《源码分析》,也就构成了NowICode最初的内容,后来经过社区其他同好的帮助,又集合了其他几本书的内容。形成了现在的网站。网站很小,对于初学者来说,仅仅是刚刚够用而已。

    NowICode因为是我自己在做运营,后台数据告诉我,《源码分析》的阅读量其实并不高。远远没有我的主题教程受欢迎。很奇怪吗?其实不然,就好象你会看到满大街卖U盘和“祖传贴膜”的,但是却没有人卖光刻机。如果我们从收入的角度去衡量云客用六年时间写110万字但是却只有很少的人看,这件事儿,你会发现,他就好像是一个在20年30年前的中国研究和制造光刻机的人。英文中有个非常贴切的成语来形容他,“He is way ahead of his time”。所以,这本书的众筹之路估计会比较坎坷。

    但是,在这里,我想说的是,无论这本书是否能众筹成功,云客都是成功的。就好象当年所有的人都觉得手机应该可以待机一个月并且用来砸核桃的时候,乔布斯却不认同;就好象当年大家都不喜欢在线购物的时候,马云却不认同。人类第一次登月成功之后,肯尼迪曾经这样说:“We choose to go to the Moon in this decade and do the other things, not because they are easy, but because they are hard.” 

    所以,一件事情在大多数人眼里看来,是不可能或者没意义的,但是你不认同,你坚持做完了,这就是你的成功。因为,你为人们树立了一个里程碑,让人们知道,哦,原来还有这么一件事儿。

    六年时间很长,等于一个孩子大半的童年,现在终于写完了,希望云客能有更多时间陪孩子和家人。

    晴空

    2020年7月于美国