2017-04-21 5 views
0

Ich bin ein iOS führen auf einer App und versuchen, einige API-Fehler zu beheben, während unser Entwickler "nicht verfügbar" ist. Ich bin fast völlig neu in Laravel und versuche zu überprüfen, was die Anfrage-Methode ist. Ich habe einige Hinweise aus einer anderen Frage folgte aber nicht gelungen, um es arbeiten:Laravel - Anfrage-Methode überprüfen

public function defaults(Request $request, User $user){ 
    $follow_ids = explode(',', env('FOLLOW_DEFAULTS')); 

    if ($request->isMethod('post')) { 
     return ['user' => $user]; 
    } 

    $user->follows()->syncWithoutDetaching($follow_ids); 

    return ['user.follows' => $user->follows->toArray()]; 
} 

Wissen Sie, wo ich könnte falsch hier gehen? Danke im Voraus.

Wenn die Anforderung scheint es, immer wieder wird etwas mehr als zu überspringen und ['user.follows' => $user->follows->toArray()]

Antwort

3

$request soll eine Instanz von Illuminate\Http\Request sein. Diese Klasse erweitert die Symfony-Anforderung (Symfony\Component\HttpFoundation\Request), in der die isMethod()-Methode definiert ist.

Grundsätzlich angesichts der Funktionsdefinition als geschrieben, es liest „wenn dies eine ist POST Anforderung, nur die Benutzerdaten zurück. Wenn dies keine POST Anfrage (z GET), zu aktualisieren und gibt die Beziehungsdaten.“ Wenn Sie also eine POST Anfrage senden, erhalten Sie die Antwort ['user' => $user]. Wenn Sie eine andere Anforderungsmethode senden (z. B. GET), ändern Sie die follows-Beziehung und erhalten die Antwort ['user.follows' => $user->follows->toArray()].

Für mich scheint dies rückwärts. Ich würde denken, dass Sie wollen, dass die POST Anfrage die Daten zu aktualisieren, und jede andere Anfrage (z. B. GET) nur Daten zurückgeben.

Wenn dies richtig ist, müssen Sie Ihre isMethod Kontrolle negieren:

if (! $request->isMethod('post')) { 
    return ['user' => $user]; 
} 

Mehr entsprechend sollten Sie separate Controller-Aktionen definieren POST vs GET Anfragen zu bearbeiten, aber das nicht in den Anwendungsbereich dieser Frage ist, und wahrscheinlich mehr, als du als temporärer Betreuer einplanen willst.

+0

Vielen Dank für Ihre sehr umfassende Antwort. Wie gesagt, ich bin ein absoluter Neuling mit Laravel und es stellt sich heraus, dass ich auf die falsche Funktion (oops) schaute. Danke für Ihre Hilfe! –

+1

@JackChamberlain Kein Problem. Freue mich zu helfen. Es kann eine Menge "Magie" in Laravel geben, daher kann es manchmal schwierig sein, herauszufinden, was vor sich geht, wenn Sie nicht ein wenig Zeit im Rahmen verbracht haben. Ein Neuling, der versucht, eine bestehende Anwendung zu debuggen, kann kompliziert sein. :) – patricus

1

Es zurückzukehren scheint, dass die Anforderung keine POST ist, so dass die if Prüfung nie wahr ist. Sie könnten die Methodennamen wie dieses Echo:

$method = $request->method(); 

echo $method; 

// or var_dump($method); 
Verwandte Themen