2017-09-01 4 views
0

Ich erstellte eine API (speichern), die die Daten in der Datenbank speichert und gibt 201 wenn erfolgreich oder 404 wenn nicht.Laravel 5.4 - Formular/API/Ansicht

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); 

Es funktioniert perfekt. Mit dem Postboten können Sie sehen, dass der Status < < 201 Created >>.

Diese API sollte auf zwei Arten verwendet werden: von einer anderen Anwendung aufgerufen oder von einem Laravel-Formular aufgerufen. Dies ist die Frage:

Wie kann ich es auf eine Weise nennen, wenn es erfolgreich ist, wird es eine bestimmte Ansicht auf den Browsern laden? Mit anderen Worten, gibt es eine Möglichkeit, das Formular eine Route aufrufen (die API selbst, etwa ../api/visit/) und im Erfolgsfall lädt die andere Ansicht? Außerdem möchte ich den Inhalt von Antwort ['msg'] an diese neue Ansicht weitergeben.

Ich weiß, ich könnte es innerhalb der speichern Methode durch Filterung der HTTP-Referrer, aber ich möchte den Controller-Code streng zu verwalten, die Erstellung von Datensätzen. Außerdem muss ich die Codes 201/404 zusammen mit den zurückgegebenen Daten senden.

Ich erwog auch, einen anderen Controller zu erstellen, um die API-Antwort zu behandeln und dann das Formular aufzurufen, aber es klingt immer noch zu viel - es soll einfach sein, denke ich.

+0

BTW, der richtige Code zeigt 'Methode '=>' Post' statt ' method => ‚GET' –

+0

Check die Antwort aus – Sletheren

+0

a Haben Sehen Sie sich https://laravel.com/docs/5.4/redirects#redirecting-with-flashed-session-data an –

Antwort

1

In Laravel können Sie eine hilfreiche Methode verwenden, die die Anforderung bestimmt, ob die eine AJAX-Anforderung gesendet wurde, ist oder nur eine normale Anforderung, die lautet:

$request->wantsJson() 

Im Innern des Controllers in der Rückkehrfunktion So, , erhalten Sie eine if-Anweisung machen:

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

Vielen Dank, @Sletheren! Arbeitete perfekt - (ich wusste, dass es eine elegante Lösung haben sollte!). Habe ich nur noch die unten Header an die JSON-Antwort und der Laravel hat seine Magie '$ visit-> headers = [ 'Accept' => 'application/json', 'CONTENT_TYPE' => 'application/json' ]; ' –

+0

froh, ich könnte Mann helfen :) – Sletheren