2017-06-05 23 views
0

我已经含有数组元素形式,我已经对其进行验证。我不能使用内置的验证规则来验证它,因为这些元素不存在于数据库中。我正在序列化数据并将它们保存在数据库的单个字段中。所以我试图用自定义验证来进行验证。 我的实际问题是在阵列字段被验证,但它不示出了在相应的场的验证错误消息。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>

型号

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

回答

0

你可以像下面这样你的模型类属性添加:

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

然后你可以为他们添加验证规则,就像你的数据库属性。

+0

确定。这很好,但在我的数据库中,只有一个名为shipper的字段用于保存这些数据(地址栏1,地址栏2,城市,别针等)。所以我正在序列化这些值并将其保存到数据库中的发货人字段。 –

+0

我该怎么做......? –

+0

这个我怎么连载领域 'serializedAttributes'=> [ '类'=> SerializedAttributes ::类名(), '属性'=> [ '发货'], ], –