WinRoadのLaravel4初心者講座

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

Winroad徒然草の管理人がお届けします
ファサードの作成

ファサードの作成

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

インスタンスメソッドを簡単にスタティックメソッドにしてくれる便利なファサードですが、どのようにして作成するのでしょうか。実際に作成しながら、見てみましょう。

IoCコンテナで結合

まず、App::bindメソッドを利用してIoCコンテナによる結合を行います。例として、IoCコンテナで使用したTransクラスを使います。繰り返しの表示になりますが、下記に記述しておきます。

app/commands/Trans.php

<?php
 class Trans{
 public function gengo($date){
 //日付を'/'で区切って変数に変換
 if($date && list($y,$m,$d)=explode('/',$date)){
 if($date >= "1989/01/08"){
 $gengo="平成";
 $y=$y-1988;
 }
 elseif($date >= "1926/12/25"){
 $gengo='昭和';
 $y=$y-1925;
 }
 elseif($date >= "1912/07/30"){
 $gengo='大正';
 $y=$y-1911;
 }
 elseif($date >= "1868/01/25"){
 $gengo='明治';
 $y=$y-1867;
 }
 else{
 $gengo='西暦';
 }
 }
 return sprintf("%s%d年%d月%d日",$gengo,$y,$m,$d);
 }
 }

つぎに、サービスプロバイダーを生成します。

vendor/laravel/framework/src/Illuminate/Trans/TransServiceProvider.php

<?php namespace Illuminate\Trans;
use Illuminate\Support\ServiceProvider;
 class TransServiceProvider extends ServiceProvider{
 public function register(){
 $this->app->bind('trans',function(){
 return new \Trans;
 });
 }
 }

そして、生成したサービスプロバイダーをproviders配列に追加します。109行目あたりに追加します。

app/config/app.php

'Illuminate\Trans\TransServiceProvider',

ここまではIoCコンテナの復習です。IoCコンテナの設定が終了したら、いよいよファサードクラスの作成です。

ファサードクラスの作成

ファサードクラスの登録場所も迷うところですが、Laravelでは、Illuminata\Support\Facadesフォルダ内にまとめていますので、そこに、登録するか、サービスプロバイダーを作成したTransフォルダあたりがいいでしょう。

それでは、Facadesフォルダ内に作成してみます。

vendor/laravel/framework/src/Illuminate/Support/Facades/Trans.php

<?php namespace Illuminate\Support\Facades;
 class Trans extends Facade {
 protected static function getFacadeAccessor() {
 return 'trans';
 }
 }

ファサードエイリアスの設定

そして、このTransクラスのgengoメソッドをConvert::gengoメソッドとして使用できるようにファサードエイリアスをconfig/app.phpに設定してみます(182行目あたりに下記を追加します)。

app/config/app.php

'Convert' => 'Illuminate\Support\Facades\Trans',

それでは、Convert::gengoメソッドが使用できるのか、試してみましょう。ルーターを下記のように修正します。

app/routes.php

Route::get('/',function(){
 return Convert::gengo('2014/5/5');
 });

無事、元号日付が表示されました。

« »

コメントを残す

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