Я искал здесь некоторое время сегодня, но я не могу понять, почему мои валидаторы не работают в моей модели.YII2 пользовательский валидатор не работает как руководство предлагает
У меня есть модуль с моделью «Страница» в моем коде ниже.
У меня есть два атрибута, которые мне нужно использовать для проверки модели. Это hero_link и hero_linked. Если hero_linked истинно, я хочу потребовать hero_link.
В руководстве here они объясняют правильный синтаксис для такого рода валидатора
Я использовал этот синтаксис в моей модели, но она не проверяет, как я ожидал. Я добавил свойство whenClient, поэтому я могу использовать проверку на стороне клиента здесь.
мой соответствующий код ниже:
// Page model
namespace common\modules\page\models;
use Yii;
class Page extends \yii\db\ActiveRecord
{
public function rules()
{
return [
[['hero_linked',], 'boolean'],
[['hero_linked',], 'required'],
[['hero_link',], 'string', 'max' => 255],
[
'hero_link',
'required',
'when' => function($model) {
return $model->hero_linked == true;
},
'whenClient' => "function (attribute, value) {
return $('#page-hero_linked').val() == '1';
}",
],
];
}
}
// _form view
<?php $form = ActiveForm::begin(); ?>
<?= $form->field($model, 'hero_linked')->checkbox() ?>
<?= $form->field($model, 'hero_link')->textInput(['maxlength' => 255]) ?>
<?php ActiveForm::end(); ?>
Необходимое средство проверки правильности применения, но это, кажется, не обращая внимания на когда имущество, требующее даже если мой флажок снят. Является ли мой синтаксис неправильным, или я пропустил требование? Любая помощь приветствуется, спасибо заранее!
Синтаксис кажется правильным. Может быть, проблема в том, что «hero_linked» также является обязательным, так что на самом деле другое условие никогда не произойдет. Старайтесь, если 'hero_linked' не проверен - это reutrns и error. просто думая ... – Asped
, если это единственная проблема с js, можете ли вы попробовать обновить часть «whenClient», чтобы вернуть '$ (« # page-hero_linked »). attr ('checked')'? – arkoak
Я выяснил, что из-за того, что yii2 делает флажки, вы не можете использовать JS для получения значения этого флажка с помощью атрибута checked. флажок имеет скрытое поле, которое я предполагаю обновления при представлении, но не в режиме реального времени. –