3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Laravelしくじり先生その1『(型宣言を)「ガチガチにやらなきゃモチモチにならない」と言ったな。あれはやり過ぎ注意だ。』

Posted at

久々にQiita投稿します。

#前提

  • Laravel Valetで開発環境を構築しています(Docker不使用)
  • Laravel 8.41.0
  • PHP 8.0.5
  • Nginx 1.19.10
  • macOS Big Sur 11.4
  • リクエストしたらテキストをレスポンスボディとして返すAPIを作っています

「どうして」となったコード

HogeController.php
<?php

namespace App\Http\Controllers\Api;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

class HogeController extends Controller
{
    public function fuga(Request $request): string
    {
        return response('OK')->header('Content-Type', 'text/plain');
    }
}

と書いたらレスポンスが下記のようになりました。

% curl https://example.test/api/hoge/fuga
HTTP/1.1 200 OK
OK

どうしてHTTPヘッダーもレスポンスに混じっているんですかねぇ🤔

これが正解

HogeController.php
<?php

namespace App\Http\Controllers\Api;

use Illuminate\Http\Response;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

class HogeController extends Controller
{
    public function fuga(Request $request): Response
    {
        return response('OK')->header('Content-Type', 'text/plain');
    }
}

Illuminate\Http\Response
を戻り値の型宣言にしたら

% curl https://example.test/api/hoge/fuga
OK

期待通りstringだけのレスポンスが返ってきました👍

結局

「stringを返すからstringで型宣言だな!」という短絡的な思い込みは良くないですね。

最後に

マサカリ大歓迎です。
よろしければ、LGTMボタンを押して行ってくださいね🌟

見出しの出典

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?