跳转到主要内容
sina_门前小雨 提交于 12 April 2016

前言

原文地址https://cipix.nl/understanding-drupal-8-part-1-general-structure-framework

排版更好的WORD版本http://wenku.baidu.com/view/820e0805b8f67c1cfbd6b8d7

译者学习过面向对象和J2EE,近日喜闻Drupal倒向面向对象所以特来学习。之前只大概浏览过一本讲Drupal7的书,所以对Drupal中的名词和概念理解不深。翻译大都站在面向对象和J2EE的角度。译者了解名词一致的重要性,所以如有错误和表述不当之处请及时与译者联系,译者正是想通过交流学习进步,也免得误导他人。

灰色的不是正经的注释可以直接跳过。

下面是译者觉得在翻译过程中出现的可能有争议的词汇表

启动流程(bootstrapping

日程分发(routing)——找到处理url的代码的过程——虽然路由用来形容“按照流程选择网络请求由谁怎么处理”也不是不行,但译者觉得容易和路由器的功能混淆,特别路由最常用的解释不在程序这边而在网络这边。如果国家管翻译的那个委员会有确定的标准请通知译者。

日程(route名词)——由模块注册的处理特定url的代码。

执行日程(route动词)

特征(features)——不受配置影响的性质

特性(attributes)——由配置改变的性质

捆绑(bundle动词)

捆绑bundle名词)——用筐装一起多形象——Drupal中实现分类的方法

“们”后缀(特别强调复数时,如:类们)

Drupal的结构

Drupal 8来了,相对于7代是6代的改进,它是个彻底的改变。Drupal 8有全新的架构和编码方式。我确信这是使这个CMS(内容管理系统,要是连这个名词都不知道就来学Drupal心是有多大啊)加专业和现代化所需要的。我相信核心开发者的更改会提升软件的整体质量。我感谢核心开发者所做的工作和他们做出改变的勇气。

尽管学习Drupal 8对于过去的和新的网格开发都都是一个巨大的挑战,但你可以通过阅读这篇文章取得一些优势。在你投入Drupal 8的模块开发之前,这篇文章能够给你一个起始点。我通一步步调试和阅读在线文章的方式学习Drupal 8已经有一段时间了。我是个经验丰富的Drupal 7开发者,但之前完全不了解Symfony框架,也不是Drupal 8核心的开发者。我相信我的分享会使你加深对主题的理解。

这篇文章总共包含四个章节。在章节一中我们将浏览Drupal 8框架的总体结构,特别是它与Symfony 2框架组件的关系。我们将看到Drupal 8用到了哪些Symfony 2框架组件,和如何使用的。在第二章中我们将仔细察看最重要的服务容器(service container)。在第三章中将仔细察看Drupal 8的启动流程(bootstrapping)和日程分发(routing)。你将会学习网络请求是如何被处理的。在最后一章会描述Drupal 8的特征(features)(特征是不因设置或存储内容改变的性质,而特性——attributes会随着配置的不同而不同),重要的、新的和令人样一些眼前一亮的新

Symfony 2框架

Symfony框架的设计目的是为了帮助开发者们建立他们自己的网络应用程序。Symfony框架并不是CMS,不能用来管理站点。不同在于,你用代码创建的必须是应用(所以现在Drupal是Symfony的一个应用实现了)。Symfony框架为创建应用定义了非常有效率的方式。理论上讲CMS可以单纯地编写为一个Symfony框架的应用。但是实践中Symfony框架的简洁性并不符合Drupal的要求(改动了人家的核心的借口:)。

Drupal 8有选择地使用的Symfony框架卓越的核心层,并为了实现Drupal 8模块扶持扩展了它。这实质上是将Symfony框架的核心层扩展为了CMS层(作者在这里把这个系统——Drupal 8定义为平衡系统,译者不知道是什么意思,不过觉得不影响理解)。这样等于把两者最好的部分整合在了一起。

组件(Compoents)

Symfony框架由许多组件组成。有的组件是必需组件,像是Http Foundation组件。这个组件能理解HTTP协议并且提供供其它组件使用的request和response对象。其它的组件就仅仅是辅助组件了,像是帮助验证数据的Validator(验证器)组件。系统的核心是内核(Kernel)组件,它可以看作是有主函数的类(main class程序从这里开始),负责管理支行环境(服务services和捆绑筐bundle)并对http请求做出回应。

开发者也许会通过扩展核心的方式扩展系统,就像AppKernel扩展了Kernel,之后再添加一些自己的捆绑筐。这些捆绑筐可以用来创建针对特定目的(coherent)的代码,就像Drupal中的模块一样。

Drupal只使用了Symfony组件中的一些,下面是对照图:

overview_use_symphony_components_drupal_8.png

红色的没有用,黄色的改了,绿色的直接用。

Drupal 8如何扩展Symfony2框架

Drupal并没有像通常的Symfony2网络应用一样扩展Symfony核心,而是通过实现接口的方式提供了与其一样的方法。这是因为Drupal对于“捆绑”的定义与Symfony不同。Symfony的捆绑是非常好的创建网络应用程序的方式,但并不适合创建一个需要非常高灵活性和扩展性的CMS。Drupal核心加载运行环境(服务和模块)的方式与Symfony核心有些许的不同,但同样也会把网格请求的处理交给HttpKernel

更进一步,Drupal 8有自己的组件和内核代码。下面的图片展示了其概要。

schematic_overview_3rd_party_components_en_core_code_drupal.png

总结

下一章我们将学习服务容器(Service Container),它可以被认为是Drupal系统的中枢。在了解其它组件之前应该先了解它。

Drupal 版本