中间件未按预期工作 - Laravel
Middleware not working as expected - Laravel
这让我发疯,因为我认为我做的是正确的,但它没有正常工作。
我有一个 route
,上面附有 middleware
,如下所示;
Route::get('post/{id}/{name}', 'BlogController@post')->name('blog-post')->middleware('blogGuard');
如你所见,我定义了 2 个路由参数
在我的控制器中,我有以下内容;
public function post () {
return view('pages.blog.post');
}
有了这样定义的中间件;
public function handle($request, Closure $next)
{
if (is_null($request->input('id')) ||
is_null($request->input('name'))) {
return redirect()->route('blog-home');
}
return $next($request);
}
现在,如果我像这样点击 link; http://blog.example.co.uk/post/153/firstpost
middleware
不应该开火对吗?
事实并非如此。 middleware
执行,我被重定向。但是如果我删除 middleware
然后我就可以访问该页面。
感谢任何帮助。
试试这个
if (!$request->id ||
!$request->name)
如果您尝试访问路由参数,您可能希望从路由中明确获取它们。
$request->route('id'); // pulls the $route->parameter('id');
$request->route('name'); // pulls the $route->parameter('name');
$request->id
将在返回路由参数之前检查请求输入。
$request->input('id')
将只检查请求的输入源,而不是路由参数。
如果您使用 $request->id
期望获得路由参数 'id',可能会通过将 id=anythinghere
传递给查询字符串或添加一个 'id' var 来破坏您的逻辑post 请求。
这让我发疯,因为我认为我做的是正确的,但它没有正常工作。
我有一个 route
,上面附有 middleware
,如下所示;
Route::get('post/{id}/{name}', 'BlogController@post')->name('blog-post')->middleware('blogGuard');
如你所见,我定义了 2 个路由参数 在我的控制器中,我有以下内容;
public function post () {
return view('pages.blog.post');
}
有了这样定义的中间件;
public function handle($request, Closure $next)
{
if (is_null($request->input('id')) ||
is_null($request->input('name'))) {
return redirect()->route('blog-home');
}
return $next($request);
}
现在,如果我像这样点击 link; http://blog.example.co.uk/post/153/firstpost
middleware
不应该开火对吗?
事实并非如此。 middleware
执行,我被重定向。但是如果我删除 middleware
然后我就可以访问该页面。
感谢任何帮助。
试试这个
if (!$request->id ||
!$request->name)
如果您尝试访问路由参数,您可能希望从路由中明确获取它们。
$request->route('id'); // pulls the $route->parameter('id');
$request->route('name'); // pulls the $route->parameter('name');
$request->id
将在返回路由参数之前检查请求输入。
$request->input('id')
将只检查请求的输入源,而不是路由参数。
如果您使用 $request->id
期望获得路由参数 'id',可能会通过将 id=anythinghere
传递给查询字符串或添加一个 'id' var 来破坏您的逻辑post 请求。