2017-03-22 7 views
1

Ich bin ein Anfänger so leid, wenn es offensichtlich ist. Also, ich möchte, dass verschiedene Regeln davon abhängen, was der Benutzer auswählt. Ich habe ein Update Form:Wie macht man verschiedene Regeln in yii2, hängt vom Radiobutton Wert ab?

<?php $form = ActiveForm::begin(['options' => ['enctype' => 'multipart/form-data']]); ?> 

<?= $form->field($model, 'news_title')->textInput(['maxlength' => true]) ?> 

<?= $form->field($model, 'news_content')->textarea(['rows' => 6]) ?> 

<?= $form->field($model, 'check')->label('Picture update:') 
     ->radioList(
       [ 2 => 'Yes', 1 => 'No', 0 => 'Delete']) ?> 

<?= $form->field($model, 'file')->fileInput() ?> 

<div class="form-group"> 
    <?= Html::submitButton($model->isNewRecord ? 'Create' : 'Update', ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?> 
</div> 

<?php ActiveForm::end(); ?> 

Und nur, wenn der radioList einen Wert ‚2‘ Ich möchte die FileInput- verlangen. Ich meine, wenn der Benutzer 1 => 'Nein' oder 0 => 'Löschen' auswählt, kann der Feldeintrag leer sein.

public function rules() { 
    return [ 
     [['news_content'], 'string'], 
     [['news_content'], 'required'], 
     [['created_at', 'updated_at'], 'safe'], 
     [['news_title', 'news_picture', 'created_by', 'updated_by'], 'string', 'max' => 255], 
     [['news_title'], 'required'], 
     [['news_picture'], 'required'], 
     [['file'], 'file', 'skipOnEmpty' => $this->checkRadio(), 'extensions' => 'png, jpg',], 
     [['check'], 'required', 'message' => 'Please ....'], 
    ]; 
} 
public function checkRadio() { 
    if ($this->check == 2) { 
     return false; 
    } else { 
     return true; 
    } 
} 

Ich habe versucht, eine Funktion im Modell, aber der $ check Variable immer einen Wert 0 hat zu schreiben, und ich verstehe wirklich nicht, warum. Gibt es dafür eine Lösung in Yii2? Hier

Antwort

1

ist die documentation was ziemlich geradlinig, aber so etwas wie dies sollte

[ 
    'file', 'required', 
    'when' => function ($model) { 
     return $model->check == 2; 
    }, 
    'whenClient' => "function (attribute, value) { 
       return $('#signupform-check-2').is(':checked'); 
    }", 
    'message' => 'Please....' 
] 

Solange ausreichend sein, wie Sie Client-Validierung aktiviert haben, können Sie immer zwei Kontrollen zu tun haben. Backend und Frontend.

+0

In diesem Fall ist die Datei immer für mich erforderlich. – Legenda

+0

Ich habe meine Antwort bearbeitet und auf dem echten Formular getestet. Der Punkt hier ist, dass Sie das richtige Optionsfeld in Ihrer whenClient-Überprüfung anvisieren. – user2831723

-1
*********** Your Controller Like This *********************** 

public function actionCreate(){ 
    $model = new Model(); 
    if(Yii::$app->request->post()) 
    { 
    if($model->check ==2) 
     { 
     $model->scenario ='fileInputRequired'; 
     } 
     else{ 
      $model->scenario ='fileInputNotRequired'; 
      } 
    } 
    if ($model->load(Yii::$app->request->post()) && $model->save()) { 
      return $this->redirect(['view', 'id' => $model->id]); 
     } else { 
      return $this->render('create', [ 
       'model' => $model, 
      ]); 
} 


********** Your Model Like This ***************** 

public function rules() { 
    return [ 

     [['news_content','news_title','news_picture','check'], 'required'], 
     [['news_content'], 'string'], 
     [['created_at', 'updated_at'], 'safe'], 
     [['news_title', 'news_picture', 'created_by', 'updated_by'], 'string', 'max' => 255], 
     [['file'], 'file', 'on' =>'fileInputRequired', 'extensions' => 'png, jpg',], 
     ]; 
} 
function scenario() 
{ 
    return [ 
     'fileInputRequired' => ['news_content', 'news_picture', 'news_title','file','check']; 
     'fileInputNotRequired' => ['news_content', 'news_picture','news_title','check']; 
} 
+0

Ich versuche es in einem einfachen Beispiel .. Wenn ich das Szenario nach dem Post() setzen, funktioniert es nicht. : \ – Legenda

+0

Niemals, so etwas für einfache Validierungen. – user2831723

Verwandte Themen