LoginSignup
3
3

More than 5 years have passed since last update.

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

Posted at

はじめに

このページは 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周りのメソッド調べてみること。

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

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で既にこのメソッドは存在しているので、上手く活用してください。

3
3
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
3