я следующие правила проверки:правило проверки, которое требует, чтобы выбрать, по крайней мере, два варианта
['dagen_ids', 'required', 'message' => 'Selecteer.', 'when' => function($model) {
return $model->frequentie == 2;
}]
dagen_ids
Атрибут является массивом то будет быть заселена Select2 виджет (множественный выбор).
То, что я добиться того, чтобы иметь правила проверки, что только требуется, когда $model->frequentie == 2
, и когда пользователь должен выбрать по крайней мере 2 варианта.
Во второй части я попытался следующий код проверки инлайн, но это, кажется, не имеет никакого эффекта, к сожалению ..
['dagen_ids', function ($attribute, $params) {
if (count($this->$attribute) < 2) {
$this->addError($attribute, 'Selecteer minimaal 2 dagen.');
}
}]
Может кто-то помочь мне немного дальше и объяснить мне, как объединить эти правила проверки?
EDIT
Контроллер:
public function actionView($id)
{
$planning = $this->findModel($id);
$post = Yii::$app->request->post();
if (Yii::$app->request->isAjax && $planning->load($post) && $planning->validate() && $planning->save()) {
Yii::$app->session->setFlash('success', [
'type' => 'success',
'duration' => 10000,
'icon' => 'fa fa-check',
'message' => 'Opdracht is succesvol bijgewerkt.'.Html::button(Icon::show('hand-o-right', ['class' => ''], Icon::FA). Yii::t('app', 'View'), ['class' => 'btn btn-sm btn-success modalButton pull-right', 'data-notify' => 'dismiss', 'data-content' => Url::to(['planning/view', 'id' => $id])]),
'title' => Html::tag('span', 'Opdracht bijgewerkt', ['style' => 'font-weight: bold;']),
'positonY' => 'top',
'positonX' => 'right'
]);
}
else {
return $this->renderAjax('view', ['planning' => $planning]);
}
}
JQuery:
$('body').on('beforeSubmit', 'form#view_form', function() {
var form = $(this);
// return false if form still have some validation errors
if (form.find('.has-error').length) {
return false;
}
// submit form
$.ajax({
url: form.attr('action'),
data: form.serialize(),
type: 'post'
}).done(function(){
$('.modal').modal('hide');
console.log('Form send!');
$.pjax.reload({
container: '#planner_grid',
timeout: 10000,
replace: false
});
}).fail(function(){
console.log('Server error...');
});
return false;
});
Я попробовал ваш код, но теперь я могу представить форма как-то .. Когда у меня есть запись с 5 'dagen_ids', выбранная на примере, и я редактирую строку и выбираю 0' dagen_ids' вместо этого, форма будет отправлена, но атрибут 'dagen_ids', кажется, не затронут и все еще имеет 5 значений. Я отредактирую свой вопрос и вставлю свой контроллер и JQuery. Я также попытался написать автономный валидатор с вашим кодом, используя документы Yii2 (http://www.yiiframework.com/doc-2.0/guide-input-validation.html#standalone-validators), но нет никакой разницы. – JK87
Это поможет узнать, как вы используете эти dagen_ids, поскольку проверка не является тем же, что и код, который обрабатывает отношения many_to_many, которые, как я полагаю, использует ваша модель. – marche