BookmarkLINELaravelのFacade(ファサード)を使ってオリジナルのコンポーネントを作成します。開発環境については以下の通りです。5.xLaravelのバージョンについては5.6/5.5/5.4/5.3にて動作確認済みです。Laravelのルートディレクトリを「laravel/」とします。Facade(ファサード)Laravelの機能の一つであるFacade(ファサード)は、その仕組みを利用する事によりシンプルな処理群の集合を定義する事のできるものです。CakePHPを使っている人なら、コンポーネントと言うと伝わりやすいかもしれません。ファサードを定義することによって、ある一定の機能・処理をまとめておき、シンプルな作法でコールする事が出来るようになります。PHPフレームワークには「ヘルパー関数」というものがあり、自作するという観点で見るとこれも考え方はファサードと同じです。全ての処理をコントローラに書かないようにしたい。Laravelに機能があるものについてはそれらを駆使してコントローラをシンプル且つメンテナンスしやすいように保っていく。そこに適当な機能が無かったら...。」に行き着くと思います。ファサードもそうやって使っていくようなものだと考えると、わかりやすいかもしれません。ゴール設定せっかくなので、ゴールが見えやすいように作るもののテーマを決めます。今回ですが、「hoge」というテキストを出力するHogeファサードを作成していきます。Hogeファサードを使う事によって、hogeを簡単に出力できる。そんな夢のようなコンポーネントになります。サービスプロパイダの作成まずはサービスプロパイダを作成します。これはartisanコマンドで生成できます。Laravelルートディレクトリへ移動し、以下のコマンドを叩きます。HogeServiceProvider.php生成したサービスプロパイダクラスには、既にboot()メソッドとregister()メソッドが定義されてあり、互いに中身は空っぽの状態です。そのうちのregister()アクションにて、今回登録するhogeクラスを以下のようにして記述し、サービスコンテナへ登録します。}}bind()メソッドの第一引数にはいわゆる識別子としての名前を渡し、第二引数には、対象となる独自処理クラスであるHogeクラスを渡します。独自処理クラスの設置場所については、Laravelでは厳格な決まりはありません。好きなところに置けます。今回はCakePHPチックにControllerと並ぶようにして配置することにしてApp\Http\Components配下にしようと思うので、パスはこんな感じになりました。次にFacadesクラスを作成します。配下にFacadesディレクトリを作成し、その中にHoge.phpを作成します。Hoge.phpそして、コンポーネントの登録名を取得する為のアクセサーgetFacadeAccessor()メソッドを以下のように定義します。}}異常にシンプルなクラスだと感じるかもしれませんが、サービスコンテナの結合名を返すことがこのクラスの役割なので、これでOKです。独自処理クラス、いわゆる自作コンポーネントを作成します。ディレクトリを作成し、その中にHoge.phpを作成します。Hoge.php作成したHoge.phpを以下のように実装します。}}今回はシンプルに「HOGEHOGE」の文字列を返すメソッドを実装しましたが、必要なものをuseしてデータベースと連携しても良いし、好きなように実装できます。最後に、サービスプロパイダとクラスのエイリアスを登録します。],];追加分以外のコードは全て省略しています。これで登録含め、自作コンポーネントが完成しました。一通りの実装が完了したので、コントローラの中で使ってみます。}}自作コンポーネントであるHogeクラスをuseし、処理の中で「クラス名+スコープ定義演算子+メソッド名」の形でHogeクラスのメソッドを呼ぶことができます。適当にルーティングを書いて、ブラウザからアクセスしてみます。正常にコンポーネントの呼び出しが行われ、HOGEHOGEが出力されました。まとめ以上で作業は完了です。今回はファサードの入門的な一連の流れを行いましたが、クラスの仕様によってはもっと詳細な設定なども出来てとても便利なので、是非試してみてください。イベントレポート2019.12.8MySQL8.0.16で追加されたCHECK制約を試してみる。2019.12.2LaravelのContracts(契約)とは。SESを使ってAPIメール送信を行う(Mailableクラス&SimpleEmailService)2019.12.3MySQL8.0.16で追加されたCHECK制約を試してみる。RitoLaboこのサイトについて利用規約プライバシーポリシ。