このサイトは、只今WEB業界で活躍中のデザイナー、プログラマーの方々の情報を集めたweb統合情報サイトです。

web帳

記事詳細

2014.09.24

人気急上昇!PHPフレームワーク「Laravel」を使ってみました。簡易会員サイト作成編

前回、こちらで

人気急上昇!PHPフレームワーク「Laravel」を使ってみました。 インストール 〜 起動まで。

インストールまで行ったので、今回は 基本的な使い方や「artisan(アーティザン)」コマンドの「migrate(マイグレート)」オプション周りや、簡易の会員サイトの作成を行なって行きたいと思います。

インストール

何はともあれインストールから振り返ってみましょう。

基本はこちらの

Laravelクイックスタート

http://laravel4.kore1server.com/docs/quick

でまとまっていますので、こちらを元に進めていきます。

LaravelフレームワークはComposerをインストールと依存パッケージの管理に活用しています。

とのことなので、Composerをインストールした環境で、以下のコマンドでサクっとプロジェクトの作成が行えます。

[code]composer create-project laravel/laravel=4.1.* your-project-name --prefer-dist[/code]

your-project-name のところは任意の名前で。

パーミッション

app/storage 以下はサーバーが書き込めるように権限変更が必要です。

Laravelのサーバー

PHP5.4以上を使用しているのであれば、Artisan 'serve'コマンドで、開発サーバーを使用することが可能なのです!

[code]php artisan serve[/code]

ディレクトリ

主に、appディレクトリーの

views

controllers

models

を扱う機会が多いでしょう。

設定ファイルは app/config 以下のファイルとなっております。

ルーティング

ルーティングの設定は app/routes.php となっております。

では、例に習って以下を追加。

app/routes.php

[code]Route::get('users', function() {return 'Users!';});[/code]

/usersへアクセスすると、Users!と表示。Yeah!

コントローラークラスの指定も以下の様な記述で行えます。

[code]Route::get('users', 'UserController@getIndex');[/code]

ビュー

ビューは app/viewsディレクトリー 以下のファイルとなります。

また、例に習って、layout.blade.phpusers.blade.phpを修正。

app/views/layout.blade.php

 

[code]
<html>
<body>
<h1>Laravelクイックスタート</h1>
@yield('content')
</body>
</html>[/code]

 

app/views/user.blade.php

 

[code]@extends('layout')@section('content')Users!@stop[/code]

Bladeテンプレートを作成。

Bladeテンプレートファイル「任意のファイル名.blade.php 」となっております。

表示させたいViewの記述は、View::make('ファイル名');

となっておりますので

app/routes.php

[code]Route::get('users', function() {return View::make('users');});[/code]

と、ルーティングの設定に追加。

とここまで出来たらデータベースの方の設定へと。

マイグレーション

「artisan(アーティザン)」コマンドの「migrate(マイグレート)」オプションを使うことによって、

データベースをサクっと作成することが可能となっております。

データベース接続の設定ファイルは「app/config/database.php」となっております。

[code]'default' => 'mysql',[/code]

を使用するデータベースを記述します。(mysqlはデフォルト)

app/config/database.php

[code]〜 省略 〜
'mysql' => array(
'driver' => 'mysql',
'host' => 'localhost',
'database' => 'laravel',
'username' => 'root',
'password' => 'password',
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
),
〜 省略 〜[/code]

こちらでデータベース接続設定を行います。

上記の場合だと、laravelのデータベースにroot権限のパスワードは「password」となります。

ターミナルを起動し、プロジェクトのルートディレクトリー(artisanがあるディレクトリ)で以下のコマンドを入力

[code]php artisan migrate:make create_users_table[/code]

app/database/migrations 以下に「2014_◯◯_◯◯_create_users_table.php」の様なファイルが作成されたかと思います。

そのファイルを開くと、upとdownのメソッドが記述されているかと思います。

2014_◯◯_◯◯_create_users_table.php

[code]public function up() { 
Schema::create('users', function($table) {
$table->increments('id');
$table->string('email')->unique();
$table->string('name');
$table->timestamps();
});
}

