2018/10/12

CRUDアプリの作成時にstore()で処理を行ったあとにindexにリダイレクト+Flashメッセージを表示する処理を書きました。
今回はこの処理についてフォーカスを当てた記事をエントリーします。
やりたいこと
1)指定のURLを打ち込む
2)リダイレクト+フラッシュメッセージ表示
[デモ] http://laraweb.sakura.ne.jp/user/redirecttest/from
手順
《事前準備》リダイレクト前のページを作成
【1】コントローラの作成
【2】ビューの作成(リダイレクトFrom側)
【3】ルーティングの設定
《STEP1》リダイレクトの設定
【1】コントローラの編集
【2】ビューの作成 (リダイレクトTo側)
【3】ルーティングの設定
《STEP2》フラッシュメッセージの表示
【1】コントローラの編集
【2】ビューファイルの編集
《事前準備》リダイレクト前のページを作成
まずは何もしていないplainのページを作成します。
リダイレクト元となるページです。
【1】コントローラの作成
php artisan make:controller RedirectTestController
Laravel5.2ではオプションの指定なしでPlainのコントローラができます
:(※省略)
/**
* リダイレクト元
*/
public function from() {
return view('redirecttest.from');
}
:(※省略)
【2】ビューの作成(リダイレクトFrom側)
Bladeのマスターファイル(共通レイアウト)を作成します。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>@yield('title')</title>
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css" rel="stylesheet">
<!-- オプションのテーマ -->
<style>
:(※省略)
</style>
</head>
<body>
<nav class="navbar navbar-inverse navbar-fixed-top">
<div class="container">
<div class="navbar-header">
<a class="navbar-brand" href="/redirecttest/from">リダイレクト/フラッシュメッセージテスト</a>
</div>
<div id="navbar" class="collapse navbar-collapse">
</div><!--/.nav-collapse -->
</div>
</nav>
<div class="container" style="margin-top: 30px;">
@yield('content')
</div><!-- /container -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
</body>
</html>
Bladeのブランチファイルを作成します。
@extends('layouts.master_redirecttest')
@section('title', 'リダイレクト/フラッシュメッセージテスト')
@section('content')
リダイレクト元のページ
@endsection
【3】ルーティングの設定
Route::get('redirecttest/from', 'RedirectTestController@from');
http://{ホスト名}/redirecttest/from
にアクセスして画面が表示されるか確認します。
※ローカル環境のURLに関しては以下を参照してください。
《STEP1》リダイレクトの設定
リダイレクト先のページを作成してリダイレクトの処理をコントローラに記述します。
【1】コントローラの編集
:(※省略)
/**
* リダイレクト元
*/
public function from() {
return redirect('redirecttest/to');
}
/**
* リダイレクト先
*/
public function to() {
return view('redirecttest.to');
}
:(※省略)
/redirecttest/to にアクセスしても
きちんとビュー表示させるようにto()を作成します。
【2】ビューの作成 (リダイレクトTo側)
@extends('layouts.master_redirecttest')
@section('title', 'ダイレクト/フラッシュメッセージテスト')
@section('content')
リダイレクト先のページ
@endsection
【3】ルーティングの設定
リダイレクト元とリダイレクト先の両方にルーティングの設定をします。
Route::get('redirecttest/from', 'RedirectTestController@from');
Route::get('redirecttest/to', 'RedirectTestController@to');
http://{ホスト名}/redirecttest/from
にアクセスして /redirecttest/to にリダイレクトされるか確認します。
《STEP2》フラッシュメッセージの表示
【1】コントローラの編集
:(※省略)
/**
* リダイレクト元
*/
public function from() {
return redirect('redirecttest/to')->with('status', 'リダイレクト処理成功。Flashメッセージ表示');
}
:(※省略)
redirectヘルパーにwithメソッドをつけます。
メッソッドをチェーンするだけでセッションへフラッシュデータを保存できます。
【2】ビューファイルの編集
@extends('layouts.master_redirecttest')
@section('title', 'リダイレクト/フラッシュメッセージテスト')
@section('content')
@if (session('status'))
<div class="alert alert-success" onclick="this.classList.add('hidden')">
{{ session('status') }}
</div>
@endif
リダイレクト先のページ
@endsection
もう一度 http://{ホスト名}/redirecttest/from アクセスします。
リダイレクトされ、フラッシュメッセージが表示されるか確認します。
ためしにリダイレクト先である /redirecttest/to にアクセスしても
フラッシュメッセージは表示されません。
to()はメソッドチェーンでフラッシュメッセージをつけていないからです。
以上です。
仕事で Laravel を使っています。気づいたことや新しい発見など情報を発信していきます。問い合わせはこちら。


