2015-10-06 5 views
-1

У меня есть форма Message , в которой есть 2 поля message и fileОбязательный либо один подал в 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' для загрузки изображений. И я не понял, что вы спросили о сценарии ... Все, что я хочу сделать, это проверить на кнопку отправки кнопку, которая либо 'сообщение'' файла' должна имеет значение –

+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'], 

 Смежные вопросы

  • Нет связанных вопросов^_^