2016-06-30 4 views
0

Ich habe zwei Felder message und file wo ist nur einfach string und file ist ein Bild.Entweder oder Validierung für Zeichenfolge und Datei yii2

Ich möchte einen Validator erstellen, der es dem Benutzer nur erlaubt, eines dieser beiden Felder zu senden.

versuchte ich when Validator aber in when das Feld $model->file ist immer null so was andere Methode ist entweder oder Validierung mit Datei zu tun.

Hier ist mein model Code

class Message extends \yii\db\ActiveRecord 
{ 
    public $file; 
    /** 
    * @inheritdoc 
    */ 
    public static function tableName() 
    { 
     return 'message'; 
    } 

    /** 
     * @inheritdoc 
    */ 
    public function rules() 
    { 
    return [ 
    [['sender_id', 'receiver_id'], 'integer'], 
    [['message'], 'string'], 
    [['file'], 'file', 'extensions'=>'jpg, gif, png,jpeg'], 
    /*['file', 'required', 'when' => function($model) { 
     return $model->message == null; 
    }], 
    ['message', 'required', 'when' => function($model) { 
     return $this->file->baseName == null; 
    }]*/ 
    ]; 
} 

/** 
* @inheritdoc 
*/ 
public function attributeLabels() 
{ 
    return [ 
     'id' => 'ID', 
     'sender_id' => 'Sender ID', 
     'receiver_id' => 'Receiver ID', 
     'message' => 'Message', 
     'file' => 'Image (jpg/png)', 
     'is_delivered' => 'Is Delivered', 
     'is_notified' => 'Is Notified', 
     'is_deleted' => 'Is Deleted', 
     'created_date' => 'Created Date', 
     'updated_date' => 'Updated Date', 
     'is_group' => 'Is Group', 
    ]; 
} 
} 

Danke

+0

Sie tun habe '$ model -> Datei = UploadedFile :: getInstance ($ model, 'Datei'); 'vor dem Aufruf der' validate' Methode? –

Antwort

0

Dies kann Ihnen helfen ..

als Ihre Regeln definieren: -

public function rules() 
{ 
    return [ 
     //Your Rules ...... 
     ['message' ,'string'], 
     ['file' ,'file'], 

     ['message', 'required', 'when' => function($model) { 
      return $model->file === null; 
     } ,'whenClient' => 'function (attribute, value) { 
      return $("#'. Html::getInputId($this ,'file') .'").val() === null; 
     }'], 
     ['file', 'required', 'when' => function($model) { 
      return $model->message === null; 
     } , 'whenClient' => 'function (attribute, value) { 
      return $("#'. Html::getInputId($this ,'message') .'").val() == ""; 
     }'], 

    ]; 
} 
+0

Ja, ich habe versucht, aber '$ model-> file' gibt immer null zurück –

Verwandte Themen