Redirect/Flashメッセージ

2018/10/12

CRUDアプリの作成時にstore()で処理を行ったあとにindexにリダイレクト+Flashメッセージを表示する処理を書きました。

RESTfulコントローラの作成

今回はこの処理についてフォーカスを当てた記事をエントリーします。

 

やりたいこと

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 を使っています。気づいたことや新しい発見など情報を発信していきます。問い合わせはこちら

>> Twitter をフォローする

 

-実践知識