2018/10/12

認証画面を作成するにあたってまずは登録画面を作成します。
登録画面は
【1】最初に表示する登録画面(getメソッド)
【2】入力された値をDBに登録する画面(postメソッド)
の2種類を作成します。
【1】登録画面(get)
最初にコントローラを作成します
1)artisanコマンドでUserコントローラを作成
php artisan make:controller UserController
2)コントローラの編集
public function getSignup(){
return View('user.signup');
}
ビューファイルを返すだけの簡単な処理です。
3)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="{{ 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')
</head>
<body>
@include('partials.header')
<div class="container">
@yield('content')
</div><!-- /.container -->
<footer class="footer">
<div class="container">
<p class="text-muted">認証デモ</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>
Bootstrapのテーマ Flat UI を使っています。
個別にCSSとJavascriptを設定できるように @yield('styles') と @yield('scripts') を追記します。
4)Bladeインクルードファイルの作成
グローバルメニューをインクルードファイルとして設定します。
<nav class="navbar navbar-inverse navbar-fixed-top">
<div class="container-fluid">
<!-- Brand and toggle get grouped for better mobile display -->
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" aria-expanded="false">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="#">認証デモ</a>
</div>
<!-- Collect the nav links, forms, and other content for toggling -->
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
<ul class="nav navbar-nav navbar-right">
<li><a href="{{route('user.signup')}}"><i class="fa fa-shopping-cart" aria-hidden="true"></i> 新規登録</a></li>
<li><a href="#"><i class="fa fa-shopping-cart" aria-hidden="true"></i> ログイン</a></li>
</ul>
</div><!-- /.navbar-collapse -->
</div><!-- /.container-fluid -->
</nav>
5)Bladeブランチファイルの作成
新規登録フォームをコーディングします。
@extends('layouts.master_auth')
@section('content')
<div class="row">
<form action="{{ route('user.signup') }}" method="post" class="form-horizontal" style="margin-top: 50px;">
<div class="form-group">
<label class="col-sm-3 control-label" for="InputName">氏名</label>
<div class="col-sm-9">
<input type="text" name="name" class="form-control" id="InputName" placeholder="氏名">
<!--/.col-sm-10---></div>
<!--/form-group--></div>
<div class="form-group">
<label class="col-sm-3 control-label" for="InputEmail">メール・アドレス</label>
<div class="col-sm-9">
<input type="email" name="email" class="form-control" id="InputEmail" placeholder="メール・アドレス">
</div>
<!--/form-group--></div>
<div class="form-group">
<label class="col-sm-3 control-label" for="InputPassword">パスワード</label>
<div class="col-sm-9">
<input type="password" name="password" class="form-control" id="InputPassword" placeholder="パスワード">
</div>
<!--/form-group--></div>
<div class="form-group">
<label class="col-sm-3 control-label" for="area1">住所(エリア)</label>
<div class="col-sm-9">
<select name="area" data-toggle="select" class="form-control select select-default" id="area1">
<option>北海道</option>
<option>東北</option>
<option>関東</option>
<option>中部</option>
<option>近畿</option>
<option>中国</option>
<option>四国</option>
<option>九州</option>
<option>沖縄</option>
</select>
</div>
<!--/form-group--></div>
<div class="form-group">
<label class="col-sm-3 control-label" for="InputSelect">プログラム経験年数</label>
<div class="col-sm-9">
<div class="form-group form-group-sm">
<label class="radio" for="ex1">
<input type="radio" name="experience" data-toggle="radio" value="1年未満" id="ex1" required checked>
1年未満
</label>
<label class="radio" for="ex2">
<input type="radio" name="experience" data-toggle="radio" value=1年以上~3年未満" id="ex2" required>
1年以上~3年未満
</label>
<label class="radio" for="ex3">
<input type="radio" name="experience" data-toggle="radio" value="3年以上" id="ex3" required>
3年以上
</label>
</div>
</div>
<!--/form-group--></div>
<div class="form-group">
<div class="col-sm-offset-3 col-sm-9">
<button type="submit" class="btn btn-primary btn-block">新規登録</button>
</div>
<!--/form-group--></div>
{{ csrf_field() }}
</form>
</div>
@endsection
@extends でマスターファイル(master_auth.blade.php)を継承。
{{ csrf_field() }} でCSRF対策。
6)Routes.php
Route::group(['prefix' => 'user'], function() {
Route::get('/signup',[
'uses' => 'UserController@getSignup',
'as' => 'user.signup'
]);
});
ルーティングにプレフィックス(user)を指定します。
7)ブラウザで確認
ここまで、ちゃんとできてるか一度確認してみます。
【2】登録画面(post)
入力された情報をDBに追加する処理を書きます。
登録画面からPOST送信した後の処理です。
1)DBのテーブル作成
artisanコマンドでマイグレーションファイルの作成
php artisan make:migration create_users_talbe
2)マイグレーションファイルの編集
usersテーブルのカラムを仕様にそって作成します。
public function up()
{
Schema::create('users', function(Blueprint $table){
$table->increments('id');
$table->timestamps();
$table->string('email')->unique();
$table->string('password');
$table->string('name');
$table->string('area');
$table->string('experience');
$table->rememberToken();
});
}
public function down()
{
Schema::drop('users');
}
3)マイグレーションの実行
編集したマイグレーションファイルを実行します。
php artisan migrate
xamppのPhpMyadminでテーブルができているか確認してみます。
これでとりあえず入力されたデータをいれる "箱" はできました。
4)Userモデルを編集
Userモデルはデフォルトで作成されているのでそれを編集します。
ちなみにartisanコマンドでUserモデルを作成する場合は以下のようになります。
php artisan make:model User
Userモデルのスケルトンを編集します。
: protected $fillable = [ 'name', 'email', 'password','area','experience', ]; :
fillableで挿入可能なカラムを記述していきます。
5)コントローラに処理を追記
新規登録のpost処理を記述します。
という流れで処理を書いていきます。
public function postSignup(Request $request){
// バリデーション
$this->validate($request,[
'name' => 'required',
'email' => 'email|required|unique:users',
'password' => 'required|min:4',
'area' => 'required',
'experience' => 'required'
]);
// DBインサート
$user = new User([
'name' => $request->input('name'),
'email' => $request->input('email'),
'password' => bcrypt($request->input('password')),
'area' => 'required',
'experience' => 'required'
]);
// 保存
$user->save();
// リダイレクト
return redirect()->route('user.profile');
}
Userモデルをインポートしておきます。
⇒ use App\User; ※冒頭に記述
6)ユーザープロファイルの作成
リダイレクト先のページを動作確認用で簡易的に作成します。
View
@extends('layouts.master_auth')
@section('content')
<div style="margin-top: 30px; text-align: center;"><h3>新規登録完了しました。</h3></div>
@endsection
Controller
public function getProfile(){
return view('user.profile');
}
7)Routes.php
post処理とプロファイル(新規登録後の画面)を追記します。
Route::group(['prefix' => 'user'], function() {
Route::get('/signup',[
'uses' => 'UserController@getSignup',
'as' => 'user.signup'
]);
Route::post('/signup',[
'uses' => 'UserController@postSignup',
'as' => 'user.signup'
]);
Route::get('/profile',[
'uses' => 'UserController@getProfile',
'as' => 'user.profile'
]);
});
8)動作確認
1.入力画面で何か適当に入力します。
2.送信後、プロファイル画面にリダイレクトされているか確認。
3.XAMPPのPhpMyadminでレコードが追加されているか確認。
新規登録画面は以上になります。
仕事で Laravel を使っています。気づいたことや新しい発見など情報を発信していきます。問い合わせはこちら。




