Laravelのコントローラからクラスを抜き出したい!から始まったLaravelとPHPのいろいろ②
⑰フィールドとは?
DBで言うエクセルのセルのこと。
⑱サービスコンテナとは?
インスタンス化の方法を登録する仕組み。
https://coinbaby8.com/laravel-php-dekirukoto.html
クラス(サービス)のインスタンス化を管理します。
Illuminate\Container\Containerクラス を継承した
Illuminate\Foundation\Applicationクラス によって実装されています。
インジェクトするクラスを簡単に変更できるので、テストでモックに差し替えたいときなどに便利です。
https://www.wakuwakubank.com/posts/456-laravel-container-provider/
※サービスプロバイダ・・・インスタンス化の方法を登録する場所
使い方;newしなくても使えるグローバル関数的なものができる(?)
(=ヘルパー関数を作ってるだけ?)
参考URL: https://laraweb.net/practice/1960/
(1)クラスを作る
多分どこでも良いけど(?)、使いたいクラスを作る。
ヘルパー関数的にapp/Helpersディレクトリを作成、その下にXxxHelperクラスを持つXxxHelper.php作るのがポピュラーっぽい。
(2)サービスプロバイダを作る
※デフォルトでできている\App\Providers\AppServiceProviderに結合を登録する場合は不要。
下記の方法で作れる。
php artisan make:provider XxxServiceProvider
→app/providers に XxxServiceProvider.phpが作成される。
bootメソッドとregisterメソッドができている。
(3)サービスコンテナへの登録@サービスプロバイダにて
use Illuminate\Foundation\Application; //サービスコンテナの実態のクラスの場所
use App\Helpers\XxxHelper; //(1)のクラスの場所
public function register()
{
$this->app->bind('Xxx', function(Application $app){
return new XxxHelper();
});
}
boot と register の違いは実行されるタイミングで、先に register が実行されて、すべての ServiceProvider が register し終わった後に、boot が実行されます。なので、他の Service のインスタンスを使いたい場合は boot に、そうじゃない独立した初期化は register に書きます。
※結合の書き方はいろいろある。
https://readouble.com/laravel/5.5/ja/container.html
(4)Laravel起動時にサービスプロバイダが呼び出されるようにする
※(2)でサービスプロバイダを作っていない場合は不要。
サービスプロバイダを config/app.php に登録。
'providers' => [
:
App\Providers\XxxServiceProvider::class, // (2)で作ったサービスプロバイダを登録
],
(5)ファサードを作成
app/Facades ディレクトリを作成。
XxxFacade.phpファイルを作成の上、下記をコーディング。
namespace App\Facades;
use Illuminate\Support\Facades\Facade;
class TestEchoFacade extends Facade
{
protected static function getFacadeAccessor()
{
return 'Xxx';
}
}
インスタンス生成のあだ名@サービスプロバイダを返す。
config/app.php
'aliases' => [
'Xxx' => App\Facades\XxxFacade::class
(7)完了!
\Xxx::Xxx();
これでXxxクラスの変数を呼び出せる。
⑲ヘルパークラスとは?
・アプリケーション内のどこからでも使える関数をヘルパー関数と言う。(?)
Laravelでは様々なヘルパー関数が用意されている。
https://readouble.com/laravel/5.5/ja/helpers.html
・一方、ヘルパー関数を自作もできる。
自作するときは、app/Helpersというディレクトリを作成してクラスを記述するのがポピュラー。
https://qiita.com/sasakure-kei@github/items/ebdbfebd5600161a553f
https://s8a.jp/laravel-custom-helper
⑳アセットとは?
画像・CSS・JS等