创建表单 ======== 基于活动记录(ActiveRecord)的表单:ActiveForm ----------------------- 在yii中使用表单的主要方式是通过 [[yii\widgets\ActiveForm]]。 当某个表单是基于一个模型时,应该首选这种方式。 此外,在 [[yii\helpers\Html]] 中有很多实用的方法为表单添加按钮和帮助文档。 在客户端显示的表单,大多数情况下都有一个相应的[模型](structure-models.md), 用来在服务器上验证其输入的数据(可在[输入验证](input-validation.md)一节获取关于验证的细节)。 当创建一个基于模型的表单时,第一步是定义模型本身。该模型可以是一个基于[活动记录](db-active-record.md)的类, 表示数据库中的数据,也可以是一个基于通用模型的类(继承自[[yii\base\Model]]), 来获取任意的输入数据,如登录表单。 > Tip: 如果一个表单的输入域与数据库的字段不匹配,或者它存在只适用于它的特殊的格式或者方法, > 则最好为它创建一个单独的继承自 [[yii\base\Model]] 的模型。 在接下来的例子中,我们展示了通用模型如何用于登录表单: ```php 'login-form', 'options' => ['class' => 'form-horizontal'], ]) ?> field($model, 'username') ?> field($model, 'password')->passwordInput() ?>
'btn btn-primary']) ?>
``` ### 用 `begin()` 和 `end()` 包裹  在上面的代码中,[[yii\widgets\ActiveForm::begin()|ActiveForm::begin()]] 不仅创建了一个表单实例,同时也标志着表单的开始。 放在 [[yii\widgets\ActiveForm::begin()|ActiveForm::begin()]] 与 [[yii\widgets\ActiveForm::end()|ActiveForm::end()]] 之间的所有内容都被包裹在 HTML 的 `
` 标签中。 与任何小部件一样,你可以指定一些选项,通过传递数组到 `begin` 方法中来配置该小部件。在这种情况下, 一个额外的 CSS 类和 ID 会在 `` 标签中使用。要查看所有可用的选项, 请参阅 API 文档的 [[yii\widgets\ActiveForm]]。 ### ActiveField 为了在表单中创建表单元素与元素的标签,以及任何适用的 JavaScript 验证,[[yii\widgets\ActiveForm::field()|ActiveForm::field()]] 方法在调用时,会返回一个 [[yii\widgets\ActiveField]] 的实例。 直接输出该方法时,结果是一个普通的(文本)输入。要自定义输出,可以附加上 [[yii\widgets\ActiveField|ActiveField]] 的其它方法来一起调用: ```php // 一个密码输入框 field($model, 'password')->passwordInput() ?> // 增加一个提示标签 field($model, 'username')->textInput()->hint('Please enter your name')->label('Name') ?> // 创建一个 HTML5 邮箱输入框 field($model, 'email')->input('email') ?> ``` 它会通过在 [[yii\widgets\ActiveField::$template|template]] 中定义的表单字段来创建 `