Written by Manabu Bannai

アメリカで爆発的な人気を誇る『Laravel(PHPフレームワーク)』を使って『秒速で会員登録機能を作ってみた』

Laravel PROGRAMMING

Laravelはどれだけ便利かを証明する記事です。

アメリカで爆発的な人気を誇る『Laravel(PHPフレームワーク)』で会員登録機能をつくっていきます。

完成イメージは以下の写真のとおりです。
会員登録画面

実装する機能としては以下のとおりです。

・ユーザーの会員情報をDBに保存する
・会員登録フォームの作成
・フォームのバリデーション機能の実装
・パスワードの暗号化
・パスワードのタイプミスのバリデーション
・ユーザーは3項目が入力可能(Email, パスワード, 電話番号)

こんな感じです。
それでは作っていきます。

ユーザーテーブルをつくる

$ php artisan migrate:make create_users_table

生成されたファイルに以下の記述


<?php

use IlluminateDatabaseSchemaBlueprint;
use IlluminateDatabaseMigrationsMigration;

class CreateUsersTable extends Migration {

	/**
	 * Run the migrations.
	 *
	 * @return void
	 */
	public function up()
	{
		Schema::create('users', function(Blueprint $table)
		{
			$table->increments('id');
			$table->string('email')->unique();;
			$table->string('password');
			$table->string('phone');
			$table->timestamps();
			$table->rememberToken();
		});
	}

	/**
	 * Reverse the migrations.
	 *
	 * @return void
	 */
	public function down()
	{
		Schema::drop('users');
	}

}

つぎにマイグレーションします。

$ php artisan migrate

ここまでで、ユーザーテーブルの完成です。

ユーザーコントローラーをつくる

$ php artisan controller:make UserController

ユーザーコントローラーのルーティング設定

編集ファイル:app/routes.php


// usersにアクセスしたら、UserControllerを起動する
Route::resource('users', 'UserController');

ユーザーコントローラーに会員登録の処理を記述

編集ファイル:app/controller/UserController.php


	public function create()
	{
		return View::make('users.create');
	}

	public function store()
	{
		$rules = [
			'email' => 'required|email|unique:users',
			'password'=>'required|confirmed',
			'password_confirmation' => 'required',
			'phone' => 'required',
		];

		$messages = array(
			'email.required' => 'メールアドレスを正しく入力してください。',
			'password.required' => 'パスワードを正しく入力してください。',
			'password_confirmation.required' => 'パスワードが一致しません。',
			'phone.required' => '電話番号を正しく入力してください。',
		);

		$validator = Validator::make(Input::all(), $rules, $messages);

		if ($validator->passes()) {
			$user = new User;
			$user->email = Input::get('email');
			$user->password = Hash::make(Input::get('password'));
			$user->phone = Input::get('phone');
			$user->save();
			return Redirect::route('users.create')
				->with('success', '会員登録しました。');
		}else{
			return Redirect::route('users.create')
				->withErrors($validator)
				->withInput();
		}
	}

ここまでで、会員登録のバックエンド処理は完了。
あとはビューをつくるだけです。

会員登録のビューをつくる

Bootstrapをつかって時間短縮します。
新規作成ファイル:app/views/layouts/default.blade.php

<!DOCTYPE HTML>
<html lang="ja">
<head>
	<meta charset="utf-8" />
	<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.0/css/bootstrap.min.css">
	<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.0/css/bootstrap-theme.min.css">
	<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.0/js/bootstrap.min.js"></script>
</head>
<body>

@yield('content')

</body>
</html>

つぎに、会員登録画面のビューをつくります。

新規作成ファイル:app/views/users/create.blade.php


@extends('layouts.default')
@section('content')

<h1>会員登録</h1>

{{-- 会員登録完了時にフラッシュメッセージを表示 --}}
@if(Session::has('success'))
	<div class="bg-info">
		<p>{{ Session::get('success') }}</p>
	</div>
@endif

{{ Form::open(['route' => 'users.store'], array('class' => 'form-horizontal')) }}

	<div class="form-group">
		{{-- バリデーションのエラー表示 --}}
		@foreach($errors->get('email') as $message)
			<span class="bg-danger">{{ $message }}</span>
		@endforeach
		<label for="email" class="col-sm-2 control-label">メールアドレス</label>
		<div class="col-sm-10">
			<input name="email" type="email" class="form-control">
		</div>
	</div>

	<div class="form-group">
		{{-- バリデーションのエラー表示 --}}
		@foreach($errors->get('password') as $message)
			<span class="bg-danger">{{ $message }}</span>
		@endforeach
		<label for="password" class="col-sm-2 control-label">パスワード</label>
		<div class="col-sm-10">
			<input name="password" type="password" class="form-control">
		</div>
	</div>

	<div class="form-group">
		{{-- バリデーションのエラー表示 --}}
		@foreach($errors->get('password_confirmation') as $message)
			<span class="bg-danger">{{ $message }}</span>
		@endforeach
		<label for="password_confirmation" class="col-sm-2 control-label">パスワードの確認</label>
		<div class="col-sm-10">
			<input name="password_confirmation" type="password" class="form-control">
		</div>
	</div>

	<div class="form-group">
		{{-- バリデーションのエラー表示 --}}
		@foreach($errors->get('phone') as $message)
			<span class="bg-danger">{{ $message }}</span>
		@endforeach
		<label for="phone" class="col-sm-2 control-label">電話番号</label>
		<div class="col-sm-10">
			<input name="phone" type="phone" class="form-control">
		</div>
	</div>

	<div class="form-group">
		<button type="submit" class="btn btn-primary">会員登録する</button>
	</div>

{{ Form::close() }}

@stop

これで完成。は、、早すぎる!!