我使用的是ActiveForm,我需要显示验证错误,而不是在输入字段附近,而是在表单顶部。
如下面的示例代码所示,设置errorOptions
避免在默认位置显示错误消息。
[Ajax验证正在工作,但$form->errorSummary($model)
并未显示任何消息,即使here看起来应该如此,在documentation中我也找不到清晰的答案。
此外,添加Html::error($model, 'username')
不利于Ajax验证。
<?php
$form = ActiveForm::begin([
'id' => 'test-form',
'options' => ['class' => 'form-horizontal'],
'enableAjaxValidation' => true,
'enableClientValidation' => true,
])
?>
<?= $form->errorSummary($model) ?>
<?= Html::error($model, 'username') ?>
<div class="form-row">
<div class="form-group col-md-3">
<?= $form->field($model, 'username', ['errorOptions' => ['tag' => false]])->textInput()->label("Username") ?>
</div>
</div>
<?php ActiveForm::end() ?>
在Yii1.1中,可以以更灵活的方式显示验证错误,因为您可以分别定义label
,input
和error
。像这样的东西:
<?php echo $form->labelEx($model,'username'); ?>
<?php echo $form->textField($model,'username'); ?>
<?php echo $form->error($model,'username'); ?>
在这种情况下,您可以简单地将$form->error($model,'username');
移动到表单内的任何位置。
如何使用Yii2而不使用Javascript API来获得相同的结果?
errorSummary()
显示Ajax验证错误我确实测试了$form->errorSummary();
,但确实显示了所需的输出,但是形式为:
请修复以下错误:
请输入用户名。
就像一个选项,您可以这样操作:
<?php $form = ActiveForm::begin([
'id' => 'test-form',
'options' => ['class' => 'form-horizontal'],
'enableAjaxValidation' => true,
'enableClientValidation' => true,
]); ?>
<div class="form-group col-md-3">
<div class="error-block text-center">
<?php
$error = $form->field($model, 'username');
$error->template = '{error}';
echo $error;
?>
</div>
<?php
$username = $form->field($model, 'username');
$username->template = "{input}";
echo $username->textInput(['autofocus' => true]);
?>
</div>
<?php ActiveForm::end() ?>
输出将在表单字段的正上方,是带有以下内容的响应:
请输入用户名