はじめに
このページは 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ドキュメントを雑に検索する
flashなんて単語はどこにも出てこない。
基礎に立ち返って調べる
フラッシュスコープはリダイレクトも含んだリクエスト内で有効なセッションスコープってことで、
Laravelのsession周りのメソッド調べてみること。
そしたら、速攻でドンピシャなメソッド発見。
request()->session()->flash($key, $value);
request()->session()->flashInput($array);
中身見てみると、キー「_old_input」に何かやってるから、oldってのもこれっぽい。
で、実際に使ってみると復元された。
コードは以下みたいに書くだけ。
request()->session()->flashInput($eloquent_model->toArray());
これでbladeテンプレート内で変数の展開を自分でしなくて良くなり楽に。
また、当初の入力画面と編集画面でそれぞれフォームを持つという気持ち悪い構成を取らなくて済むので、気分が晴れた。
(ide_helperがちゃんと動いてれば、もっと簡単に調べられたけど・・・)
終わりに
フラッシュスコープ使うと、開発が楽になるよってのをお届けしました。
ここは一例でもっと使うのにいい場面もあると思います。
こういうテーストで書きたいように書くのも久しぶりなので書いてしまうと、
PHPさん、フラッシュスコープってあるんだから、フラッシュスコープって言葉を使って欲しい。
(実際この一言を言いたかっただけで書いた記事)
手元の最古環境のLaravel5.2で既にこのメソッドは存在しているので、上手く活用してください。