drupal8 模块开发 读书笔记 1

这个依赖注入有个管理的东西,假设是InjectionManager
然后框架,比如说是Framework
现在Framework 想要 实例化一个controller
它就问InjectionManager要这个Controller的实例

https://segmentfault.com/a/1190000002411255
如何理解依赖注入和控制反转

1--控制器等价于Drupal 7中hook_menu()内的页面回调函数:page callback
  命名:class moduleNameController
    位置:控制器被要求放在src/Controller目录下
         其他类也许放到src下面的其他文件夹目录下    
2--一个路由是从一个URL路径到一个控制器的映射:路由就是一个映射
3--

文件名的秘密
page_example.info.yml
page_example.routing.yml
PageExampleController.php
page_example.links.menu.yml
模块名-功能名-格式(php|yml)
其中功能名可以细分:type+name的方式

type是需要的新属性,可以设置为module或theme

获得一个路径:
$simple_url = Url::fromRoute(‘page_example_simple‘);
$simple_link = \Drupal::l(t(‘simple page‘), $simple_url);

名字空间只会影响以下代码类型:
  -- 类(包括abstracts traits 类),接口,函数和常量

use Drupal\page_example\Controller
之后你就可以使用Controller目录下的文件了。

hook_menu() 系统被分解为
modulename.routing.yml
和modulename.links.menu.yml
等文件。

插件(plugins)也是实体(entities)
区块很好地被封装在一个独立文件内
区块内容只在一个文件内
创建src/Plugin/Block目录

@Block(
 * id = "example_empty",
 * admin_label = @Translation("Example: empty block")
 * )

配置表单允许你使用用户界面设置显示在区块内的
Drupal 8 内每片代码都尽可能的自包含。意味着大多数函数不再暴露在全局范围
内而是被封装在类里。因此不推荐像Drupal 7 那样直接使用l()或t()这样的函数。

Traits 本质上就是我们Drupal 7 使用的include,它提供能够被包含在任何类中
的额外方法。TRAITS就是一个类,一个小好似机动性比较强的类,可以无限制的被
其他类use也就是include

通过在BlockBase中包含StringTranslationTrait,我们可以使用它的任何方
法,就如同这些方法在BlockBase中一样。$this->t()定义在StringTranslationTrait
内。BlockBase 继承了ContextAwarePluginBase,ContextAwarePluginBase
使用了StringTranslationTrait。所以$this->t()被引入到了BlockBase
内。

如果你熟悉 drupal_get_form(),可能会想怎样像 Drupal 7
那样加载一个表单呢?
Drupal 8 中使用全局类,你会用到 formBuilder() 方法:
$form = \Drupal::formBuilder()->getForm(‘Drupal\demo\Form\DemoForm‘);
这个 $form 返回的是可渲染的数组。

Drupal 8 把 Drupal 7 中的配置信息和函数收集起来用一个独立的系统管理。

Configuration Manager
Hide Allows administrators to manage configuration changes.
Machine name: config

模块开发者可以提交
{module}/config/install目录内的YAML
文件,定义配置设定的构成,使用版本控制软件跨多个环境进行发布。

FormBase
ConfigFormBase
FormInterface

Drupal 8 中使用配置API 可以把例如变量或模块提供的配置信息存储在
YAML 文件内。当模块被激活时,YAML 内的信息会立刻被导入数据库,
导入的目的是为了改善性能。一旦数据库被改变你可以很容易的导出为
YAML 文件,重新部署。

当为模块提供配置时,可以通过一个特定的YAML 文件为配置设定默认值
YAML 文件放置在config/install目录内).

模块只有被安装时才会被导入到数据库,所以如果模块已经被安装了你必须卸载重新安装。

时间: 2024-11-10 14:42:36

drupal8 模块开发 读书笔记 1的相关文章

驱动开发读书笔记. 0.05 linux 2.6 platform device register 平台设备注册 2/2 共2篇

驱动开发读书笔记. 0.05 linux 2.6 platform device register 平台设备注册 2/2 共2篇 下面这段摘自 linux源码里面的文档 : 内核版本2.6.22Documentation/driver-model/platform.txt找到一篇译文:http://blog.csdn.net/yili_xie/article/details/5193609 Device Enumeration 82 ~~~~~~~~~~~~~~~~~~ 83 As a rule

驱动开发读书笔记. 0.02 基于EASYARM-IMX283 烧写uboot和linux系统

驱动开发读书笔记. 0.02 基于EASYARM-IMX283 怎么烧写自己裁剪的linux内核?(非所有arm9通用) 手上有一块tq2440,但是不知道什么原因,没有办法烧boot进norflash或者nandflash:只好用另一块arm9(i.mx283a)来继续学习: 从开发教程上面可知,烧写uboot和Linux是通过各种批处理脚本和exe程序来执行的,称之为固件烧写,然而并没有需要我们选择uboot路径.Linux内核和文件系统的地方.这样的话是不是意味着只能烧写官方默认提供的文件

