2016-05-11 3 views
1

i Problem mit dieser Validierung habe,Bereitstellung Validierung für minimale Anzahl eingefügt in Yii2

wie kann ich minimale Anzahl validieren in

$form->field($modeldetails, "[{$i}]qty")->textInput() 

basierend auf Summe der Tabelle Mengenfeldes eingefügt werden, um mit Parametern Filter von $form->field($model, 'tgl'), weil ich nicht einfach Bereichsprüfung in Modellen Regel hinzufügen kann.

Ich brauche eine Funktion, um Parameter von zwei Modellen ($model,$modeldetails) zu erhalten, und Prozesszusammenfassung der Quantität, wenn Benutzer mehr als minimale Summe einfügte, dann einen Fehler im Quantitätfeld zeigen.

Ansicht Active Feld für Kopf (mit dynamischer Form)

<?php $form = ActiveForm::begin(['id' => 'dynamic-form')]); ?> 


     <?= $form->field($model, 'tgl')->widget(DatePicker::classname(), [ 
       'options' => ['placeholder' => 'Enter Transaction Date ...'], 
       'type' => DatePicker::TYPE_COMPONENT_APPEND, 
       'pluginOptions' => [ 
        'autoclose'=>true, 
        'format' => 'yyyy-mm-dd', 
        'todayHighlight' => true 
       ], 

      ]); ?> 

Ansicht Active Feld für Detail

<?php DynamicFormWidget::begin([ 
      'widgetContainer' => 'dynamicform_wrapper', // required: only alphanumeric characters plus "_" [A-Za-z0-9_] 
      'widgetBody' => '.container-items', // required: css class selector 
      'widgetItem' => '.item', // required: css class 
      'limit' => 15, // the maximum times, an element can be cloned (default 999) 
      'min' => 1, // 0 or 1 (default 1) 
      'insertButton' => '.add-item', // css class 
      'deleteButton' => '.remove-item', // css class 
      'model' => $modeldetail[0], 
      'formId' => 'dynamic-form', 
      'formFields' => [ 
       'id_brg', 
       'qty', 

      ], 
     ]); ?> 

    <div class="panel panel-default"> 
     <div class="panel-heading"> 
      <h4> 
       Detail 
       <button type="button" class="add-item btn btn-success btn-sm pull-right"><i class="glyphicon glyphicon-plus"></i> Add</button> 
      </h4> 
     </div> 
     <div class="panel-body"> 
      <div class="container-items"><!-- widgetBody --> 
      <?php foreach ($modeldetail as $i => $modeldetails): ?> 
       <div class="item panel panel-default"><!-- widgetItem --> 
        <div class="panel-heading"> 
         <h3 class="panel-title pull-left"></h3> 
         <div class="pull-right"> 
          <button type="button" class="remove-item btn btn-danger btn-xs"><i class="glyphicon glyphicon-minus"></i></button> 
         </div> 
         <div class="clearfix"></div> 
        </div> 
        <div class="panel-body"> 
         <?php 
          // necessary for update action. 
          if (! $modeldetails->isNewRecord) { 
           echo Html::activeHiddenInput($modeldetails, "[{$i}]id"); 
          } 
         ?> 

         <div class="row"> 
          <div class="col-sm-6"> 
           <?= $form->field($modeldetails, "[{$i}]id_brg")->label('Nama')->widget(Select2::classname(), [ 
             'data' => $brg, 
             'language' => 'en', 
             'options' => ['placeholder' => 'Select an item ...'], 
             'pluginOptions' => [ 
              'allowClear' => true 
             ], 
            ]);?> 
          </div> 
          <div class="col-sm-6"> 
           <?= $form->field($modeldetails, "[{$i}]qty")->textInput() ?> 
          </div> 
         </div><!-- .row --> 

        </div> 
       </div> 
      <?php endforeach; ?> 
      </div> 
     </div> 
    </div><!-- .panel --> 
<?php DynamicFormWidget::end(); ?> 

meine Modelle für Details

class Detail extends \yii\db\ActiveRecord 
{ 
    /** 
    * @inheritdoc 
    */ 
    public static function tableName() 
    { 
     return 'detail'; 
    } 

    /** 
    * @inheritdoc 
    */ 
    public function rules() 
    { 
     return [ 
      [['id_brg', 'qty'], 'required'], 
      [['kode', 'id_brg', 'qty'], 'integer'], 

     ]; 
    } 

    /** 
    * @inheritdoc 
    */ 
    public function attributeLabels() 
    { 
     return [ 
      'id' => 'ID', 
      'kode' => 'Kode', 
      'id_brg' => 'ID Barang', 
      'qty' => 'Qty', 
     ]; 
    } 

    /** 
    * @return \yii\db\ActiveQuery 
    */ 
    public function getLinkheader() 
    { 
     return $this->hasOne(Transaksi::className(), ['kode' => 'kode']); 
    } 

    /** 
    * @return \yii\db\ActiveQuery 
    */ 
    public function getItems() 
    { 
     return $this->hasOne(Barang::className(), ['id' => 'id_brg']); 
    } 
} 

Antwort

1

Verwenden Sie einen benutzerdefinierten Validator. Ein einfaches Beispiel ist inline validator:

public function rules() 
{ 
    return [ 
     [['id_brg', 'qty'], 'required'], 
     [['kode', 'id_brg', 'qty'], 'integer'], 
     ['qty', function ($attribute, $params) { 
      /* calculate min value */ 
      $min = 123; 
      if ($this->$attribute > $min) { 
       $this->addError($attribute, "Qty must be less than {$min}."); 
      } 
     }], 
    ]; 
} 
+0

Ich stimme Ihnen zu, aber mein Problem ist, wie der Wert von $ form- bekommen> Feld ($ Modell 'tgl') aus die Ansicht, also kann ich verwenden, um mit dem Filtern dieses Wertes zu berechnen und dann das Ergebnis, das ich in $ min. – harist

+0

Make komplexes Modell enthält $ Model und $ Modeldetails. Verwenden Sie es zum Berechnen und validieren Sie die Menge aus Fgl. –

+0

Ja, aber ich weiß nicht, wie es geht – harist

0

Core-Validatoren integer

[['qty'], 'integer', 'min' => 123], 
+0

Yup, aber immer noch mehr Schritt brauchen, um dynamisch min Wert zu bekommen – harist

Verwandte Themen