2018/01/24

今回は入力フォームから確認画面の作成をやります。
以前、チュートリアル初級の「入力から確認画面までの流れ」をやりました。
基本的にそのソースをそのまま使います。
目標
・入力フォーム~確認画面の作成
・バリデーション機能
流れ
1)ビューの雛形の作成
2)入力フォームの作成
3)確認画面の作成
4)リクエストフォームの作成
5)コントローラの作成
6)ルーティング
7)動作確認
1)ビューの雛形の作成
ビュー
<!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="{{ url('/') }}/dist/css/vendor/bootstrap/css/bootstrap.min.css" rel="stylesheet"><!-- Loading Bootstrap -->
<link href="{{ url('/') }}/dist/css/flat-ui.min.css" rel="stylesheet"><!-- Loading Flat UI -->
<link href="{{ url('/') }}/css/starter-template.css" rel="stylesheet"><!--Bootstrap theme(Starter)-->
<link rel="shortcut icon" href="{{ url('/') }}/dist/img/favicon.ico">
<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
<![endif]-->
@yield('styles')
<link href="http://netdna.bootstrapcdn.com/font-awesome/4.6.3/css/font-awesome.css" rel="stylesheet"><!-- FontAwesome -->
</head>
<body>
<!--=================================================
Navbar
==================================================-->
<nav class="navbar navbar-default navbar-fixed-top" role="navigation">
<div class="container-fluid">
<!-- スマートフォンサイズで表示されるメニューボタンとテキスト -->
<div class="navbar-header">
<!-- タイトルなどのテキスト -->
<a class="navbar-brand" href="#">@yield('title')</a>
</div>
</div>
</nav>
<div class="container" style="margin-top: 40px;">
@yield('content')
</div><!-- /.container -->
<footer class="footer">
<div class="container">
<p class="text-muted">@yield('title')</p>
</div>
</footer>
<!-- Bootstrap core JavaScript
================================================== -->
<script src="{{ url('/') }}/dist/js/vendor/jquery.min.js"></script>
<script src="{{ url('/') }}/dist/js/vendor/video.js"></script>
<script src="{{ url('/') }}/dist/js/flat-ui.min.js"></script>
<script src="{{ url('/') }}/assets/js/prettify.js"></script>
<script src="{{ url('/') }}/assets/js/application.js"></script>
@yield('scripts')
</body>
</html>
2)入力フォームの作成
ビュー
@extends('layouts.master_insert')
@section('title', 'Laravel チュートリアル(初級)')
@section('content')
<h3>従業員登録画面</h3>
<p><span class="label label-danger">入力画面</span> -> 確認画面 -> 完了画面</p>
<form action="{{ route('insert.confirm') }}" method="post" class="form-horizontal">
<input type="hidden" name="_token" value="{{ csrf_token() }}">
<div class="form-group @if($errors->has('username')) has-error @endif">
<label class="col-sm-2 control-label" for="username">名前:</label>
<div class="col-sm-10">
<input type="text" class="form-control" id="username" name="username" placeholder="お名前を入力してください" value="{{ old('username') }}">
@if($errors->has('username'))<span class="text-danger">{{ $errors->first('username') }}</span> @endif
</div>
</div>
<div class="form-group @if($errors->has('mail')) has-error @endif">
<label class="col-sm-2 control-label" for="mail">Email:</label>
<div class="col-sm-10">
<input type="text" class="form-control" id="mail" name="mail" placeholder="Emailを入力してください" value="{{ old('mail') }}">
@if($errors->has('mail'))<span class="text-danger">{{ $errors->first('mail') }}</span> @endif
</div>
</div>
<div class="form-group @if($errors->has('age')) has-error @endif">
<label class="col-sm-2 control-label" for="age">年齢:</label>
<div class="col-sm-2">
<input type="text" class="form-control" id="age" name="age" placeholder="年齢" value="{{ old('age') }}">
</div>
<div class="col-sm-8">歳 @if($errors->has('age'))<span class="text-danger">{{ $errors->first('age') }}</span> @endif</div>
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10 text-center">
<input type="submit" name="button1" value="送信" class="btn btn-primary btn-wide" />
</div>
</div>
</form>
@endsection
3)確認画面の作成
ビュー
@extends('layouts.master_insert')
@section('title', 'Laravel チュートリアル(初級)')
@section('content')
<h3>従業員登録画面</h3>
<p>入力画面 -> <span class="label label-danger">確認画面</span> -> 完了画面</p>
<form action="{{ route('insert.finish') }}" method="post" class="form-horizontal">
<input type="hidden" name="_token" value="{{ csrf_token() }}">
<input type="hidden" name="username" value="{{$username}}">
<input type="hidden" name="mail" value="{{$mail}}">
<input type="hidden" name="age" value="{{$age}}">
<div class="row">
<label class="col-sm-2 control-label" for="username">名前:</label>
<div class="col-sm-10">{{$username}}</div>
</div>
<div class="row">
<label class="col-sm-2 control-label" for="mail">Email:</label>
<div class="col-sm-10">{{$mail}}</div>
</div>
<div class="row">
<label class="col-sm-2 control-label" for="age">年齢:</label>
<div class="col-sm-2">{{$age}}</div>
<div class="col-sm-8">歳</div>
</div>
<div class="row">
<div class="col-sm-offset-2 col-sm-10">
<input type="submit" name="button1" value="登録" class="btn btn-primary btn-wide" />
</div>
</div>
</form>
@endsection
4)リクエストフォームの作成
リクエスト
public function rules()
{
return [
'username'=>'required',
'mail'=>'required|email',
'age'=>'required|numeric',
];
}
public function messages()
{
return [
"required" => "必須項目です。",
"email" => "メールアドレスの形式で入力してください。",
"numeric" => "数値で入力してください。",
];
}
5)コントローラの作成
コントローラ
class InsertDemoController extends Controller
{
public function getIndex()
{
return view('insert.index');
}
public function confirm(\App\Http\Requests\InsertDemoRequest $request)
{
$data = $request->all();
return view('insert.confirm')->with($data);
}
}
6)ルーティング
# 入力画面
Route::get('request/', [
'uses' => 'InsertDemoController@getIndex',
'as' => 'insert.index'
]);
# 確認画面
Route::post('request/confirm', [
'uses' => 'InsertDemoController@confirm',
'as' => 'insert.confirm'
]);
7)動作確認
入力画面
確認画面
今回はここまで。
次回はマイグレーションでテーブルを作成します。
仕事で Laravel を使っています。気づいたことや新しい発見など情報を発信していきます。問い合わせはこちら。

