WinRoadのLaravel4初心者講座

次世代PHPフレームワークのLaravel4を初心者向けに解説して参ります。

Winroad徒然草の管理人がお届けします
Userコントローラーの作成

Userコントローラーの作成

このエントリーをはてなブックマークに追加

ユーザーの個人ページの表示や新規作成、アクティベート等の処理をするために、Userコントローラーを作成します。

RESTフルコントローラーの登録

UserコントローラーをRESTフルコントローラーとして登録するために、ルーターに下記のように記述します。

app/routes.php

Route::controller(‘user’,’UserController’);

Userコントローラーの作成

Userコントローラーを下記のように作成します。

app/controllers/UserController.php
<?php
class UserController extends BaseController{
/*
|----------------------------------------
| コンストラクター
|----------------------------------------
*/
 public function __construct(){
 //authフィルター
 $this->beforeFilter('auth',array(
 //フィルター適用の指定
 'only'=>array('getIndex')));
 //全POSTにcsrfフィルターの適用
 $this->beforeFilter('csrf',array('on'=>'post'));
 }
/*
|------------------------------------
| TOPページ(authフィルターの適用)
|------------------------------------
*/
 public function getIndex(){
 echo 'ようこそ'.Auth::user()->name.'さん<br>';
 echo '<h1>ユーザーのTOPページです。</h1>';
 echo '<ul>';
 echo '<li>'.HTML::link('/','サイトのTOP').'</li>';
 echo '<li>'.HTML::link('user/logout','ログアウト').'</li>';
 echo '</ul>';
 }
/*
|-----------------------------------
| 新規作成
|-----------------------------------
| 1.GETでビューの表示
| 2.POSTでユーザー仮登録
| 3.仮登録後、アクティベートメールの送信
*/
 //GETの処理
 public function getCreate(){
 return View::make('user/create');
 }
 //POSTの処理
 public function postCreate(){
 //受信データの整理
 $inputs=Input::only('name','email','password');
 //バリデーションの指定
 $rules=array(
 'name'=>'required',
 'email'=>'required|email|unique:users',
 'password'=>'required|min:4',
 );
 //バリデーションチェック
 $val=Validator::make($inputs,$rules);
 //バリデーションNGなら
 if($val->fails()){
 return Redirect::back()
 ->withErrors($val)
 ->withInput();
 }
 //ユーザーの新規作成
 $inputs['onepass']=md5(Input::get('name').time());
 $user=User::create($inputs);
//アクティベートメールの送信
 $data['onepass']=$inputs['onepass'];
 $data['username']=Input::get('name');
 Mail::send('emails.auth.activate',$data,function($m){
 $m->to(Input::get('email'),Input::get('name'))
 ->subject('アクティベート手続き');
 });
 return $user->name.'さん。<br>メールを送信しましたので、アクティベート手続きをして下さい。';
 }
/*
|-----------------------------------------
| アクティベート
|-----------------------------------------
*/
 Public function getActivate($onepass=null){
 //メール添付のワンパス検索OKなら
 if($user=User::where('onepass','=',$onepass)->first()){
 //アクティベート
 $user->activate=1;
 //ワンパスの変更
 $user->onepass=md5($user->username.time());
 //データ保存
 $user->save();
 //トップページへリダイレクト
 return Redirect::to('/');
 //一致するワンパスがなければ
 }else{
 return 'アクティベートできません。';
 }
 }
}
  • 8-15行目:コンストラクターによる初期化処理を行います。
  • 10-12行目:onlyメソッドで、指定のメソッドだけにauthフィルターを掛けます。onlyメソッドの反対は、exceptメソッドで、指定のメソッド以外の全てにフィルターを掛けます。
  • 14行目:HTTPメソッドのPOSTアクションにのみ、csrfフィルターを掛けます。全てのフォームにトークンを埋め込むのを忘れないようにします。
  • 21-28行目:TOPページを表示します。基本的には、View::makeメソッドで、ビューファイルにリンクを張るのが一般的ですが、今回はとりあえず、無名関数内で文字列を表示しています。
  • 38-40行目:GET時のceateアクション、ビューファイル(‘user/create’)を表示します。
  • 42-70行目:POST時のcreateアクションで、ユーザーの新規登録処理をします。
  • 46-58行目:フォームから受け取った値をバリデーション処理します。
  • 60-61行目:バリデーションOKなら、ワンタイムパスワードを作成して、受信データと共に新規ユーザーを作成します。
  • 63-68行目:ワンタイムパスワードのデータと共に、アクティベートメールを送信します。
  • 76-91行目:アクティベート手続きをします。
  • 80行目:usersテーブルにメールに添付したワンタイムパスワードが存在したら、activate項目を1に修正します。
  • 82行目:1度使用したワンタイムパスワードが使用されないように、ワンタイムパスワードを変更します。
  • 89行目:ワンタイムパスワードが一致しない場合は、「アクティベートできません。」の文字列が表示されますが、ビューファイルを作成してビューファイルを表示する方がスマートです。

« »

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です