首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
7.1 调用小部件的两种方式
7.1.1 调用widget()方法使用小部件DatePicker
7.1.2 调用begin()和end()方法使用小部件ActiveForm
7.2 项目实现迭代八:使用ActiveForm小部件替换添加文章视图
7.2.1 调用小部件ActiveForm
7.2.2 “文章标题”文本输入框
7.2.3 “文章栏目”下拉列表框
7.2.4 “文章图片”上传文件输入框
7.2.5 “内容”文本输入域
7.3 自定义小部件
7.3.1 继承Widget
7.3.2 自定义小部件的MVC结构
7.4 项目实现迭代九:自定义首页幻灯片小部件
7.5 项目实现迭代十:分页显示列表页
7.5.1 分页组件Pagination
7.5.2 新闻中心列表页实现数据填充
7.5.3 分页的超链接列表小部件LinkPager
8.1 初识资源包类
8.2 Yii2框架资源管理代码分析
8.2.1 视图中注册资源包类
8.2.2 注册资源文件
8.2.3 输出缓冲区的数据
8.3 AssetBundle类的成员属性
8.4 项目实现迭代十一:本书配套项目实现前端资源管理
8.4.1 实现首页前端资源管理
8.4.2 实现新闻中心列表页前端资源管理
9.1 模型中编写验证规则
9.2 控制器中安全赋值
9.3 控制器中触发验证
9.4 视图中提取错误信息
9.5 项目实现迭代十二:完成“添加文章”页面中的模型验证
10.1 AJAX简介
10.2 传统的JavaScript实现AJAX验证
10.2.1 创建AJAX引擎XMLHttpRequest对象
10.2.2 创建HTTP请求
10.2.3 设置响应HTTP请求状态变化的方法
10.2.4 设置获取服务器返回数据的语句
10.2.5 发送HTTP请求
10.3 jQuery实现AJAX验证
10.4 项目实现迭代十三:完成“添加用户”页面的AJAX验证
11.1 用户登录-表单模型
11.2 用户登录-客户端验证
11.2.1 ActiveForm实现客户端验证代码分析
11.2.2 项目实现迭代十四:完成登录页面的客户端验证
11.3 模型中的自定义方法作为rules()验证器
11.4 用于验证用户名和密码的身份类UserIdentity
11.5 项目实现迭代十五:完成用户登录
11.6 保存用户登录状态的yii\web\User类
12.1 访问控制技术综述
12.2 RBAC简介
12.3 RBAC需求分析及功能概述
12.4 项目实现迭代十六:最简方式实现RBAC
12.4.1 数据库设计
12.4.2 用户管理
12.4.3 角色管理
12.4.4 权限管理
12.4.5 用户—角色配置管理
12.4.6 角色—权限配置管理
12.5 项目实现迭代十七:使用yii\rbac\DbManager实现 RBAC
12.5.1 基本概念
12.5.2 用户管理
12.5.3 角色管理
12.5.4 权限管理
12.5.5 权限管理系统验证
12.6 项目实现迭代十八:使用yii2-admin扩展实现RBAC
12.6.1 配置
12.6.2 使用的数据库表
12.6.3 路由列表
12.6.4 角色列表
12.6.5 用户列表
12.6.6 菜单列表
12.6.7 集成AdminLTE后台主题及菜单展示
12.6.8 基于存取控制过滤器(ACF)的用户登录页面
当前位置:
首页>>
技术小册>>
Yii2框架从入门到精通(中)
小册名称:Yii2框架从入门到精通(中)
### 9.5 项目实现迭代十二:完成“添加文章”页面中的模型验证 在Web开发中,数据验证是确保用户输入数据质量和安全性的关键环节。Yii2框架以其强大的模型验证机制,为开发者提供了灵活且易于实现的数据验证方案。在本章节中,我们将详细探讨如何在Yii2项目中为“添加文章”页面实现模型验证,确保用户提交的文章数据符合预设的规则,如标题非空、内容长度适中、发布时间有效等。 #### 9.5.1 理解模型验证的重要性 在Web应用中,用户输入的数据往往是不可控的,可能包含非法字符、空值或不符合业务逻辑的数据。如果不进行验证直接存储到数据库,可能会导致数据污染、程序异常甚至安全漏洞。因此,在数据入库之前进行严格的验证是必不可少的步骤。Yii2的模型验证机制允许开发者在模型中定义验证规则,这些规则会在数据保存前自动执行,从而确保数据的合法性和准确性。 #### 9.5.2 创建或准备文章模型 首先,确保你有一个用于表示文章数据的模型类。通常,这个类会继承自Yii2的`\yii\db\ActiveRecord`类,并映射到数据库中的相应表。假设我们的文章模型名为`Article`,并且已经通过Gii工具生成或手动创建好了。 ```php namespace app\models; use Yii; use yii\db\ActiveRecord; class Article extends ActiveRecord { // 定义表名 public static function tableName() { return '{{%article}}'; } // 后续将在这里添加验证规则 } ``` #### 9.5.3 定义验证规则 在`Article`模型中,我们需要定义一系列的验证规则。Yii2提供了丰富的验证器(Validators),如`RequiredValidator`(必填验证)、`StringValidator`(字符串验证,包括长度验证)、`DateValidator`(日期验证)等,可以直接在模型中通过`rules()`方法定义。 ```php public function rules() { return [ [['title', 'content'], 'required', 'message' => '此项不能为空。'], ['title', 'string', 'min' => 3, 'max' => 255, 'tooShort' => '标题至少3个字符。', 'tooLong' => '标题不能超过255个字符。'], ['content', 'string', 'min' => 10, 'max' => 5000, 'tooShort' => '内容至少10个字符。', 'tooLong' => '内容不能超过5000个字符。'], ['publish_time', 'date', 'format' => 'php:Y-m-d H:i:s', 'message' => '发布时间格式不正确。'], // 可以继续添加其他验证规则 ]; } ``` 在上述代码中,我们为`title`(标题)、`content`(内容)和`publish_time`(发布时间)字段分别定义了验证规则。`required`验证器确保字段不为空;`string`验证器用于检查字符串的长度;`date`验证器则确保日期格式正确。 #### 9.5.4 在控制器中使用模型验证 在控制器中处理表单提交时,我们需要利用模型的验证功能来检查用户输入的数据是否合法。Yii2的`ActiveForm`组件和模型验证机制紧密集成,使得这一过程变得非常简单。 ```php public function actionCreate() { $model = new Article(); if ($model->load(Yii::$app->request->post()) && $model->save()) { // 数据验证通过且保存成功 return $this->redirect(['view', 'id' => $model->id]); } else { // 数据验证失败或未提交数据 return $this->render('create', [ 'model' => $model, ]); } } ``` 在上述`actionCreate`方法中,我们首先创建了一个`Article`模型的实例。然后,使用`load()`方法尝试将POST请求中的数据填充到模型中。如果数据成功加载,`$model->save()`将尝试保存数据到数据库,并在此过程中自动触发模型验证。如果验证失败或数据未通过POST提交,则渲染`create`视图,并将模型实例传递给视图,以便在表单中显示验证错误信息。 #### 9.5.5 在视图中显示验证错误信息 在`create`视图中,我们需要使用Yii2的表单助手(如`ActiveForm`)来构建表单,并显示模型验证的错误信息。Yii2的`ActiveForm`会自动捕获模型验证的错误,并允许我们通过`$form->error()`或`$model->getFirstError('attributeName')`等方法在视图中显示这些错误。 ```php <?php $form = ActiveForm::begin(); ?> <?= $form->field($model, 'title')->textInput(['maxlength' => true]) ?> <?= $form->error($model, 'title') ?> <?= $form->field($model, 'content')->textarea(['rows' => 6]) ?> <?= $form->error($model, 'content') ?> <?= $form->field($model, 'publish_time')->widget(DatePicker::class, [ 'options' => ['class' => 'form-control'], 'dateFormat' => 'php:Y-m-d H:i:s', ]) ?> <?= $form->error($model, 'publish_time') ?> <div class="form-group"> <?= Html::submitButton('提交', ['class' => 'btn btn-primary']) ?> </div> <?php ActiveForm::end(); ?> ``` 在上述视图中,我们为每个表单字段调用了`$form->field()`方法来创建表单项,并通过`$form->error()`方法显示每个字段的验证错误信息。这样,当表单提交且验证失败时,用户可以在页面上看到具体的错误信息,从而知道需要修改哪些内容。 #### 9.5.6 总结 通过本章节的学习,我们掌握了在Yii2项目中为“添加文章”页面实现模型验证的完整流程。从定义验证规则到在控制器中处理表单提交,再到在视图中显示验证错误信息,每一步都至关重要。模型验证不仅提高了数据的质量,还增强了应用的健壮性和用户体验。在未来的开发中,你可以根据实际需求,灵活定义更多的验证规则,以满足不同业务场景的需求。
上一篇:
9.4 视图中提取错误信息
下一篇:
10.1 AJAX简介
该分类下的相关小册推荐:
Workerman高性能框架-GatewayWorker
PHP8实战小册
PHP合辑2-高级进阶
Laravel(10.x)从入门到精通(十八)
Laravel(10.x)从入门到精通(十二)
PHP8入门与项目实战(4)
PHP底层原理及源码分析
Yii2框架从入门到精通(下)
PHP8入门与项目实战(6)
Laravel(10.x)从入门到精通(十六)
Magento零基础到架构师(产品管理)
Magento零基础到架构师(内容设计)