У меня есть следующий маршрут в web.php
:
Route::get('posts/{encoded_id}/{slug}', 'PostController@show')
... и работает нормально:
http://example.test/posts/1Dl89aRjpk/this-is-some-title
Но «проблема» в том, что он также будет работать, когда я добавлю пробел в конце параметра маршрута {encoded_id}
:
http://example.test/posts/1Dl89aRjpk /this-is-some-title
// or
http://example.test/posts/1Dl89aRjpk%20 /this-is-some-title
// or
http://example.test/posts/1Dl89aRjpk%20%20 /this-is-some-title
С добавленными пробелами в конце - это будет работать нормально, и есть нет 404:
Post::where('encoded_id', $encoded_id)->firstOrFail();
... но почему? И как мне сделать так, чтобы он потерпел неудачу (выдать 404)?
Может быть из-за типа поля в БД (CHAR
)?
$table->char('encoded_id', 10)
Если вот почему - есть ли способ настроить MySQL в databases.php
, чтобы это предотвратило это?
А может, это как-то связано с .htaccess
(я использую XAMPP / Windows)?
Я использую Laravel 5.6.
EDIT:
Я спрашиваю, почему это происходит и как я могу это предотвратить, а не как обрезать параметр маршрута. Например, добавьте пробел в конце question id
на URL-адресе stackoverflow, и вы получите 404:
https://stackoverflow.com/questions/51068436 /laravel-route-parameters-not-trimmed-it-normally-works-when-whitespace-is-added