Laravel 6 で HTTP ステータスコードを変更する方法
はじめに
前回は「CakePHP 4 で HTTP ステータスコードを変更する方法」で CakePHP 4.0.5 での HTTP ステータスコードの変更方法を紹介しました。
今回は Laravel 6 で 任意の HTTP ステータスコードを出力する方法をご紹介します。
- Laravel
- 6.18.3
- OS
- Windows 10 Home
1. 下準備
本記事で紹介するサンプルを動かすための下準備の手順を紹介します。
(Laravel 6 のインストール手順は省きます。)
まず SampleController を artisan コマンドで作成します。
> cd \path\to\laravel6
> php artisan make:controller SampleController
Controller created successfully.
/app/Http/Controllers/SampleController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class SampleController extends Controller
{
//
}
そして route.php の設定を追記すれば準備完了です。
/routes/web.php
...
// ▼ これを追加
Route::get('/sample', 'SampleController@index');
2. View を使用する場合
テンプレートを使って画面出力をする際にステータスを変更する場合には、コントローラで下記のように指定します。
/app/Http/Controllers/SampleController.php
public function index()
{
$data = ['message' => 'Down for maintenance'];
// ステータスコード 503 を返す
return response()->view('maintenance', $data, 503);
}
/resources/views/maintenance.blade.php
{{ $message }}
- View Responses (HTTP Responses - Laravel - The PHP Framework For Web Artisans)
- https://laravel.com/docs/6.x/responses#view-responses
3. JSON 形式で出力する場合
JSON 形式で出力する場合には、下記のように json() 関数の第2引数にステータスコードを指定することで変更できます。
/app/Http/Controllers/SampleController.php
public function index()
{
return response()->json([
'message' => 'Down for maintenance',
], 503);
}
この方法については公式マニュアルではみつからず、下記記事を参考に実装しました。
- Laravel で HTTP Status 201 な JSON を返したい - Qiita
- https://qiita.com/a_yasui/items/fb5abeb318eb96fea4ef
Laravel のコードを調べたところ、確かに json() の第2引数はステータスコードになっていて、初期値は 200 になっていました。
/vendor/laravel/framework/src/Illuminate/Routing/ResponseFactory.php
public function json($data = [], $status = 200, array $headers = [], $options = 0)
{
...
}
4. おわりに
今回の json() 関数での HTTP ステータスコード指定のように、個人的には Laravel の公式ドキュメントで欲しい情報が探せないことがあります。
もしそのような場合には検索サイトを使って解決策を調べて、そこに掲載されている関数のソースコードを確認すると、理解を深めたうえで実装できるのかなと思います。