Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
Y
yii2
Project
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
PSDI Army
yii2
Commits
69decac8
Commit
69decac8
authored
Oct 29, 2014
by
东方孤思子(Paris·QianSen)
Browse files
Options
Browse Files
Download
Plain Diff
merge from funson86
parents
e26def39
acfc3d3e
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
15 additions
and
15 deletions
+15
-15
start-forms.md
docs/guide-zh-CN/start-forms.md
+15
-15
No files found.
docs/guide-zh-CN/start-forms.md
View file @
69decac8
使用表单
==================
本章
将介绍如何创建一个从用户那搜集数据的表单页。该页将显示一个包含 name 输入框和 email 输入框的表单。当搜集完这两部分信息后,页面将会显示用户
输入的信息。
本章
节介绍如何创建一个让用户提交数据的表单页。该页将显示一个包含 name 输入框和 email 输入框的表单。当提交这两部分信息后,页面将会显示用户所
输入的信息。
为了实现这个目标,除了创建一个
[
操作
](
structure-controllers.md
)
和两个
[
视图
](
structure-views
)
外,还需要创建一个
[
模型
](
structure-models.md
)
。
...
...
@@ -39,16 +39,16 @@ class EntryForm extends Model
}
```
该类继承自
[
[yii\base\Model
]
],Yii 提供的一个基类,通常用来代表表单
数据。
该类继承自
Yii 提供的一个基类
[
[yii\base\Model
]
],该基类通常用来表示
数据。
> 补充:[[yii\base\Model]] 被用于普通模型类的父类并与数据表**无关**。[[yii\db\ActiveRecord]] 通常是普通模型类的父类但与数据表有关联。
> 补充:[[yii\base\Model]] 被用于普通模型类的父类并与数据表**无关**。[[yii\db\ActiveRecord]] 通常是普通模型类的父类但与数据表有关联
(译者注:[[yii\db\ActiveRecord]] 类其实也是继承自 [[yii\base\Model]],增加了数据库处理)
。
`EntryForm`
类包含
`name`
和
`email`
两个公共
变量
,用来储存用户输入的数据。它还包含一个名为
`rules()`
的方法,用来返回数据验证规则的集合。上面声明的验证规则表示:
`EntryForm`
类包含
`name`
和
`email`
两个公共
成员
,用来储存用户输入的数据。它还包含一个名为
`rules()`
的方法,用来返回数据验证规则的集合。上面声明的验证规则表示:
*
`name`
和
`email`
值都是必须的
*
`
mail`
的值必须满足 email 地址
验证
*
`
email`
的值必须满足email规则
验证
如果你有一个
从用户那搜集
数据的
`EntryForm`
对象,你可以调用它的
[
[yii\base\Model::validate()|validate()
]
] 方法触发数据验证。如果有数据验证失败,将把
[
[yii\base\Model::hasErrors|hasErrors
]
] 属性设为 ture,想要知道具体发生什么错误就调用
[
[yii\base\Model::getErrors|getErrors
]
]。
如果你有一个
处理用户提交
数据的
`EntryForm`
对象,你可以调用它的
[
[yii\base\Model::validate()|validate()
]
] 方法触发数据验证。如果有数据验证失败,将把
[
[yii\base\Model::hasErrors|hasErrors
]
] 属性设为 ture,想要知道具体发生什么错误就调用
[
[yii\base\Model::getErrors|getErrors
]
]。
```
php
<?php
...
...
@@ -67,7 +67,7 @@ if ($model->validate()) {
创建操作 <a name="creating-action"></a>
------------------
接下来你需要
在
`site`
控制器中创建一个
`entry`
操作用于新建的模型。操作的创建和使用已经在
[
说一声你好
](
start-hello.md
)
小节中解释了。
下面你得
在
`site`
控制器中创建一个
`entry`
操作用于新建的模型。操作的创建和使用已经在
[
说一声你好
](
start-hello.md
)
小节中解释了。
```
php
<?php
...
...
@@ -104,7 +104,7 @@ class SiteController extends Controller
> 补充:表达式 `Yii::$app` 代表[应用](structure-applications.md)实例,它是一个全局可访问的单例。同时它也是一个[服务定位器](concept-service-locator.md),能提供 `request`,`response`,`db` 等等特定功能的组件。在上面的代码里就是使用 `request` 组件来访问应用实例收到的 `$_POST` 数据。
用户
成功提交表单后,操作将会渲染一个名为
`entry-confirm`
的视图去确认用户输入的数据。如果没填表单就提交,或数据包含错误
,
`entry`
视图将会渲染输出,连同表单一起输出的还有验证错误的详细信息。
用户
提交表单后,操作将会渲染一个名为
`entry-confirm`
的视图去确认用户输入的数据。如果没填表单就提交,或数据包含错误(译者:如 email 格式不对)
,
`entry`
视图将会渲染输出,连同表单一起输出的还有验证错误的详细信息。
> 注意:在这个简单例子里我们只是呈现了有效数据的确认页面。实践中你应该考虑使用 [[yii\web\Controller::refresh()|refresh()]] 或 [[yii\web\Controller::redirect()|redirect()]] 去避免[表单重复提交问题](http://en.wikipedia.org/wiki/Post/Redirect/Get)。
...
...
@@ -148,10 +148,10 @@ use yii\widgets\ActiveForm;
<?php
ActiveForm
::
end
();
?>
```
视图使用了一个功能强大的
[
小部件
](
structure-widgets.md
)
[
[yii\widgets\ActiveForm|ActiveForm
]
] 去生成 HTML 表单。其中的
`begin()`
和
`end()`
分别用来渲染表单的开始和关闭标签。在这两个方法之间使用了
[
[yii\widgets\ActiveForm::field()|field()
]
] 方法去创建
表单栏。第一个表单栏用于 “name”,第二个表单栏
用于 “email”。之后使用
[
[yii\helpers\Html::submitButton()
]
] 方法生成提交按钮。
视图使用了一个功能强大的
[
小部件
](
structure-widgets.md
)
[
[yii\widgets\ActiveForm|ActiveForm
]
] 去生成 HTML 表单。其中的
`begin()`
和
`end()`
分别用来渲染表单的开始和关闭标签。在这两个方法之间使用了
[
[yii\widgets\ActiveForm::field()|field()
]
] 方法去创建
输入框。第一个输入框用于 “name”,第二个输入框
用于 “email”。之后使用
[
[yii\helpers\Html::submitButton()
]
] 方法生成提交按钮。
试运行
<a name="trying-it-out"></a>
尝试下
<a name="trying-it-out"></a>
-------------
用浏览器访问下面的 URL 看它能否工作:
...
...
@@ -160,7 +160,7 @@ use yii\widgets\ActiveForm;
http://hostname/index.php?r=site/entry
```
你会看到一个包含两个
表单栏的页面。每个表单栏的前面都有一个标签指明应该输入的数据类型。如果什么都不填就点击提交按钮,或填入格式不正确的 email 地址,将会看到在对应的表单栏
下显示错误信息。
你会看到一个包含两个
输入框的表单的页面。每个输入框的前面都有一个标签指明应该输入的数据类型。如果什么都不填就点击提交按钮,或填入格式不正确的 email 地址,将会看到在对应的输入框
下显示错误信息。
![
验证错误的表单
](
images/start-form-validation.png
)
...
...
@@ -172,13 +172,13 @@ http://hostname/index.php?r=site/entry
### 效果说明 <a name="magic-explained"></a>
你可能会好奇 HTML 表单暗地里是如何工作的
,看起来它可以为每个表单栏
显示文字标签,而当你没输入正确的信息时又不需要刷新页面就能给出错误提示,似乎有些神奇。
你可能会好奇 HTML 表单暗地里是如何工作的
呢,看起来它可以为每个输入框
显示文字标签,而当你没输入正确的信息时又不需要刷新页面就能给出错误提示,似乎有些神奇。
是的,其实数据首先由客户端 JavaScript 脚本验证,然后才会提交给服务器通过 PHP 验证。
[
[yii\widgets\ActiveForm
]
] 足够智能到把你在
`EntryForm`
模型中声明的验证规则转化成客户端 JavaScript 脚本去执行验证。如果用户浏览器禁用了 JavaScript, 服务器端仍然会像
`actionEntry()`
方法里这样验证一遍数据。这保证了任何情况下用户提交的数据都是有效的。
> 警告:客户端验证
只
是提高用户体验的手段。无论它是否正常启用,服务端验证则都是必须的,请不要忽略它。
> 警告:客户端验证是提高用户体验的手段。无论它是否正常启用,服务端验证则都是必须的,请不要忽略它。
表单栏
的文字标签是
`field()`
方法生成的,内容就是模型中该数据的属性名。例如模型中的
`name`
属性生成的标签就是
`Name`
。
输入框
的文字标签是
`field()`
方法生成的,内容就是模型中该数据的属性名。例如模型中的
`name`
属性生成的标签就是
`Name`
。
你可以在视图中自定义标签:
...
...
@@ -193,7 +193,7 @@ http://hostname/index.php?r=site/entry
总结 <a name="summary"></a>
-------
本章指南中你接触了 MVC 设计模式的每个部分。学到了如何创建一个模型代表用户数据并验证它的有效性。
本章
节
指南中你接触了 MVC 设计模式的每个部分。学到了如何创建一个模型代表用户数据并验证它的有效性。
你还学到了如何从用户那获取数据并在浏览器上回显给用户。这本来是开发应用的过程中比较耗时的任务,好在 Yii 提供了强大的小部件让它变得如此简单。
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment