yii2来自对数组表单元素的验证

时间:2017-06-05 11:32:31

标签: yii2

我有一个包含数组元素的表单,我已经验证了它。我无法通过使用内置验证规则对其进行验证,因为数据库中不存在这些元素。我将数据序列化并将它们保存在数据库中的单个字段中。所以我尝试使用自定义验证进行验证。 我的实际问题是数组字段正在验证,但它没有在相应的字段中显示验证错误消息。

这是表格



<div class="col-md-6">
    <?php Portlet::begin(['title' => t('Shipper')]) ?>

    <?= $form->field($model, 'shipper[name]')
        ->textInput(['maxlength' => true])->label(t('Name'))?>

    <div class="row">
        <div class="col-md-8">

            <?= $form->field($model, 'shipper[address_line1]')
                ->textInput(['maxlength' => true])->label(t('Address Line 1')) ?>

            <?= $form->field($model, 'shipper[address_line2]')
                ->textInput(['maxlength' => true])->label(t('Address Line 2')) ?>

       </div>
       <div class="col-md-4">

             <?= $form->field($model, 'shipper[city]')
                ->textInput(['maxlength' => true])->label(t('City')) ?>

             <?= $form->field($model, 'shipper[pin]')
                ->textInput(['maxlength' => true])->label(t('Pin Code')) ?>
      </div>
</div>
&#13;
&#13;
&#13;

模型

.....
['shipper', function ($attribute, $params) {
   if (!filter_var($this->{$attribute}['email'], FILTER_VALIDATE_EMAIL)) {
         $this->addError('shipper', 'The email format is invalid!');
  }
}],
....

1 个答案:

答案 0 :(得分:0)

您可以向模型类添加属性,如下所示:

class MyModel extends \yii\db\ActiveRecord {
    public $shipperAddressLine1;
    public $shipperAddressLine2;
    public $shipperCity;
    public $shipperPin;
    ...
}

然后,您可以为它们添加验证规则,就像数据库属性一样。