LoginSignup
12
10

More than 3 years have passed since last update.

【Laravel】クッキーを読み書き

Last updated at Posted at 2020-07-16

この記事は以下の書籍を参考に執筆しました

クッキーを読み書き

Laravelでのクッキーの利用はリクエストとレスポンスクラスあるメソッドを使う。

保管されているクッキーの値を取得

$変数=$request->cookie(キー);

出典:PHPフレームワークLaravel入門 第2版

クッキーを新たに保存

$response->cookie(キー,,分数)
//分数:保存期間を示す値

出典:PHPフレームワークLaravel入門 第2版

クッキーの値の保存と取得はオブジェクトが違うことに注意

使ってみる

フォームからテキストを送信したものをクッキーとして保管してみる

コントローラクラスを修正

class HelloController extends Controller
{
   public function index(Request $request)
   {
       if ($request->hasCookie('msg'))
       {
           $msg = 'Cookie: ' . $request->cookie('msg');
       } else {
           $msg = '※クッキーはありません。';
       }
       return view('hello.index', ['msg'=> $msg]);
   }
    public function post(Request $request)
    {
        $validate_rule = [
            'msg' => 'required',
        ];
        $this->validate($request, $validate_rule);
        $msg = $request->msg;
        $response = response()->view('hello.index', 
            ['msg'=>'「' . $msg . 
            '」をクッキーに保存しました。']);
        $response->cookie('msg', $msg, 100);
        return $response;
    }
}

出典:PHPフレームワークLaravel入門 第2版

クッキーの取得

if ($request->hasCookie('msg'))

出典:PHPフレームワークLaravel入門 第2版

msgというクッキーが保存されているかをチェック

メソッド 説明
hasCookie 引数に指定したクッキーが保存されているか調べる
$msg = 'Cookie: ' . $request->cookie('msg');

出典:PHPフレームワークLaravel入門 第2版

値の取得あっさりと。

クッキーの保存

ここから厄介

Responseのcookieメソッドで保存するが
cookieメソッドで保存したresponseを返送しないとクッキーは保存されない

$response = response()->view('hello.index', 
            ['msg'=>'「' . $msg . 
            '」をクッキーに保存しました。']);

出典:PHPフレームワークLaravel入門 第2版

responseメソッドはResponseを用意する。

この戻り値からviewメソッドを呼びレンダリング。

これで必要な設定がされたResponseが\$responseに格納される。

そしたら保存してreturn

        $response->cookie('msg', $msg, 100);
        return $response;

出典:PHPフレームワークLaravel入門 第2版

これでクライアントにクッキーが送られる。
クッキーはクライアント側に保存されるからクッキーを設定したらレスポンスを返さなくちゃいけない。

response()というメソッドについて

保存したクッキーをクライアントに返すのに、これでResponseインスタンスを用意していた。

だったら引数にResponse $responseを追加すればいいだろ、と思った。

しかしそうすると\$response->view()の呼び出しで「viewが見つからない」とエラーになる。
Responsenにはviewメソッドが用意されていない。
実はresponseメソッドで得られるのはResponseではない

じゃあ何

「ResponseFactory」というResponseを生成するファクトリのインスタンス。

そしてそこにあるviewがResponseインスタンスを作っていた。

つまり

新たにResponseインスタンスを作って渡していた。

new Responseでも可

responseメソッドを使う代わりに
new Responseでインスタンスを作って利用することも可能。

その場合は

new Response(view(...))

引数にviewメソッドの戻り地を指定して必要な設定が行える
Responseメソッドは色んな方法でインスタンスを用意できる。

12
10
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
12
10