我们来详细讲解一下如何使用Yii2创建表单(ActiveForm)方法。
1、ActiveForm的基本使用
ActiveForm是Yii2框架中非常常用的一个类,它可以用于生成带有表单验证功能的HTML表单。要使用ActiveForm,需要使用Yii2的表单模型(yii\base\Model
)来作为表单的模型,根据模型来生成表单。
1.1 创建表单和表单字段
在使用ActiveForm之前,需要先创建一个表单和对应的表单字段。下面是一个使用ActiveForm生成登录表单的示例:
<?php
use yii\widgets\ActiveForm;
$form = ActiveForm::begin([
'id' => 'login-form',
'options' => [
'class' => 'form-horizontal',
],
]) ?>
<?= $form->field($model, 'username')->textInput(['autofocus' => true]) ?>
<?= $form->field($model, 'password')->passwordInput() ?>
<div class="form-group">
<div class="col-lg-offset-1 col-lg-11">
<?= Html::submitButton('Login', ['class' => 'btn btn-primary', 'name' => 'login-button']) ?>
</div>
</div>
<?php ActiveForm::end() ?>
在上面的代码中,我们使用了ActiveForm::begin()
方法和ActiveForm::end()
方法来包含表单的内容。在表单中,我们使用$form
对象来创建表单字段,$model
是我们表单的模型,它应当继承自yii\base\Model
。
1.2 验证表单
Yii2提供了很多验证规则来验证表单输入数据的正确性,例如必填字段、电子邮件格式验证、长度验证等。在表单模型中,我们可以通过定义rules()
来设置验证规则。
例如,在上面的例子中,如果要验证用户名(username)和密码(password)都是必填字段,可以在表单模型中添加如下代码:
public function rules()
{
return [
[['username', 'password'], 'required'],
];
}
1.3 显示表单错误信息
当表单验证出现错误时,我们需要显示表单的错误信息。Yii2为我们提供了$form->errorSummary()
方法来显示所有的错误信息,也可以使用$form->field()
方法来显示某个字段的错误信息。下面是一个例子:
<?= $form->field($model, 'username')->textInput(['autofocus' => true]) ?>
<?= $form->field($model, 'password')->passwordInput() ?>
<?= $form->field($model, 'rememberMe')->checkbox() ?>
<?= $form->errorSummary($model) ?>
上面的代码中,我们使用了$form->field()
方法来创建表单字段,$model
是我们的表单模型。如果某个字段验证出现错误,错误信息将会显示在该字段下面。我们也使用了$form->errorSummary()
方法来显示所有错误信息。
2、ActiveForm的高级使用
Yii2的ActiveForm除了支持基本的表单验证功能以外,还提供了很多高级特性,例如Ajax表单提交、表单的布局、表单字段引用等。
2.1 Ajax表单提交
如果想要使用Ajax来提交表单,可以使用$form->ajaxSubmit()
方法:
<?php
use yii\widgets\ActiveForm;
$form = ActiveForm::begin([
'id' => 'login-form',
'options' => [
'class' => 'form-horizontal',
],
]) ?>
<?= $form->field($model, 'username')->textInput(['autofocus' => true]) ?>
<?= $form->field($model, 'password')->passwordInput() ?>
<div class="form-group">
<div class="col-lg-offset-1 col-lg-11">
<?= Html::submitButton('Login', ['class' => 'btn btn-primary', 'name' => 'login-button']) ?>
</div>
</div>
<?php $form->ajaxSubmit(['url' => \yii\helpers\Url::to(['site/login'])]) ?>
<?php ActiveForm::end() ?>
在上面的代码中,我们使用了$form->ajaxSubmit()
方法来实现Ajax表单提交,['url' => \yii\helpers\Url::to(['site/login'])]
是提交表单的地址。在提交表单后,我们可以在控制器中获取表单的数据,例如在SiteController中:
public function actionLogin()
{
$model = new LoginForm();
if ($model->load(Yii::$app->request->post()) && $model->login()) {
return $this->goBack();
} else {
return $this->render('login', [
'model' => $model,
]);
}
}
2.2 表单布局
当表单中含有很多字段时,如何布局表单显得尤为重要。Yii2提供了很多布局方式,例如水平布局、垂直布局、多列布局等。
下面是一个使用Yii2的表单布局来创建登录表单的例子:
<?php
use yii\widgets\ActiveForm;
$form = ActiveForm::begin([
'id' => 'login-form',
'layout' => 'horizontal',
'fieldConfig' => [
'template' => "{label}\n<div class=\"col-lg-3\">{input}</div>\n<div class=\"col-lg-9\">{error}</div>",
'labelOptions' => ['class' => 'col-lg-2 control-label'],
],
]) ?>
<?= $form->field($model, 'username')->textInput(['autofocus' => true]) ?>
<?= $form->field($model, 'password')->passwordInput() ?>
<?= $form->field($model, 'rememberMe')->checkbox([
'template' => "<div class=\"col-lg-offset-2 col-lg-3\">{input} {label}</div>\n<div class=\"col-lg-7\">{error}</div>",
]) ?>
<div class="form-group">
<div class="col-lg-offset-2 col-lg-10">
<?= Html::submitButton('Login', ['class' => 'btn btn-primary', 'name' => 'login-button']) ?>
</div>
</div>
<?php ActiveForm::end() ?>
在上面的代码中,我们使用了水平布局来布局表单,设置'layout' => 'horizontal'
。我们也使用了$form->field()
方法来创建表单字段,$model
是我们表单的模型。我们还为表单字段添加了模板,这样可以更详细的设置每个表单字段的布局。
2.3 表单字段引用
当表单中有很多相同的字段时,我们可以使用$form->field()
方法中的名字name
来动态设置字段的名称。下面是一个例子:
<?php
use yii\widgets\ActiveForm;
$form = ActiveForm::begin([
'id' => 'user-form',
]) ?>
<?php for ($i = 0; $i < 3; $i++) : ?>
<?= $form->field($model, "items[{$i}][name]")->textInput() ?>
<?= $form->field($model, "items[{$i}][value]")->textInput() ?>
<?php endfor ?>
<div class="form-group">
<?= Html::submitButton('Submit', ['class' => 'btn btn-primary']) ?>
</div>
<?php ActiveForm::end() ?>
在上面的例子中,我们为表单动态设置了字段的名字,使用了类似"items[{$i}][name]"
和"items[{$i}][value]"
这样的方式。这样,我们可以轻松地创建很多相似的表单字段。
以上就是Yii2创建表单(ActiveForm)方法详解的完整攻略,包含了基本用法和高级特性,以及相关示例说明,希望对您有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Yii2创建表单(ActiveForm)方法详解 - Python技术站