アメリカで爆発的な人気を誇る『Laravel(PHPフレームワーク)』を使って『秒速で会員登録機能を作ってみた』
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
これで完成。は、、早すぎる!!
※P.S:無料メルマガで発信中:過去の僕は「ブログ発信で5億円」を稼ぎました。次は「30億円」を目指します。挑戦しつつ、裏側の思考を「メルマガ」から発信します。不満足なら1秒で解約できます。無料登録は「こちら」です。