中间件未按预期工作 - 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 请求。