Laravel - http durum koduyla birlikte json'u döndür


86

Bir nesneyi iade edersem:

return Response::json([
    'hello' => $value
]);

durum kodu 200 olacaktır. Bir mesajla 201 olarak değiştirip json nesnesiyle nasıl gönderebilirim ?.

Laravel'de durum kodunu ayarlamanın bir yolu olup olmadığını bilmiyorum.

Yanıtlar:


117

http_response_code()HTTP yanıt kodunu ayarlamak için kullanabilirsiniz .

Hiçbir parametre iletmezseniz, http_response_code geçerli durum kodunu alır. Bir parametreyi geçerseniz, yanıt kodunu ayarlayacaktır.

http_response_code(201); // Set response status code to 201

Laravel için (Referans: https://stackoverflow.com/a/14717895/2025923 ):

return Response::json([
    'hello' => $value
], 201); // Status code here

3
Unutmayın ki Symfony \ Component \ HttpFoundation \ Tepki http durum kodları için kendi önceden tanımlanmış sabitleri vardır ve set durumuna istiyorsanız şey kendisine yakın ... yani içine Durumunuzu değişeceğini daha başka kullanırsanız 449 , 500
Mladen Janjetovic

2
@Tushar ya herhangi bir veriyi geri göndermek istemiyorsam, sadece 200 yanıt mı? Mı response()->json([], 200);amaca uygun bu durumda? Yoksa 200 örtük mü?
Jonathan


use Illuminate\Http\Response;ve return new Response(['message' => 'test'], 422);benim için çalıştı
Derk Jan Speelman

65

Laravel 5'te böyle yapıyorum

return Response::json(['hello' => $value],201);

Veya bir yardımcı işlev kullanarak:

return response()->json(['hello' => $value], 201); 

1
@timeNomad Bu iki yöntemin artıları ve eksileri nelerdir - hangisi önerilir?
DJC

2
@DJC ilk yöntemde Response ::'u birkaç kez yalnızca bir kez yükleyerek kullanabilirsiniz. İkinci yöntemde, response () -> seçeneğini her kullandığınızda bu sınıfı çağıracaksınız (yalnızca birini kullanacaksanız sorun değil).
Marcelo Agimóvel

33

Yanıtınızı tek kontrol altında tutmanın daha iyi bir uygulama olduğunu düşünüyorum ve bu nedenle en resmi çözümü buldum.

response()->json([...])
    ->setStatusCode(Response::HTTP_OK, Response::$statusTexts[Response::HTTP_OK]);

bunu namespacedeklarasyondan sonra ekleyin :

use Illuminate\Http\Response;

Teşekkürler, buna bir referans arıyordum. Sadece 200 (HTTP_OK) yerine 201, 400 vb. Gibi diğer mevcut yanıt adlarına bir bağlantınız var mı? Googling'i denedim ama henüz tam olarak bulamadım!
jjmu15

1
Nevermind ... buldum. İşte arayanlar için tam bir liste: gist.github.com/jeffochoa/a162fc4381d69a2d862dafa61cda0798
jjmu15

13

Birden çok yol var

return \Response::json(['hello' => $value], STATUS_CODE);

return response()->json(['hello' => $value], STATUS_CODE);

STATUS_CODE, göndermek istediğiniz HTTP durum kodunuzdur. İkisi de aynı.

Eloquent modeli kullanıyorsanız, o zaman basit dönüş de varsayılan olarak JSON'a otomatik olarak dönüştürülecektir.

return User::all();

2
return response(['title' => trans('web.errors.duplicate_title')], 422); //Unprocessable Entity

Umarım cevabım yardımcı olmuştur.


0

Ben yanıt yardımcısını tercih ederim:

    return response()->json(['message' => 'Yup. This request succeeded.'], 200);

0

Bu ile yapmak daha iyidir yardımcı işlevlerini yerine Cepheler . Bu çözüm Laravel 5.7'den itibaren iyi çalışacak

//import dependency
use Illuminate\Http\Response;

//snippet
return \response()->json([
   'status' => '403',//sample entry
   'message' => 'ACCOUNT ACTION HAS BEEN DISABLED',//sample message
], Response::HTTP_FORBIDDEN);//Illuminate\Http\Response sets appropriate headers

0

JSON speicify gerekmez * laravel 7. RESPONSE'u o onu dönüştürülür otomatik oluyor neden JSON

return response(['Message'=>'Wrong Credintals'], 400);
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.