Laravel后端如何判断请求来自Inertia组件还是外部API?
Laravel中判断Inertia请求并复用路由实现CRUD
完全可以实现你想要的逻辑,核心是利用Inertia请求自带的专属请求头来区分来源:
1. 直接通过请求头判断
Inertia发起的所有请求都会携带X-Inertia请求头,值固定为true。你可以直接在控制器里检查这个头,替换你代码里的判断逻辑:
public function index() { $this->authorize('viewAny', Post::class); $posts = PostResource::collection($this->postService->index()); if (request()->header('X-Inertia') === 'true') { return inertia('Posts/Index', compact('posts')); } return $posts; }
2. 封装成请求宏(更优雅复用)
如果多个控制器都需要这个判断,可以在AppServiceProvider的boot方法里注册一个请求宏,这样就能像你设想的那样用request()->isInertiaRequest()调用:
// app/Providers/AppServiceProvider.php use Illuminate\Support\Facades\Request; public function boot() { Request::macro('isInertiaRequest', function () { return $this->header('X-Inertia') === 'true'; }); }
之后你的控制器代码就可以和最初设想的完全一致了,完美复用路由和业务逻辑,完全符合DRY原则。
注意事项
- 这个判断是可靠的,因为
X-Inertia头是Inertia官方定义的标识,Postman等工具默认不会携带这个头,除非手动添加。 - 如果你的API需要额外的响应格式(比如统一的包裹结构),可以在返回资源时单独处理,但核心的业务逻辑依然可以复用。
内容的提问来源于stack exchange,提问作者qwasyx0
相关产品推荐
相关产品推荐

