大企業営業から未経験ITエンジニアを目指すブログ

アラサー大企業営業から未経験ITエンジニアを目指すブログ。日々学んだことを忘備録的に記します。

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://qiita.com/kd9951/items/f2157607d2f6a9534449

 

※結合の書き方はいろいろある。

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';
   }
 }

 インスタンス生成のあだ名@サービスプロバイダを返す。

 

(6)ファサードエイリアスを作成

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等

https://laraweb.net/knowledge/835/