Laravelでフォーム入力から確認画面経由してDB登録するまでの流れをサポートするライブラリを作ってみた
概要
以前に仕事の関係で
1. フォーム入力画面
2. 入力内容の確認画面
3. DB登録
の画面遷移フローの実装―フォームに入力した内容をセッションを使って持ち回す、昔ながらのパターン―を共通化したい。つまりライブラリ化して欲しい、という要望を受けて作ったLaravel用ライブラリの存在を思い出したので、githubにアップしてみました。対応バージョンはLaravel5.5以上としています。(公開したところで使う人いるんだろうか・・・?という疑問はこの際一旦置いておくことにします)
https://github.com/shkfn/transaction-parameter
2018-07-25追記
このライブラリのデモプロジェクトを作成しました。
https://github.com/shkfn/transaction-demo
使用例
こんな感じで、トークンと共にパラメータ管理をサポートするライブラリです。
namespace App\Http\Controllers;
use Shkfn\TransactionParameter\Transaction;
use App\Http\Requests\InputRequest;
class TransactionController extend Controller
{
/** @var Transaction */
protected $transaction;
public function __construct(Transaction $transaction)
{
$this->transaction = $transaction;
}
/**
* 入力画面表示
* @param string $token
*/
public function input($token = null)
{
$params = null;
if (is_null($token)) {
$token = $this->transaction->start(); // tokenがnullか引数無しの場合に新しいtokenを発行して返却
} else {
// token付きで入力画面に戻ってきた場合にパラメータを引き出せる
if ($this->transaction->start($token)) { // tokenが渡された場合は保存領域でtokenの存在確認をbool返却
$params = $this->transaction->get(); // パラメータ取得。格納値が無い場合は空配列が返る。
} else {
return abort(404);
}
}
return view('input', ['token' => $token,'params' => $params]); // tokenはルートパラメータとして使用
}
/**
* 入力バリデーション
* @param InputRequest $request
* @param string $token
*/
public function validateInput(InputRequest $request, $token)
{
// token毎に区切られた領域に保存
if ($this->transaction->start($token)) {
$params = $request->validated();
$this->transaction->put($params); // バリデーション済みの値を保存。第2引数に文字列でタグを設定可能。タグを設定して保存した場合は、get時にもタグの指定が必要。
return redirect(route('confirm', ['token' => $token]));
}
return back();
}
/**
* 確認画面表示
* @param string $token
*/
public function confirm($token)
{
if ($this->transaction->start($token)) { // tokenを使ってトランザクションを再開
$params = $this->transaction->get();
return view('confirm', ['token' => $token, 'params' => $params]);
}
return redirect(route('input')); // 入力画面やエラー画面等へリダイレクト
}
/**
* 登録処理
* @param string $token
*/
public function register($token)
{
if ($this->transaction->start($token)) { // tokenを使ってトランザクションを再開
$params = $this->transaction->get();
Post::create($params); // DB登録
$this->transaction->close(); // tokenの保存領域を明示的にクリアするメソッド
return redirect(route('complete')); // 完了メッセージを表示する画面等へリダイレクト
}
return redirect(route('input')); // 入力画面やエラー画面等へリダイレクト
}
}
最後に
念のため書き添えておきますと、仕事の関係で作ったと申しましても、このライブラリについては特定の機密を含まない事もあって、公開についての了承は得ています。作ったままの物を公開しても良い事になっているのですが、元々の状態から多少アレンジを加えています。
使い方の詳細についてはリポジトリのreadme.mdに書いていますので、そちらを参照してください。
Author And Source
この問題について(Laravelでフォーム入力から確認画面経由してDB登録するまでの流れをサポートするライブラリを作ってみた), 我々は、より多くの情報をここで見つけました https://qiita.com/shkfn/items/4342d95656fef81e3f8c著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .