LINUX.ORG.RU

Почему пустая строка превращается в null в $request->input() в Laravel?

 , , ,


0

1

В контроллер поступают следующие данные:

POST Data
- channelTypeId «2»
- notifyChannelValue «»
- addButton «»

А вот код контроллера:

public function addChannelApply(Request $request) {
  $channelTypeId = $request->input('channelTypeId'); // Тут получается нормальное значение
  $channelValue = $request->input('notifyChannelValue'); // А тут null
    
  return dd($channelValue);
}


И этот контроллер выдает в браузер null.

Пытался задать вторым параметром input() значение по-умолчанию '12345'. Но оно не возвращается, видимо потому что POST-переменная таки существует, а значение по-умолчанию должно подставляется если переменной нет. То есть dd() все равно пишет null.

В то же время, метод input() должен возвращать null, если переменной нет. И, похоже, input() это и делает - он возвращает null.

В общем, я не могу понять, как получить значение POST-переменной notifyChannelValue в явном виде, то есть пустую строку?

★★★★★

Ответ на: комментарий от no-such-file

Очень странная фича. Из-за нее невозможно определить - переменная пришла с пустой строкой, или не пришло даже переменной.

В обоих случаях input() вернет null.

Кому такое поведение могло бы понадобиться?

Xintrea ★★★★★ ()
Ответ на: комментарий от Xintrea

Нормальное поведение. Странно отправлять пустую строку в контроллер и проверять ее на null.

Да и вообще, в PHP:

empty('') === true;

А так, что «» пустота, что null пустота. В случае ConvertEmptyStringsToNull меньше заморочек, вся пустота становится null.

Вот что говорит документация Laravel:

A Note On Optional Fields By default, Laravel includes the TrimStrings and ConvertEmptyStringsToNull middleware in your application's global middleware stack. These middleware are listed in the stack by the App\Http\Kernel class. Because of this, you will often need to mark your «optional» request fields as nullable if you do not want the validator to consider null values as invalid. For example:

Подробнее: https://laravel.com/docs/5.8/validation

fman2 ()