2017-01-13 4 views
2

В приложение/модели/модели это подтверждает(Yii2) RangeValidator проверки правильности

//simulating incorrect user input 
//$model->status='some-string'; 

public function rules() 
{ 
    return [ 
     ['status', 'in', 'range' => [0]], //asserts true (why?) 
     //['status', 'in', 'range' => [0], 'strict' => true], //asserts false (correct) 

    ]; 
} 

EDIT: Я обновил этот вопрос, чтобы отразить новые идеи.

+0

Протестировано и работает с постоянным. –

+0

похоже на проблему нет в этом коде –

+1

Хум, кажется, что если $ model-> status вводится как «некоторая строка», валидатор будет утверждать, что равен 0, если не используется строгий режим. Таким образом, проблема заключается не в константе, а в сравнении. – Decimoseptimo

ответ

0

Пожалуйста, убедитесь, что вы определяете константу внутри в классе модели

class model extends activeRecord { 
const STATUS = 0; 
public function rules() 
{ 
    return [ 
     [['status'], 'in', 'range' => [self::STATUS]], 
    ]; 
} 
} 

Попробуйте это работает для меня .....

+0

привет, я обновил это. @Dani – Decimoseptimo

+0

Надеюсь, я работаю для вас ??? – Dani

0

статус, скорее всего, пустой во время проверки, то внутренние проверки вычислить что-то вроде:

// non-strict: 
null == 0 // this is true 

// strict: 
null === 0 // this is false 

то же самое относится с пустой строкой, см related question