public function down() {
Schema::drop('users');
}[/code]

それぞれ、upメソッドにはデータベーステーブルに対する変更を記述downメソッドにはその変更をもとに戻す指定(ロールバック時に実行)を記述します。

これらを記述しターミナルでmigrateコマンド実行。

[code]php artisan migrate[/code]

あっと言う間に、

Eloquent ORM

これまた便利な機能の一つで、関連するデーターベーステーブルにクエリーし、モデル名の複数形を使用することが可能となっております。

モデルとなるファイルは「app/models」以下に格納します。

phpmyadminを使って、データを挿入します。

データを挿入したら「app/routes.php」を編集。

app/routes.php

[code]Route::get('users', function() {
$users = User::all();return View::make('users')->with('users', $users);
});[/code]

User::all(); で全レコードを取得

withメソッドを使用しビューに渡す。withメソッドにはキーと値を渡し、ビューで使用できる変数を指定。

データ表示

ビューを編集します。「app/views/user.blade.php」を編集。

app/views/user.blade.php

[code]@extends('layout')
@section('content')
@foreach($users as $user)
<p>{{$user->id}} {{ $user->name }}</p>
<p>{{ $user->email }}</p>
@endforeach
@stop[/code]

修正したらブラウザで /usersにアクセス。

このように表示すれば成功!

超簡易会員サイト作成

とここまで、基本的な使用方法を書いてきました。

では早速、簡易会員サイトを作成していきましょう。

こちらの「Laravelでのログイン処理のかきかた」がサクっと作成する方法が書かれていましたので、

実際にやってみましょう。

http://blog.e2info.com/2013/07/04/phplaravel_auth/

ホンのちょっと修正して、情報を入力してログインするページとプロフィールページを作成していきます。

まず、

[code]composer create-project laravel/laravel=4.1.* laravel_members --prefer-dist[/code]

でプロジェクトの作成。(プロジェクト名はlaravel_members)

データベース作成

[code]reate database laravel_member[/code]

app/config/database.php でデータベースの接続設定を行います。

設定が完了しましたら、 続いてルーティングの設定を。

app/routes.php

[code]Route::when('', 'auth');

Route::get('/login', function() {
return View::make('user/login');
});

Route::post('/login', array('before' => 'csrf', function() {
$inputs = Input::only(array('name', 'password'));
if ( Auth::attempt($inputs) ) {
return View::make("user/profile");
} else {
return Redirect::back()->withInput();
}
}));[/code]

を追加。

Route::when('', 'auth');で全てのベージで認証の有効にしていますが、部分的にも可能となっております。

例:

