[Laravel] Facade作成の流れ
今回の題
Facadeの作成方法を復習がてらメモとして書き残します。
バージョン
Laravel6.8
大まかな流れ
- クラスの作成
- サービスプロバイダーを通し、クラスをサービスコンテナへ登録
- Facadeを作成し呼び出す
クラスの作成
クラスを配置するディレクトリの作成
$ mkdir app/Services
app/Services/
以下にGreetingService.php
を作成し、クラスと適当なメソッドを定義。
<?php
namespace App\Services;
class GreetingService {
public function hello()
{
return 'hello';
}
}
サービスプロバイダーを通し、クラスをサービスコンテナへ登録
自前のサービスプロバイダーを作成
$ php artisan make:provider GreetingServiceProvider
上のコマンドで、app/Providers/
以下に作成されたGreetingServiceProvider.php
を以下のように編集。
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class GreetingServiceProvider extends ServiceProvider
{
/**
* Register services.
*
* @return void
*/
public function register()
{
$this->app->bind('greeting', 'App\Services\GreetingService'); // 追記
}
/**
* Bootstrap services.
*
* @return void
*/
public function boot()
{
//
}
}
サービスプロバイダーを登録
config\app.php
を開き、以下のように追記。
'providers' => [
// 略
/*
* 自作のサービスプロバイダー
*/
App\Providers\GreetingServiceProvider::class, // 追記
],
サービコンテナに登録されたか確認する
サービコンテナの実体は、Illuminate\Foundation\Applicationクラス
。
Illuminate\Foundation\Applicationクラスは、ヘルパ関数app()
で呼び出せるので以下のようにして中身を確認。
dd(app());
さらに色々出てきた中に、先ほど登録したgreeting
があればOK。
Facadeを作成する
Facadeを配置するディレクトリを作成。
$ mkdir app/Facades
app\Facades
以下にGreeting.php
を作成し以下のように編集。
<?php
namespace App\Facades;
use Illuminate\Support\Facades\Facade;
class Greeting extends Facade
{
protected static function getFacadeAccessor()
{
return 'greeting'; // サービスコンテナに登録した名前。
}
}
Facadeのエイリアスを登録
config\app.php
を開き、以下のように追記。
'aliases' => [
// 略
/*
* 自作のFacade
*/
'Greeting' => App\Facades\Greeting::class, // 追記
],
Facadeを呼び出す
Greeting::hello(); // 結果 hello
コントローラーなどのnamespaceの中から使おうとする場合は
グローバルプレフィックス演算子\
をつけてあげるか、
(namespace中からグローバルなクラスなどを使おうとする場合に必要。 参考)
\Greeting::hello(); // 結果 hello
もしくは、
use Greeting;
Greeting::hello(); // 結果 hello
でOK。
Author And Source
この問題について([Laravel] Facade作成の流れ), 我々は、より多くの情報をここで見つけました https://qiita.com/gentuki/items/2c6308c3ec2d1ce6ae37著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .