创建表单 ==== 基于活动记录(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|ActiveField]]中定义的表单字段来创建`