WinRoadのLaravel4初心者講座

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

Winroad徒然草の管理人がお届けします
IoCコンテナの基本的な使い方

IoCコンテナの基本的な使い方

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

IoCコンテナが依存性を解決する方法は、無名関数による解決と自動的な解決がありますが、最初に基本的な無名関数に関する解決方法をご紹介します。

まず、IoCコンテナの基本的な使い方を説明するに当たり、実際に簡単なクラスを作成してみたいと思います。

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);
 }
 }
  • WinRoad徒然草のサイトでもご紹介した西暦の日付を元号に変換するプログラムです。※実際に生年月日の登録などで使用しています。
  • 引数で受け取った日付を元号に変換します。
  • modelsフォルダに作成してもいいのですが、基本的にmodelsフォルダ内は、データベーステーブルに関するクラスを作成しますので、commandsフォルダ内に作成しました。

タイプをコンテナに結合

上記TransクラスをIoCコンテナで結合するには、App::bindメソッドを使用します。

app/filters.php

App::before(function($request)
 {
 App::bind('trans',function(){
 return new Trans;
 });
 });
  • IoCコンテナの登録場所に関しては、ルーターが呼び出される前なら何処でも構わないはずですので、今回は、一番簡単な、filters.phpのApp::beforeメソッド内に記述しました。

タイプでコンテナを解決

IoCコンテナで結合したタイプを解決するには、App::makeメソッドを使用します。

app/routes.php

Route::get('/',function(){
 $trans=App::make('trans');
 return $trans->gengo('1920/5/5');
 });
  • http://localhost/laravel/publicと入力して、実際に「大正9年5月5日」と表示されたらOKです。

bind以外の結合

App::bind以外に、App::singltonや、App:instanceによるIoCコンテナの結合方法もあります。

App::singltonは、同じインスタンスしか返さない場合に使用します。

App::instanceは、既にインスタンス化しているオブジェクトをコンテナに結合する場合に使用します。

« »

コメントを残す

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