[code]Route::when(‘admin/*’, ‘admin’);[/code]

続いてViewの作成。ログインページを作って行きます。

ログインページ

user/login.blade.php

[code]@if ( Auth::guest() )
未ログイン
@else
ログイン済みです
@endif

{{ Form::open() }}
{{ Form::label("name", "Username") }}
{{ Form::text("name", Input::old('name', ''), [ "placeholder" => "web帳" ]) }}
{{ Form::label("password", "Password") }}
{{ Form::password("password", [ "placeholder" => "password" ]) }}
@if ($error = $errors->first("password"))
<div class="error"> {{ $error }} </div>
@endif {{ Form::submit("login") }}
{{ Form::close() }}[/code]

プロフィールページ

user/profile.blade.php
[code]<h2>いらっしゃい、{{ Auth::user()->name }}さん</h2>
<p>プロファイルページヘようこそ。</p>[/code]

Bladeテンプレートに関してはいつかまとめられたらと思いつつ。。。
ここまでで一通り完了しましたので、テーブルを強引に作成する記述をルーティングに含めます。

app/routes.php

[code]Route::get('/create-users-table', function() {
Schema::create('users', function($table) {
$table->increments('id');
$table->string('name', 100);
$table->string('password', 100);
$table->timestamps();
});

$user = new User;
$user->name = 'user';
$user->password = Hash::make('password');
$user->save();

return 'テーブル作成';
});[/code]

ブラウザで /create-users-table をアクセスすると、サクっとテーブルが作成されちゃいます!  

ログアウトの処理も追加しておきます。

app/routes.php

[code]Route::get('/logout', function() {
Auth::logout();
return Redirect::to('/login');
});[/code]

これで、超簡易ログインテスト完成!

/login をアクセスし、 usernameに「user」passwordに「password」を入力し、submitを押すと

きちんと飛んだ。/logout をアクセスすると、ログアウトし再びログインページにリダイレクトされるかと思います。

これらのソースは以下のURLにあります。(ブランチ:feature/minimum)

GitHub : webcyou

https://github.com/webcyou/laravel_members/tree/feature/minimum

コントローラを使った記述

上記の作成方法は超手軽に作ったので、今度はLaravelっぽく、Controllerを使った記述を行なっていきます。

まず、routes.phpの精査を行なって行きます。

app/routes.php

[code]Route::group(["before"=>"guest"],function() {[/code]

とグループ分けを行い、認証前のguest状態と認証後で振分けを行います。

[code]Route::group(["before"=>"guest"],function() {
Route::any("/login", [
"as" => "user/login",
"uses" => "UserController@loginAction"
]);
});

Route::group(["before"=>"auth"],function() {

Route::any("/profile", [
"as" => "user/profile",
"uses" => "UserController@profileAction"
]);

Route::any("/logout", [
"as" => "/",
"uses" => "UserController@logoutAction"
]);
});[/code]

"before"=>"guest"で認証前。"before"=>"auth"で認証後。

続いて、コントローラの作成を行います。

コントローラはcontrollers/ 以下に格納していきます。

app/controllers/UserController.php

[code]<?php

class UserController extends Controller {

public function loginAction() {
if (Input::server("REQUEST_METHOD") == "POST") {
$validator = Validator::make(Input::all(), [
"name" => "required",
"password" => "required"
]);
if ($validator->passes()) {
$credentials = [
"name" => Input::get("name"),
"password" => Input::get("password")
];
if (Auth::attempt($credentials)) {
return Redirect::route("user/profile");
}
} else {
$data["name"] = Input::get("name");
return Redirect::route("user/login")->withInput($data);
}
}
return View::make("user/login");
}

public function profileAction() {
return View::make("user/profile");
}

public function logoutAction() {
Auth::logout();
return Redirect::to("/login");
}
}
[/code]

完成。

ログインページは同様。

usernameに「user」passwordに「password」を入力し、submitでログインしプロフィールページに行っているかと思いますが、

logoutを行うため、/logoutを叩こうとすると、どうも上手く行かず、

 

config/app.php

'debug' => false, を 'debug' => true

にすることによって、エラーログが表示されますので、変更したところ、

と怒られました。

どうやら、remember_token カラムが必要のようです。

こちらにも記載しているとおり、

http://laravel4.kore1server.com/docs/security

--------------------------------------------

注意:とりかかる前に、usersテーブル(もしくはユーザーを管理するテーブル)に、nullを許し(nullable)、長さ100文字の文字列で、remember_tokenカラムが含まれていることを確認してください。このカラムは、アプリケーションで"Remember me"セッションのトークンを保存しておくために使用されるカラムです。

--------------------------------------------

とのことですので、remember_tokenカラムを作成。

すると、logout処理も行えました。

これらのソースはこちらで確認出来ます。ブランチ:feature/controller)

GitHub : webcyou

https://github.com/webcyou/laravel_members/tree/feature/controller

次回は更に作り込めたら。

  • RSSを登録する

  • follow us in feedly

Graphical FrontEnd Engineer
- Daisuke Takayama

MAD CITY 北九州市で生まれ育つ。20代はバンド活動に明け暮れ、ふと「webデザイナーになりたい。」と思い、デジタルハリウッド福岡校入学。卒業後、数々の賞を受賞、web業界をざわつかせる。
現在、港区六本木で活動中。

WEBデザイナーの、WEBデザイナーによる、WEBデザイナーの為のサイト。「みんなで書こう!」と仲間を募ってみたが、結局書くのは自分だけとなってしまいました。日々のメモを綴っていきます。