Laravel-控制器可以判断请求是来自Web还是API路由?

时间:2018-12-23 20:27:04

标签: laravel

所以基本上我希望路由web和api中的以下内容实际上到达同一控制器,但基于它是来自web还是api,则它将返回html或json。

因此在此控制器内部,有一种方法可以知道请求来自哪个路由?

2 个答案:

答案 0 :(得分:0)

您可以使用check路径以api contains开头:

if (starts_with(request()->path(), 'api')) 

(以上假设您的所有api路由均以api/为前缀)

Request Path

starts_with()

或者您可以使用wantsJson()方法检查请求是否希望返回JSON。

if (request()->wantsJson())

就个人而言,执行两项检查都不会出现任何问题。这样,api路由将始终返回json,但是如果出于某种原因,非api路由需要json,则也可以获取它:

if (request()->wantsJson() || starts_with(request()->path(), 'api'))

答案 1 :(得分:0)

如果您对API路由使用前缀

Route::group( ['prefix' => 'api'], function(  ) {
  Route::resource( 'activation', 'ActivationController' ); 
  //...
}

您可以使用接受通配符/占位符的Request :: is()方法。因此,您可以执行以下操作:

if($request->is('api/*')) {
// do your api response
} else {
    // do the other response
}

如果每次执行响应时都具有此功能,则可以编写一个处理if的自定义响应宏,然后将数据作为数组并将其作为json返回或将其提供给刀片视图。