Laravel - 如何将可为空的参数传递给中间件?
Laravel - how to pass a nullable parameter to middleware?
我知道您可以通过执行以下操作将参数传递给中间件:
Route::get('books', function ($id) {
//
})->middleware('convert-string-bool:available');
但是,如果 available
参数在请求中可以为 null,因此可能并不总是存在怎么办? Laravel 在这种情况下会在 Route 文件中抛出异常。
这个逻辑是否应该在中间件中处理,我们只从请求中获取所有参数?
public function handle($request, Closure $next, $field)
{
$data = $request->all();
$data = $this->convertStringBooleans($data, $field);
$request->replace($data);
return $next($request);
}
/**
* Converts all string booleans to booleans
*
* @param array $data
* @return array
*/
private function convertStringBooleans($data, $key)
{
$value = $data[$key];
if ($value === 'true' || $value === 'TRUE') {
$data[$key] = true;
}
if ($value === 'false' || $value === 'FALSE') {
$data[$key] = false;
}
return $data;
}
可能这行得通 -
class SampleMiddleware
{
public function handle($request, Closure $next , $field = null)
{
// code
return $next($request);
}
}
我知道您可以通过执行以下操作将参数传递给中间件:
Route::get('books', function ($id) {
//
})->middleware('convert-string-bool:available');
但是,如果 available
参数在请求中可以为 null,因此可能并不总是存在怎么办? Laravel 在这种情况下会在 Route 文件中抛出异常。
这个逻辑是否应该在中间件中处理,我们只从请求中获取所有参数?
public function handle($request, Closure $next, $field)
{
$data = $request->all();
$data = $this->convertStringBooleans($data, $field);
$request->replace($data);
return $next($request);
}
/**
* Converts all string booleans to booleans
*
* @param array $data
* @return array
*/
private function convertStringBooleans($data, $key)
{
$value = $data[$key];
if ($value === 'true' || $value === 'TRUE') {
$data[$key] = true;
}
if ($value === 'false' || $value === 'FALSE') {
$data[$key] = false;
}
return $data;
}
可能这行得通 -
class SampleMiddleware
{
public function handle($request, Closure $next , $field = null)
{
// code
return $next($request);
}
}