2017-04-21 35 views
0

我是一名iOS應用程序領導者,嘗試解決一些API錯誤,同時我們的開發人員「不可用」。我對Laravel幾乎是全新的,並試圖檢查請求方法是什麼。我遵循另一個問題的一些指導,但一直無法得到它的工作:Laravel - 支票請求方法

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()]; 
} 

你知道我可能會在哪裏出錯嗎?提前致謝。

當請求返回它始終只是似乎跳過和返回['user.follows' => $user->follows->toArray()]

回答

3

$request應該是Illuminate\Http\Request一個實例。這個類擴展了Symfony的請求(Symfony\Component\HttpFoundation\Request),這實際上是isMethod()方法的定義。

基本上,給定爲貼函數定義,它讀取「如果這是一個POST請求,只返回用戶數據。如果這不是一個POST請求(例如GET),更新並返回關係的數據。」

因此,如果您發送POST請求,您將得到['user' => $user]響應。如果您發送任何其他請求方法(例如GET),您將修改follows關係並獲得['user.follows' => $user->follows->toArray()]響應。

對我來說,這看起來倒退了。我想你會希望POST請求更新數據,並且任何其他請求(例如GET)只是返回數據。

如果這是正確的,你需要否定你的isMethod檢查:

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

更合適,你應該定義單獨的控制器動作來處理POST VS GET請求,但就是這個問題的範圍之內,可能比你想要成爲臨時維護者更多。

+0

謝謝你的非常全面的答案。正如我所說,我是一個總是新手laravel,事實證明我正在看錯誤的功能(oops)。儘管感謝您的幫助! –

+1

@JackChamberlain一點問題都沒有。樂於幫助。在Laravel中可能有很多「魔力」,所以有時候很難弄清楚發生了什麼,除非你在框架中花了一點時間。試圖調試現有應用程序的新手可能很複雜。 :) – patricus

1

看來這個請求不是POST所以if檢查是不正確的。你可以呼應方法名是這樣的:

$method = $request->method(); 

echo $method; 

// or var_dump($method);