Как проверить авто-числовой ввод с проверкой Laravel для цифр или чисел? - PullRequest
0 голосов
/ 28 апреля 2019

Я создаю приложение в laravel 5.8

Я использую http://autonumeric.org/ для своего поля цены, чтобы разделить каждые три цифры запятой.Таким образом, для числа, состоящего более чем из 3 цифр, оно будет иметь запятую.

Проверка ввода для целого числа завершится неудачно, если я введу более 3 цифр !.Очевидно, это из-за запятой.Поэтому я попытался санировать ввод перед проверкой.но проблема остается!

Я пытался преобразовать очищенные версии входных данных в int, но он все еще не работает!

Вот так выглядит мой класс запросов:

public function rules()
    {
        $this->sanitize();

        return [
                   'base_price' => 'required|integer', //it fails if I enter a number with more than 3 digits!
                 ];


    }

    public function sanitize()
    {
        $input = $this->all();
        //sanitize
        $input['base_price'] = filter_var($input['base_price'], FILTER_SANITIZE_NUMBER_INT);
        //casting
        $input['base_price'] = (int) $input[base_price'];
        $this->replace($input);
    }

1 Ответ

0 голосов
/ 28 апреля 2019

Для тех, кто может столкнуться с той же проблемой, я собираюсь ответить на свой вопрос.

К счастью, за помощь @ Sohel0415 в комментариях я смог решить проблему.

как уже упоминалось в этом вопросе: Изменить ввод перед проверкой на Laravel 5.1 . Вызов sanitize() в rule() не изменит входные данные до проверки. Он дезинфицирует и изменяет входные данные, но эта модификация используется только после проверки. Это потому, что входные данные уже загружены для проверки.

Класс FormRequest фактически использует метод validationData() для доступа к данным, которые будут проверяться, и это происходит до вызова rule().

 protected function validationData() //the method inside Illuminate\Foundation\Http\FormRequest;
{
    return $this->all();
}

Поэтому, если мы переопределим этот метод только в нашем классе запросов, мы сможем решить эту проблему .:

 protected function validationData()
{
    $this->sanitize();
    return parent::validationData(); // TODO: Change the autogenerated stub
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...