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.