2017-06-05 4 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

OK。それは問題ありませんが、私のデータベースには、これらのデータを保存するための荷送人という名前のフィールドが1つしかありません(住所1、住所2、市、ピンなど)。私はこれらの値をシリアル化してデータベースの荷送人フィールドに保存しています。 –

+0

どうすればいいの? –

+0

私はフィールドに 'serializedAttributes' =>を を直列化する方法この[ 'クラス' => SerializedAttributes ::クラス名()、 '属性' => [ '荷主']、 ]、 –

関連する問題