Drupal 8模块开发
了 ContextAwarePluginBase,ContextAwarePluginBase 使用了 StringTranslationTrait。所以$this->t()被引入到了 BlockBase 内。
创建表单
现在创建个简单的表单。不幸的是 Examples 没有包含表单的例子,我们利用它里面的 page_example模块创建下。
创建的表单包含一个 email 字段,这是 Drupal 8 新增加的表单元素。
默认 Drupal 8 会校验输入的值是否是 email 地址,代码也使用了校验函数确保输入的 email 是 .com 的。
输入错误会设置个表单错误,正确会输出一句提示信息。 下载文件
* Contains \\Drupal\\page_example\\Form\\PageExampleForm. */
namespace Drupal\\page_example\\Form;
use Drupal\\Core\\Form\\FormBase;
use Drupal\\Core\\Form\\FormStateInterface;
class PageExampleForm extends FormBase {
/**
* {@inheritdoc}. */
public function getFormId() { return 'page_example_form'; }
/**
* {@inheritdoc}. */
public function buildForm(array $form, FormStateInterface $form_state) { $form['email'] = [ '#type' => 'email',
'#title' => $this->t('Your .com email address.') ];
$form['show'] = [ '#type' => 'submit',
'#value' => $this->t('Submit'),
16
Drupal 8模块开发
];
return $form; }
/**
* {@inheritdoc} */
public function validateForm(array &$form, FormStateInterface $form_state) { if (strpos($form_state->getValue('email'), '.com') === FALSE) {
$form_state->setErrorByName('email', $this->t('This is not a .com email address.')); } }
/**
* {@inheritdoc} */
public function submitForm(array &$form, FormStateInterface $form_state) {
drupal_set_message($this->t('Your email address is @email', ['@email' $form_state->getValue('email')])); }
=>
上面的代码和 Drupal 7 创建表单很相似,只是使用了面向对象的方式。这是因为 Drupal 8 的表单 API 除了增加新元素和作了类封装以外基本没动。
PageExampleForm中的代码由下面几件事组成:
为 PageExampleForm 类设置了名字空间,继承了核心 FormBase 类。 实现了 4 个方法,3 个和 Drupal 7 类似。
getFormId()是一个新的、必须定义的方法,只是返回表单机器名。
buildForm()也是必须定义的,它返回一个渲染数组,类似 Drupal 7 的 hook_form 。
validateForm()是可选的,进行校验,类似 Drupal 7 的hook_form_validate 。 submitForm()执行提交处理,类似 Drupal 7 的hook_form_submit。
定义路由
为了使用表单,路由是必须定义的,我们追加到之前的page_example.routing.yml文件内。
page_example_form:
path: '/examples/page_example/form' defaults:
_form: '\\Drupal\\page_example\\Form\\PageExampleForm' _title: 'Demo Form' requirements:
_permission: 'access simple page'
在 defaults 下使用 _form 替换_controller,指定目标是一个 Form 类。
清空缓存,访问http://mysite.com/examples/page_example/form,你会看到这个
17
Drupal 8模块开发
表单。
如果你熟悉 drupal_get_form(),可能会想怎样像 Drupal 7 那样加载一个表单呢?
Drupal 8 中使用全局类,你会用到 formBuilder() 方法:
$form = \\Drupal::formBuilder()->getForm('Drupal\\demo\\Form\\DemoForm'); 这个 $form 返回的是可渲染的数组。
2.3 :实验室和其他信息
总结
本课我们继续探讨了 Drupal 8 模块开发的两个新主题:区块和表单。
已经知道怎么创建区块,也学习了通过实现 FormBase 类创建简单的表单。
Drupal 8 中的区块现在是可重用的插件。 类开始要定义名字空间。
文件能够包含核心或者其他资源的类。
注释中包含了注解,用于表征类的元数据。 完整步骤
切换到 Examples 模块
创建新的模块目录 block_example 切换到 block_example 目录
创建 block_example.info.yml 文件
粘贴例子代码到 block_example.info.yml 文件 创建 src/Plugin/Block 目录 切换到 src/Plugin/Block
创建 ExampleEmptyBlock.php 文件
粘贴例子代码到 ExampleEmptyBlock.php 文件 激活模块 清空缓存
去 /admin/structure/block 查看新定义的块 添加块到某个区域,查看显示效果
18
Drupal 8模块开发
创建 ExampleConfigurableTextBlock.php 文件
粘贴例子代码到 ExampleConfigurableTextBlock.php 清空缓存 测试配置表单
在 page_example 下创建 src/Form 目录 切换到 src/Form 目录
创建 PageExampleForm.php 文件
粘贴例子代码到 PageExampleForm.php
编辑 page_example.routing.yml 文件添加路由 清空缓存
测试 http://mysite.com/examples/page_example/form 附加活动
这些额外的练习可以扩充你的知识,加深对本课概念的理解。
创建一个显示图片广告的区块
创建表单区块或页面,向表单中设置的地址发信。 利用区块插件创建自己的实体。
研究下为啥有些开发者抵制使用注解。
第三章 表单配置和管理
3.1 :配置表单和管理
本课介绍”配置表单”和”配置管理(CM)”。
19
Drupal 8模块开发
Drupal 8 把 Drupal 7 中的配置信息和函数收集起来用一个独立的系统管理。
本课…
学习 CM(配置管理)。
组装examples/configform_example模块。 学习配置表单。
探讨构建配置表单。
创建*.settings.yml,介绍使用 CM 为模块存储配置。
配置管理
Drupal 8 配置管理(CM)由配置 API驱动,为模块存储配置数据提供了一个核心位置。 这可以简化类似站点名称等静态数据或者字段定义、图片样式等复杂对象的配置。 这意味着 Drupal 8 核心有了 Drupal 7 Features模块的功能。
Drupal 8 为不同安装环境(例如开发、分期和生产)的配置变化提供了倒入、导出的用户界面。
这样就可以分开配置不同的环境。
使用Configuration inspector 模块,你可以在 Drupal 管理界面直接查看各个配置,而无须在文件系统内查看 YAML 文件。
模块开发者可以提交 {module}/config/install 目录内的 YAML 文件,定义配置设定的构成,使用版本控制软件跨多个环境进行发布。
也有一个加载配置的上下文系统,使自定义多语言站点更加容易,这个可以通过 schema 文件实现。
被 CM 替代的 Drupal 7 函数
CM 替代了 Drupal 早期使用的几个函数。核心思想是这些函数被整合到 CM 系统,统一处理配置数据。
variable_set() variable_get() variable_del() hook_update_N()
drush features-update ctools_export_object()
ctools_export_load_object() $conf[...];
配置表单
我们创建 PageExampleForm 时继承了FormBase,FormBase 是 FormInterface(提供了一个表单的接口)的一个简单实现。
20
百度搜索“70edu”或“70教育网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,70教育网,提供经典综合文库drupal8模块开发(4)在线全文阅读。
相关推荐: