Параметр с пустым значением запускает проверку (! Isset) в Laravel - PullRequest
0 голосов
/ 04 мая 2018

Вот мой сценарий: -

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.

enter image description here

Что я делаю не так?

1 Ответ

0 голосов
/ 05 мая 2018

Это не так очевидно, почему это так, потому что это кажется довольно странным на первый взгляд. Однако, если вы знаете немного больше о Laravel и посмотрите на файл app/Http/Kernel.php, вы увидите там:

\Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class, 

, который, как вы можете узнать из имени, преобразует пустые строки в ноль. Так что в вашем случае, когда вы отправляете пустой параметр, он считается null, поэтому !isset($null) будет истинным.

Итак, у вас есть 2 варианта:

  1. удалить это промежуточное ПО из массива - однако это повлияет на все приложение, поэтому, возможно, это не лучший способ, если вы не уверены в этом
  2. Предполагается, что вы хотите запустить эту проверку только в том случае, если параметр вообще не отправляется вместо

    if (!isset($request->security_token))  
    

    Вы можете использовать, например,

    if (!$request->has('security_token'))
    

    Очевидно, что это не совсем то же самое - если вы сейчас отправили этот токен и установили его на null, он не будет по-прежнему выполняться, но я верю, что когда вы теперь знаете, что происходит с этой пустой строкой, вы можете теперь настроить его точно так, чтобы ваши потребности.

...