所以基本上我希望路由web和api中的以下内容实际上到达同一控制器,但基于它是来自web还是api,则它将返回html或json。
因此在此控制器内部,有一种方法可以知道请求来自哪个路由?
答案 0 :(得分:0)
您可以使用check路径以api contains开头:
if (starts_with(request()->path(), 'api'))
(以上假设您的所有api路由均以api/
为前缀)
或者您可以使用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返回或将其提供给刀片视图。