Литиевая среда PHP - не может правильно проверить пустой номер

У меня есть эта модель в проекте, построенном с помощью Lithium PHP framework:

<?php

namespace app\models;

class Prices extends Base {

  protected $_schema = array(
    '_id'          => 'id',
    .......
    'price'        => array('float', 'default' => 0)
  );

  public $validate = array(
    .......
    'price' => array(
      array('notEmpty', 'message' => 'Price cannot be empty.'),
      array('numeric', 'message' => 'Price must be number.')
    )
  );

}

?>

Проблема в том, что модель также считает ноль недействительной ценой.

Пробовал добавлять дополнительные свойства - allowEmptyValue - безрезультатно.

Я пробовал с пользовательским правилом проверки - оно игнорируется. (???)

Я попытался удалить float из $_schema, и тогда он принимает нули ... но также принимает текст для цены. (?!?!?!)

Вы хоть представляете, в чем проблема?


person pesho hristov    schedule 05.05.2014    source источник


Ответы (1)


Вы можете использовать пользовательскую проверку. Например:

Validator::add('price', function($value, $rule, $option){
    if(floatval($value) == 0){
        return false;
    }
    //you can add more rules here

    return true;
});

и добавить "цену" в список правил

'price' => array(
      array('notEmpty', 'message' => 'Price cannot be empty.'),
      array('numeric', 'message' => 'Price must be number.'),
      array('price', 'message' => 'Please enter a valid price.')
    )
person Minh Nguyen    schedule 06.05.2014
comment
Да, правильно... но тогда у меня другая проблема: в пользовательском правиле проверки значение приведено к типу с плавающей запятой... Я думаю, из-за строки в $_schema => 'price' => array('float', 'default' => 0). И затем, если я ввожу текст для цены и отправляю, значение в пользовательской проверке равно float(0). Могу ли я обойти это? - person pesho hristov; 06.05.2014
comment
(Если я удалю слово float в свойстве $_schema, то при пользовательской проверке, если значение является текстом, оно будет преобразовано в int(0).) - person pesho hristov; 06.05.2014
comment
что, если вы удалите и float, и default? - person Minh Nguyen; 06.05.2014