我怎样才能覆盖" Laravel / Lumen 5的中间件?

时间:2016-06-13 20:09:08

标签: laravel routing lumen

我目前有一个Angular应用程序,Lumen作为后端。我使用catch-all路由的方法是返回Angular主文件的全局中间件。如何才能最好地添加不会通过此中间件的API路由?我是否必须不使用全局中间件而是拥有路由组?有没有办法可以在中间件中测试它?这是我当前的中间件:

<?php

namespace App\Http\Middleware;

use Closure;

class ToAngular
{
    public function handle($request, Closure $next)
    {
        return view('master');
    }
}

1 个答案:

答案 0 :(得分:1)

404处理程序

在这种情况下,我个人会避免使用中间件。如果你想要一个全能,你实际上是定义一个自定义404处理程序。所以我会那样接近它。

我打开app/Exceptions/Handler.php并在render方法中添加条件。

类似的东西:

public function render($request, Exception $e)
{
    if($e instanceof \Symfony\Component\HttpKernel\Exception\NotFoundHttpException)
    {
        return view('master');
    }

    return parent::render($request, $e);
}

现在你可以定义API路线,它们只会工作,其他任何东西都会落到这个404.

或者你可以在resources/views/errors/404.blade.php创建一个页面并让它扩展你的主视图,这将完成同样的事情,虽然我认为会包括404 HTTP头。

检查路段

如果您真的想坚持使用中间件,可以让它检查请求路由段。这样,如果这是一个合法的API请求,您可以跳过全能视图。

假设您的有效API端点都以/api/开头,您可以执行以下操作:

public function handle($request, Closure $next)
{
    if($request->segment(1) == "api") {
        // This is a valid api request! Let it proceed
        return $next($request);
    }

    // Otherwise return the master view
    return view('master');
}