Laravel资源控制器 - 将API调用与浏览器区分开来

Mar*_*usP 1 php api laravel laravel-5 laravel-5.2

我有一个像这样定义的路由:

Route::resource('problem', 'ProblemController');

POST去的那一刻/problem,一个ProblemController@store方法被解雇了.

现在我想要的是返回一个JSON响应,如果它是一个API调用或一个视图(或者可能是重定向),如果我在我的应用程序的"web端".我该如何处理这个问题?

我应该创建单独的控制器?我(在每个方法/控制器中)是否应该检测请求的类型并做出相应的响应?我应该使用中间件吗?路线组?单独申请?

主要目标是在一个包中包含多种应用程序类型(API +版本控制+ Web),但共享业务逻辑,模型和大多数代码(以避免重复).

我正在使用Laravel 5.2.

谢谢!

jed*_*ylo 6

Request对象提供了一个方法wantJson(),它检查请求的Accept头,如果请求了JSON则返回TRUE.

在您的控制器中,您可以执行以下操作:

if( request()->wantsJson() )
{
    return ['foo' => 'bar'];
}

return view('foo.bar');
Run Code Online (Sandbox Code Playgroud)

您可以在此处阅读有关Laravel内容协商的更多信息:http://fideloper.com/laravel-content-negotiation