79
73

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Laravel5でカスタムライブラリ使いたい

Last updated at Posted at 2015-05-05

Laravel5でカスタムライブラリを利用する時のメモ。どこに置いて、どう使う?か。
結論から言えば、「こうしろ!」というのは無いみたい。たぶん。

###簡単編

どこでもいいので、置く。そして後はnamespaceを指定し、呼び出し。composerでロードする方法もあるが、とりあえずこれがあれば十分。

例えば、appにMyLibsフォルダを作り、その中にMyClass.phpを置く。

<?php namespace App\MyLibs;

class MyClass{

	public function sayHello(){
		return "Hello!";
	}

}

これを呼び出すには、例えばルートにて、

Route::get('hoge',function(){

	$hello = new App\MyLibs\MyClass;
	return $hello->sayHello();
	
});

とする。もちろんuse App\MyLibs\MyClass;としてもよい。

###ファサードを作る
ある程度の規模なら、ファサード化したほうがLaravelっぽい。

・元クラスの作成
・サービスプロバイダの作成
・サービスプロバイダの登録
・サファードクラスの作成
・利用

という流れになる。

####元クラスの作成

めんどいので、上記のMyClassをそのまま使う。

####サービスプロバイダの作成

ひな形を作る。

php artisan make:provider HelloServiceProvider

ファサードクラスでgetFacadeAccessor()が返す文字列と、クラスをbindする。

<?php namespace App\Providers;

use Illuminate\Support\ServiceProvider;

class HelloServiceProvider extends ServiceProvider {

	/**
	 * Bootstrap the application services.
	 *
	 * @return void
	 */
	public function boot()
	{
		//
	}

	/**
	 * Register the application services.
	 *
	 * @return void
	 */
	public function register()
	{
		//
		$this->app->bind(
			'hello',
			'App\MyLibs\MyClass'
		);
	}

}

これだけ。

####サービスプロバイダの登録

config/app.phpにプロバイダを登録。

'providers'=>[
...
			'App\Providers\HelloServiceProvider',
...
]

####ファサードクラスの生成

特定の場所はないようなので、とりあえずapp直下に作る。生成コマンドは無いようだ。

<?php namespace App;

use Illuminate\Support\Facades\Facade;

class Hello extends Facade
{
	protected static function getFacadeAccessor(){
		return 'hello';
	}
}

####エイリアスの設定

折角なので\Hello::で呼べるようにしたい。config/app.phpのaliasesに追加する。

'aliases'=>[
...
		'Hello'		=> 'App\Hello',
...
]

####利用
例えばルートにて、

Route::get('hoge',function(){

	// $hello = new App\MyLibs\MyClass;
	// return $hello->sayHello();

	return \Hello::sayHello();
});

うーん。めんどい。これにより、ファサードクラスで戻る文字列を変更するか、サービスプロバイダでbindするクラスを変えれば、元コードを変更せずに機能を変えられる・・・。

79
73
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
79
73

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?