中间件无法按预期工作 - Laravel

时间:2015-12-27 16:28:29

标签: php laravel laravel-5

这让我发疯,因为我认为我做的是正确的,但是它无法正常工作。

我有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);
}

现在,如果我点击这样的链接; http://blog.example.co.uk/post/153/firstpost middleware不应该点正确吗?

事实并非如此。 middleware执行,我被重定向。但是,如果我删除了middleware,那么我就可以访问该页面了。

任何帮助表示感谢。

2 个答案:

答案 0 :(得分:1)

如果您尝试访问路线参数,您可能希望从路线中明确地获取它们。

$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&#来破坏您的逻辑39; var发布请求。

答案 1 :(得分:0)

试试这个

if (!$request->id ||
        !$request->name)