この記事は以下の書籍を参考に執筆しました
クッキーを読み書き
Laravelでのクッキーの利用はリクエストとレスポンスクラスあるメソッドを使う。
保管されているクッキーの値を取得
$変数=$request->cookie(キー);
クッキーを新たに保存
$response->cookie(キー,値,分数)
//分数:保存期間を示す値
クッキーの値の保存と取得はオブジェクトが違うことに注意
使ってみる
フォームからテキストを送信したものをクッキーとして保管してみる
コントローラクラスを修正
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;
}
}
クッキーの取得
if ($request->hasCookie('msg'))
msgというクッキーが保存されているかをチェック
メソッド | 説明 |
---|---|
hasCookie | 引数に指定したクッキーが保存されているか調べる |
$msg = 'Cookie: ' . $request->cookie('msg');
値の取得はあっさりと。
クッキーの保存
ここから厄介
Responseのcookieメソッドで保存するが
cookieメソッドで保存したresponseを返送しないとクッキーは保存されない
$response = response()->view('hello.index',
['msg'=>'「' . $msg .
'」をクッキーに保存しました。']);
responseメソッドはResponseを用意する。
この戻り値からviewメソッドを呼びレンダリング。
これで必要な設定がされたResponseが$responseに格納される。
そしたら保存してreturn
$response->cookie('msg', $msg, 100);
return $response;
これでクライアントにクッキーが送られる。
クッキーはクライアント側に保存されるからクッキーを設定したらレスポンスを返さなくちゃいけない。
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メソッドは色んな方法でインスタンスを用意できる。