Laravel:Controllerの同じコードを使いまわしたい

Laravel:Controllerの同じコードを使いまわしたい

Laravel:Controllerの同じコードを使いまわしたい

前回の記事でViewの使いまわしについて記載しました。
今回はコントローラーの使いまわしです。
Viewと同じく、PHPベタ打ちではrequire_onceで読み込ませていましたがフレームワークでは使われないようです。

例は前回記事と同様にボタンコントロールとします。

やりたい動作

  1. roleのレベルに合わせてボタンの表示をコントロール
  2. role値と動作レベルの相関テーブルを作り、Controller名毎にボタンを表示させるrole値が可変する

つまりは、変更/追加/削除をroleごとに付けたり消したりしたい。でも同じコードを張り付けてこれを実現したい。と言う事です。

キーワードは共通関数

こうしたい!と思っても言葉を知らないと調べる事が出来ません。

私のやりたいことは【共通関数】や【汎用関数】と呼ばれるそうです。
このワードに【ライブラリ】を追加すると求めていた情報がばっちり手に入ります。

今回参考にさせて頂いたサイト様はこちら

下準備の手順

前回記事のViewとは異なり下準備が必須です。

  1. Composer.jsonに登録する
  2. composer dump-autoloadを実行
  3. config/app.phpにエイリアスとして追加
  4. 利用したいコントローラでuseする

これをやってあげないとエラーが出てくるので要注意です。

Composer.jsonに登録する

composer.jsonはProjectフォルダの直下にあります。
.envなどと同じ並びです。

今回はappにLibraryフォルダを作成し、この中に共通関数を格納していこうと思っています。
その為、composer.json のautoloadに下記コードを追加します。

composer dump-autoloadを実行

次に、composerに行った変更を認識させます。

これはSSHで下のコードを実行すればOKです。

config/app.phpにエイリアスとして追加

Project名/config/app.php のaliasesに共通関数の登録を行います。

具体的には下記内容を記載します。

今回私は参考にさせて頂いたサイトにならい、class名をBaseClasとしました。
当然自由に設定してOKですが、共通関数と同じクラス名である必要があります。

利用したいコントローラでuseする

あとはコードを書いて、利用するコントローラーで use すればOK。

実際に書いたコードを記載します。

■共通関数

■コントローラー

まとめ

これで毎回@can や@if で場合分けする必要がなくなりました。

いやぁ~楽になった。