Выберите значение элемента - строка - PullRequest
0 голосов
/ 01 февраля 2020

Я отправляю выбранное значение элемента select через ajax на Laravel действие контроллера и проверил значение, как требуется в контроллере.

Проблема в том, что я получаю значение элемента select как строку, а не как целое число. Поэтому, когда выбран первый параметр со значением 0, он отправляется в контроллер в виде строки («0») и не проверяется, как требуется в методе действия.

Параметры элемента select добавляются динамически.

Вот мой код

HTML

var row_data = {
    'lob_id': lob_id,
    'sub_lob_id': sub_lob_id,
    'product_id': product_id,
};

$.ajax({
    url: '{{route('
    getProductThreshold ')}}',
    type: 'get',
    dataType: 'json',
    data: row_data,
    success: function (response) {
        loader(true);
        console.log(response);
    }
});

Laravel Контроллер

$validators = Validator::make($request->all(), [
            'lob_id' => 'required',
            'sub_lob_id' => 'required',
            'product_id' => 'required',
        ]);

Запрос контроллера

enter image description here

Как мне использовать laravel валидатор, если значение отправляется в виде строки в запросе?

Ответы [ 3 ]

1 голос
/ 03 февраля 2020

Я добавил еще одну laravel проверку, т.е. not_in:0, и это сработало для меня. Просто проверьте его для параметра запроса, если ноль, является ли параметр строковым или целым числом

$validators = Validator::make($request->all(), [
            'lob_id' => 'required|not_in:0',
            'sub_lob_id' => 'required|not_in:0',
            'product_id' => 'required|not_in:0',
        ]);
1 голос
/ 02 февраля 2020

Любые данные, отправленные через inte rnet, отправляются в виде строки, и получатель анализирует и декодирует эту строку так, как ему нужно. Вот почему Параметры HTTP-запроса всегда строковые .

Когда вы получаете запрос и ждете значения параметра c для параметра, просто преобразуйте его в число, прежде чем использовать . В вашем случае вы используете Laravel PHP, вы можете использовать intval()

Для Laravel валидатора есть правило проверки для проверки если входящий параметр является числом или нет, то есть numeric. Laravel знает, что параметр является строкой, и имеет дело с этим. Валидатор не проверяет тип данных, но он проверяет, что значением строки является число .

Полный набор правил проверки Laravel можно найти здесь: Laravel Правила проверки

0 голосов
/ 02 февраля 2020

У вас есть 2 варианта:

  • Используйте parseInt и отправьте данные как число. Хотя технически тело запроса отправляется как строка, ваша модель увидит в нем значение как число и будет обрабатывать его следующим образом:
  • Измените вашу модель на бэкэнде, чтобы проанализировать полученную строку как число. Но это не рекомендуется.
...