2016-03-11 2 views
0

Привет у меня есть 2 dropdownlsits:Один из к DropDownLists должен быть обязательно

<?= $form->field($model, 'Rel_User')->widget(Select2::classname(), [ 
    'data' => ArrayHelper::map(UrUser::find()->orderby('Surname')->all(), 'Id', 'fullName'), 
    'language' => 'pl', 
    'options' => ['placeholder' => Yii::t('app', 'Wybierz użytkownika ...')], 
    'pluginOptions' => [ 
     'allowClear' => true 
    ], 
]); ?> 

    <?= $form->field($model, 'Rel_Category')->widget(Select2::classname(), [ 
    'data' => ArrayHelper::map(SmUserCategory::find()->orderby('Name')->all(), 'Id', 'Name'), 
    'language' => 'pl', 
    'options' => ['placeholder' => Yii::t('app', 'Wybierz kategorię ...')], 
    'pluginOptions' => [ 
     'allowClear' => true 
    ], 
]); ?> 

И я хочу, чтобы один из них требуется, если второй из затем не выбран. Поэтому, если пользователь не выбирает оба из них, он должен показывать сообщение под двумя из них, но если пользователь выбирает один, он должен сохранить мою модель. Я пытался сделать это с правилами:

[['Rel_User'], 'required', 'whenClient' => "function (attribute, value) {return $('#banner-rel_category input[type=dropdown]:checked').val() == null}"], 
[['Rel_Category'], 'required', 'whenClient' => "function (attribute, value) {return $('#banner-rel_user input[type=dropdown]:checked').val() == null}"], 

но теперь 2, то есть все время, необходимое. Что я могу сделать для этого? мои действия создают в Ctrl

public function actionCreate() { 
      $model = new Banner(); 
      $model->scenario='create'; 
      if ($model->load(Yii::$app->request->post())) { 
       $model->File = UploadedFile::getInstance($model, 'File'); 
       if ($model->save() && $model->upload() && $model->validate()) { 
        return $this->redirect(['view', 'id' => $model->Id]); 
       } 
      } else { 
       return $this->render('create', [ 
          'model' => $model, 
       ]); 
      } 
     } 

Мои правила в настоящее время:

public function rules() { 
     return [ 
      [['Url'], 'required'], 
      [['File'], 'required', 'on' => 'create'], 
      [['Rel_User'], 'my_required'], 
      [['Rel_Category'], 'my_required'], 
      [['Views', 'Rel_User', 'Rel_Category', 'CreatedAt', 'UpdatedAt', 'IsDeleted', 'Id'], 'integer'], 
      [['Image', 'Url', 'Caption'], 'string', 'max' => 255], 
      [['Url'], 'match', 'pattern' => '/^(http(s?):\/\/)?(www\.)?[a-zA-Z0-9\.\-\_]+(\.[a-zA-Z]{2,3})+(\/[a-zA-Z0-9\_\-\s\.\/\?\%\#\&\=]*)?$/'], 
      [['File'], 'file', 'extensions' => ['gif', 'jpg', 'png', 'jpeg', 'JPG', 'JPEG', 'PNG', 'GIF'], 'checkExtensionByMimeType' => false,], 
      [['CreatedAt', 'IsDeleted'], 'safe'] 
     ]; 
    } 

ответ

0

Использование пользовательских проверки в модели:

public function rules() 
{ 
    return [  
    [['Rel_User, Rel_Category'], 'my_required'], 
    ]; 
} 

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

    return false; 
    } 

    return true; 
} 

Reference

+0

хмм теперь не требуется оба DropDownLists – qwerty

+0

я не знаю, почему это не работает или я использовал эти собственные правила раньше в других p roject и он работает, но теперь это не – qwerty

+0

@qwerty. теперь он работает или нет? –