1. Facadeファイル群を作ります。
【階層】
laravel/
└app/
└MyFacades/
└Hoge/
└Hoge.php
Facades/
└Hoge.php
app/MyFacades/Hoge/Hoge.php
namespace Hoge;
class Hoge {
public static function fuga() {
}
}
app/MyFacades/Hoge/Facades/Hoge.php
namespace Hoge\Facades;
class HogeFacade extends Facade {
protected static function getFacadeAccessor() {
return 'hoge';
}
}
※関数は app/MyFacades/Hoge/Hoge.php
のクラス内に static で書いていきます。
2. 独自 Facade 追加用のサービスプロバイダーを作ります。
$ php artisan make:provider MyFacadeServiceProvider
3. ファサードのネームスペースを登録する
public function boot()
はさわらずそのまま。
public function register()
に追記します。
laravel/app/providers/MyFacadeServiceProvider.php
public function register() {
$this->app->bind('hoge', function($app) {
return new \Hoge\HogeFacade;
}
);
}
4. laravel/composer.json の autoload->files に追加
laravel/composer.json
{
"autoload": {
"files": [
"app/MyFacades/Hoge/Hoge.php"
]
},
...
5. composer.json を適用
$ composer dump-autoload
6. laravel/config/app.php に provider とエイリアス(名前空間)を登録
config/app.php
return [
...
'providers' => [
...
App\Providers\MyFacadeServiceProvider::class,
...
],
'aliases' => [
...
'Func' => Hoge\Hoge::class,
...
],
...
7. サーバーのパーミッションを変更しておく
$ chmod 777 bootstrap/cache/services.php
以上で、\Func::fuga();
でどこからでも関数が使えるようになります!