PHP
Web
laravel
ポエム
session
LaravelDay 17

Laravelでフラッシュスコープってあるのか調べてみた

はじめに

このページは Laravel Advent Calender 2017 17日目の記事です。
期日守らなくてすみません・・

PHPをはじめて7カ月、Laravelも7カ月ということで、
はじめに思った「入力フォームって共通的に処理できないの?」のやり方がようやく判ったのでその共有をします。

かなりポエム入ってます。

Laravelをいじりはじめて気持ち悪かったこと

作成画面と編集画面とで入力フォームがそれぞれ存在する。
今までの環境(Java)だと、header/footer用のjspから入力フォーム部分のjspを読み込ませて、表示しているだけだったので、
PHPって割と気持ち悪い構成だなーってずっと思ってました。

腑に落ちない

作成画面と編集画面で入力フォームを分けてるけど、
フォームリクエストバリデーションでバリデーションエラーになると、エラーの入力値が入力フォームに復元される。
このときはoldヘルパーってものから復元されるのかーふーん程度で飛ばしてた。

で、最近は業務外での資料作ったりとか余裕も出てきたので、
このoldヘルパーの正体を探してみることにしたわけです。

このoldヘルパーはフラッシュスコープだよなーとは調べはじめる前から思ってて、
そもそもPHPってフラッシュスコープって言葉を聞いたことがないけど、あるのか?
ってのが気になって、PHPのフラッシュスコープについて調べてみることにしました。
(oldヘルパーとかもうどうでもよくなってる)

低いぐぐり力でぐぐってみた

検索ワード

  • フラッシュスコープ php
  • flashscope php
  • フラッシュスコープ Laravel
  • fla・・・

なぜかspringとかの話題ばかりで出てきて、ぐぐるの時間の無駄そうだと思ったので、Googleで探すのやめた。
(ちなみに、フラッシュメッセージの話題は出てくる)

Laravel APIドキュメントを雑に検索する

https://laravel.com/api/5.5/index.html

flashなんて単語はどこにも出てこない。

基礎に立ち返って調べる

フラッシュスコープはリダイレクトも含んだリクエスト内で有効なセッションスコープってことで、
Laravelのsession周りのメソッド調べてみること。

そしたら、速攻でドンピシャなメソッド発見。

controller
request()->session()->flash($key, $value);
request()->session()->flashInput($array);

中身見てみると、キー「_old_input」に何かやってるから、oldってのもこれっぽい。

で、実際に使ってみると復元された。
コードは以下みたいに書くだけ。

controller
request()->session()->flashInput($eloquent_model->toArray());

これでbladeテンプレート内で変数の展開を自分でしなくて良くなり楽に。
また、当初の入力画面と編集画面でそれぞれフォームを持つという気持ち悪い構成を取らなくて済むので、気分が晴れた。
(ide_helperがちゃんと動いてれば、もっと簡単に調べられたけど・・・)

終わりに

フラッシュスコープ使うと、開発が楽になるよってのをお届けしました。
ここは一例でもっと使うのにいい場面もあると思います。

こういうテーストで書きたいように書くのも久しぶりなので書いてしまうと、
PHPさん、フラッシュスコープってあるんだから、フラッシュスコープって言葉を使って欲しい。
(実際この一言を言いたかっただけで書いた記事)

手元の最古環境のLaravel5.2で既にこのメソッドは存在しているので、上手く活用してください。