2017-09-01 95 views
0

我创建的保存在数据库上的数据,并返回201,如果成功或404如果不是的API(商店)。Laravel 5.4 - 形式/ API /视图

if ($visit->save()){ 
    $visit->view_visit = [ 
    'href' => 'api/v1/visit/' . $visit->id, 
    'method' => 'GET' 
    ]; 
    $response = [ 
     'msg' => 'Visit created.', 
     'visit' => $visit 
    ]; 
    return response()->json($response, 201); 
} 
$response = [ 
    'msg' => 'Error during creation.' 
    ]; 
return response()->json($response, 404); 

它完美地工作。使用邮递员,您可以看到状态将为< < 201创建>>。

此API应该有两种使用方式:由另一个应用程序调用或通过Laravel形式调用。这是一个问题:

我如何把它的方式,如果它成功了,它会加载在浏览器中给定的看法? 换句话说,有没有一种方法,使窗体调用路由(API本身,像../api/visit/),并在成功的情况下加载其他看法?另外,我想将响应['msg']的内容传递给这个新视图。

我知道我可以在商店方法中通过过滤HTTP引用来完成,但我想严格控制器代码来管理记录创建。除此之外,我必须发送201/404代码以及返回的数据。

我也算是创造另一个控制器来处理API响应,然后调用的形式,但它仍然听起来太 - 它应该是很容易的,我猜。

+0

BTW,正确的代码显示 '方法 '=>' POST' 代替 '方法=>“GET' –

+0

检查答案出来 – Sletheren

+0

有一个看https://laravel.com/docs/5.4/redirects#redirecting-with-flashed-session-data –

回答

1

在laravel你可以用它确定一个有用的方法,如果已经发送的请求是一个Ajax请求,或者只是一个正常的要求,这就是:

$request->wantsJson() 

所以,里面的控制器中返回功能,你会做一个if语句:

if ($request->wantsJson()) { 
    return response()->json(); 
}else{ 
    return view(...); 
} 
+0

非常感谢@Sletheren!工作完美 - (我知道它应该有一个优雅的解决方案!)。 我刚添加的下面头JSON响应和Laravel做它的魔力 '$ visit->头= [ '接受'=> '应用/ JSON', 'CONTENT_TYPE'=> '应用/ JSON' ];' –

+0

很高兴我可以帮助男人:) – Sletheren