Compare validator с атрибутом другой модели

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
louisvuitton
Сообщения: 203
Зарегистрирован: 2014.02.16, 03:09

Compare validator с атрибутом другой модели

Сообщение louisvuitton »

Есть модель формы.

В ней есть атрибут sum (число)
В правилах валидации нужно сравнить введенное число с атрибутом(числом) другой несвязанной модели.

Как это сделать правильно?
louisvuitton
Сообщения: 203
Зарегистрирован: 2014.02.16, 03:09

Re: Compare validator с атрибутом другой модели

Сообщение louisvuitton »

Делал как то так:

Код: Выделить всё

//модель формы
class SumForm extends Model
{
    public $pointsToCompare;

    public function init()
    {
        $this->pointsToCompare = someGetPointsToCompare();
        parent::init();
    }

    public function rules()
    {
        return [
            ['sum], 'required', 'message' => 'Необходимо заполнить поле "{attribute}"' ],
            ['sum', 'compare', 'compareAttribute' => 'pointsToCompare', 'operator' => '>=', 'type' => 'number', 'message' => 'Не хватает очков'],
        ];
    }
}
Всегда выдает фальш, и когда сумма больше, и когда меньше

В js добавляет такое правило

Код: Выделить всё

yii.validation.compare(value, messages, {"operator":">=","type":"number","compareAttribute":"pointsToCompare","skipOnEmpty":1,"message":"Не хватает очков"}, $form);
Я так понимаю он хочет сравнивать значения инпутов в форме, но в форме мне вообще не нужен compareAttribute, хотелось чтобы он сразу сравнивал sum с числом а не атрибутом...

Правильно я вообще делаю? хелп
louisvuitton
Сообщения: 203
Зарегистрирован: 2014.02.16, 03:09

Re: Compare validator с атрибутом другой модели

Сообщение louisvuitton »

А все, пока писал вопрос проникся и нашел 'compareValue'
Но если есть какие то советы с удовольствием послушаю
andku83
Сообщения: 988
Зарегистрирован: 2016.07.01, 10:24
Откуда: Харьков

Re: Compare validator с атрибутом другой модели

Сообщение andku83 »

Код: Выделить всё

    public function rules()
    {
        return [
            ['sum', 'required', 'message' => 'Необходимо заполнить поле "{attribute}"' ],
            ['sum', 'superCompare'],
        ];
    }
    public function superCompare($attribute)
    {
        if ($this->$attribute != someGetPointsToCompare()) {
        	$this->addError($attribute, Yii::t('frontend', 'Not Equal.'));
        }
    }
louisvuitton
Сообщения: 203
Зарегистрирован: 2014.02.16, 03:09

Re: Compare validator с атрибутом другой модели

Сообщение louisvuitton »

andku83
Но так и для клиентской надо вручную писать js, правильно?
andku83
Сообщения: 988
Зарегистрирован: 2016.07.01, 10:24
Откуда: Харьков

Re: Compare validator с атрибутом другой модели

Сообщение andku83 »

да, но в someGetPointsToCompare() у вас может быть логика которая каждую секунду меняется, тогда клиентская вам вообще не нужна.
Ответить