驱动开发读书笔记. 0.04 linux 2.6 platform device register 平台设备注册 1/2 共2篇

驱动开发读书笔记. 0.04  linux 2.6 platform device register 平台设备注册  1/2 共2篇下面这段摘自 linux源码里面的文档 : Documentation/driver-model/platform.txt Device Enumeration 82 ~~~~~~~~~~~~~~~~~~ 83 As a rule, platform specific (and often board-specific) setup code will 84 reg

驱动开发读书笔记. 0.06 嵌入式linux视频开发之预备知识

驱动开发读书笔记. 0.06  嵌入式linux视频开发之预备知识 由于毕业设计选择了嵌入式linux视频开发相关的项目,于是找了相关的资料,下面是一下预备知识 UVC : UVC,全称为:USB video class 或USB video device class.是Microsoft与另外几家设备厂商联合推出的为USB视频捕获设备定义的协议标准,目前已成为USB org标准之一. UVC linux driver: UVC linux 驱动 需要在编译内核的时候选上 配置内核 Device

《敏捷软件开发读书笔记之一》

要想成为一名优秀的软件开发者,需要熟练应用编程语言和开发工具,更重要的是能够领悟代美代码背后的原则和前人总结的经验——这正是本书的主题.本书凝聚了世界级软件开发大师RobertCMartin数十年软件开发和培训经验,不仅是一部深入浅出.生动易懂的面向对象原则与模式著作,而且还是一部通俗的敏捷方法导引书和快速实用UML教程.分为敏捷开发,敏捷设计,薪水支付案例研究,打包薪水支付系统,气象站案例研究和ETS案例研究六个部分,包含30个章节.以下是我对前两个部分的认识及见解: 以下六章是对第一部分敏捷

驱动开发读书笔记.0.00 从拿到一块开发板开始

当我们手上有一块arm开发板,我们应该怎么下手呢?(假设你有少许计算机和电子的基础) 1.01安装桌面版linux: 你可以装虚拟机 或者 双系统windows + linux [假装有链接] 1.如果你会重装系统,我建议你装双系统或直接ubuntu,end 2.如果你不会重装系统,跳到3 3.学会它,跳到1 1.02:开发板上装系统[链接以后再补] 烧boot 烧内核 烧文件系统 讲真,如果你看到这三个名词之后蒙圈了,请左拐去预习/复习操作系统 1.03 系统安装完成,开发板怎么和PC进行通信

Android驱动开发读书笔记六

第六章 Linux 驱动的工作和访问方式是 Linux 的亮点之一,Linux 系统将每一个驱动都映射成一个文件.这些文件称为设备文件或驱动文件,都保存在/dev目录中,由于大多数Linux驱动都有与其对应的设备文件,因此与Linux驱动交换数据就变成了与设备文件交换数据.介绍到如何在多种平台,使用多种方式测试Linux驱动.给出的实例是统计单词的个数,但是关键还在实现该算法的技术是Linux 驱动. (一).编写Linux驱动程序的步骤 1.建立Linux驱动骨架(装载和卸载Linux驱动)

《敏捷软件开发读书笔记之二》

接下来,我将向大家介绍第三部分“薪水支付案例研究”和第四部分“打包薪水支付系统”这两部分的认识,以及从中得到的收获: 以下是我从第三部分“薪水支付案例研究”中学到的相关知识以及个人的一些总结: Command模式的简单性掩盖了它的多功能性,此模式可以应用于多种能够不同的美妙用途,范围涉及数据库事物操作,设备控制,多线程核心以及GUI的Do/Undo管理,此模式是在实际的软件开发中是非常有用的. TEMPLATE METHOD模式和STRATEGY模式都可以用来分离高层的算法和低层的具体 实现细节

敏捷软件开发读书笔记(三)

敏捷设计 如果敏捷性(Agility)是指以微小增量的方式构建软件,那么究竟如何去设计软件呢?又如何去确保软件具有灵活性.可维护性以及可重用性的良好结构呢? 在敏捷团队中,全局视图和软件一起演化.在每次迭代中,团队改进系统设计,使设计尽可能的适合当前系统.团队不会花费许多时间去预测未来的需求和需要,也不会试图在今天就构建一些基础结构去支撑那些他们认为明天才会需要的特性.他们更愿意关注当前的系统结构,并使它尽可能的好. 那么怎么才能保证全局视图和软件一起演化呢?在软件出现下面任何一种气味时,就表明