2015-10-06 96 views
-1

我有一個表格Message ,其中有2場messagefile必一方在Yii2提交的ActiveForm

我想驗證的要求

這裏來驗證它們中的一個領域是我已經做了到現在爲止,但它不工作

public function rules() 
{ 
    return [ 
     [['sender_id', 'receiver_id'], 'integer'], 
     [['message'], 'string'], 
     [['message','file'],'my_required'], 
     [['is_delivered', 'is_notified', 'is_deleted', 'is_group'], 'boolean'], 
     [['created_date', 'updated_date'], 'safe'], 
     [['image'], 'string', 'max' => 500], 
     [['file'], 'file', 'extensions'=>'jpg, gif, png, pdf'], 
    ]; 
} 

public function my_required($attribute_name, $params) 
{ 
    if (empty($this->file) 
     && empty($this->message) 
    ) { 
     $this->addError($attribute_name, Yii::t('user', 'At least 1 of the field must be filled up properly')); 

     return false; 
    } 

    return true; 
} 

這裏是我的窗體的代碼

<div class="row"> 
    <p> 
     <?php $form = ActiveForm::begin(['options'=>['enctype'=>'multipart/form-data','id' => 'message-form']]); ?> 

    <div class="form-group col-xs-3 col-lg-3"> 
     <?= $form->field($model, 'message')->textarea(['rows' => 6]) ?> 
    </div> 
    <div class="form-group col-xs-3 col-lg-3"> 
     <?= $form->field($model, 'file')->fileInput() ?> 
     <?= $form->field($model, 'keys')->hiddenInput()->label(false); ?> 

     <div class="form-group"> 
      <?= Html::submitButton('Send',['class' => 'btn btn-danger','data-placement'=>'right','id'=>'sendMessage']) ?> 
     </div> 
    </div> 
    <?php ActiveForm::end(); ?> 
    </p> 
</div> 

我還試圖用這一點,但它沒有工作,以及

public function rules() 
{ 
    return [ 
     [['sender_id', 'receiver_id'], 'integer'], 
     [['message'], 'string'], 
     [['is_delivered', 'is_notified', 'is_deleted', 'is_group'], 'boolean'], 
     [['created_date', 'updated_date'], 'safe'], 
     [['image'], 'string', 'max' => 500], 
     [['file'], 'file', 'extensions'=>'jpg, gif, png, pdf'], 
     ['file', 'required', 'when' => function($model) { 
      return empty($model->message); 
     }], 
    ]; 
} 

我一直在使用在線驗證這樣

['file', function ($attribute,$model) { 
     if (empty($model->message)) { 
      $this->addError($attribute, 'Form must contain a file or message.'); 
     } 
    }], 

也試過,但沒有工作了要麼...

+0

您是否定義了任何場景? 「文件」中有什麼以及它如何處理? – arogachev

+0

@arogachev'file'是用於上傳圖片的'fileinput' ..我不明白你問的是關於場景的問題......我想要做的就是驗證提交按鈕,單擊'file'的'message'必須有價值 –

+3

嘗試'[['message','file'],'my_required','skipOnEmpty'=> false],' –

回答

1

下面完美適合我:

  ['clientGroupId', 'required', 'when' => function($model) { 
       return empty($model->clientId); 
      }, 'message' => 'Client group or client selection is required'],