Параметр с пустым значением запускает проверку (! Isset) в Laravel
Вот мой сценарий:
if (!isset($request->security_token))
{
// Provide security token
$error = TRUE;
$err_message[] = Lang::get('caption_validation_error.ser_valid_security_token.value');
$err_validation[] = Lang::get('caption_validation_error.ser_valid_security_token.value').' [security_token]';
}
Это означает, что если параметр не "отправлен", то проверка запускается. Однако, если передается параметр с "пустым" значением, он не должен запускать проверку.
Однако, когда я нажимаю на API через приложение POSTMAN, security_token с пустым значением входит в проверку! Isset.
Что я делаю неправильно?
1 ответ
Это не так очевидно, почему это так, потому что это кажется довольно странным на первый взгляд. Однако, если вы знаете немного больше о Laravel, и вы посмотрите на app/Http/Kernel.php
файл, который вы увидите там:
\Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
который, как вы можете узнать из имени, преобразует пустые строки в ноль. Так что в вашем случае, когда вы отправляете пустой параметр, он рассматривается как null
так !isset($null)
будет правдой.
Итак, у вас есть 2 варианта:
- удалите это промежуточное программное обеспечение из массива - однако это повлияет на все приложение, поэтому это может быть не лучшим способом, если вы не уверены в этом
Предполагая, что вы хотите запустить эту проверку, только если параметр вообще не отправляется вместо
if (!isset($request->security_token))
Вы можете использовать, например,
if (!$request->has('security_token'))
Очевидно, что это не совсем то же самое - если вы сейчас отправили этот токен и установите его
null
он все равно не будет выполнен, но я верю, что теперь, когда вы знаете, что происходит с этой пустой строкой, вы можете теперь точно настроить ее в соответствии со своими потребностями.