最近はLaravelはご無沙汰で、業務では毎日Django(Python)を書いています。
それで昨日久々にLaravel触っていたのですが、「あれ?自分で作成したクラス・メソッドってどうやって呼び出すんだっけ・・・?」ってなってしまいまいした。
そこで、今回は復習も兼ねて「独自クラスを作成して、それをコントローラーから呼び出す」方法を備忘として書いておきます。
・「app/Libs」配下に「Commonクラス」を作成
・作成した「Commonクラス」を「Userコントローラー」から呼び出す
という例で説明します。
composer.jsonを使用したやり方やFacadeを使用したやり方など、実は何種類かあるのですが、今回は最も簡単な方法をご紹介します。
目次
全体の流れ
流れとしては下記の通りとなります。
・オリジナルクラス(Common.php)を作成する
・設定ファイル(config/app.php)のaliasにオリジナルクラスを登録する
・コントローラー(UserContoroller.php)から呼び出す
・autoloadを実行する
表題ではコントローラーから呼び出す、と書いてありますが、実際にはLaraveプロジェクト内からならどこからでも呼べるはずです。
オリジナルクラスを置くディレクトリを作成
オリジナルクラスを置く場所として、「app/Libs」ディレクトリを使用します。
ぶっちゃけ、名前はLibsじゃなくてもいいいですし、「app/Libs/Common」のようにより深い階層に置いても大丈夫です。
Laravelのデフォルトで用意されているディレクトリとかぶらなければOKです。
ディレクトリ作成は特にartisanコマンドなどがあるわけではないので、任意の場所に手動で作成します。
Libsディレクトリの中に、オリジナルクラスを作成
次に、オリジナルクラスとして、Commonクラスを作成します。
<?php namespace App\Libs; class Common { public function say_hallo () { return 'Hello, World!!'; } public function say_goodbye () { return 'Good bye.'; } } ?>
LaravelというよりかはPHPの知識ですが、コントローラーから呼び出しができるようにするためにはnamespace(名前空間)を指定しておく必要があります。
aliasに登録
ここはLaravelのお作法に従った登録方法です。
‘aliases’と書かれた場所を探し、「’Common’ => app\Libs\Common::class,」を追記します。
<?php return [ 'aliases' => [ ・・・ 'Config' => Illuminate\Support\Facades\Config::class, 'Cookie' => Illuminate\Support\Facades\Cookie::class, 'Crypt' => Illuminate\Support\Facades\Crypt::class, 'Common' => app\Libs\Common::class, 'DB' => Illuminate\Support\Facades\DB::class, 'Eloquent' => Illuminate\Database\Eloquent\Model::class, 'Event' => Illuminate\Support\Facades\Event::class, ・・・ ] ・・・ ] ?>
上記の例では、Laravelではalias内がデフォルトでアルファベット順に並んでいるため、なんとなくCの行に追加しています。
実態はalias内ならどこでも動作するので、自分で追加したクラスをまとめて記載したいほうが分かりやすいというのであれば、aliasの最終行にまとめて記載しても問題ありません。
autoroadする
Laravelの場合、これをやらないと新たに作成したクラスが呼べるようになりません。
下記のコマンドを叩くと、クラス情報が再読み込みされ、上記で作成したコントローラーから呼び出しができるようになります。
$ composer dump-autoload
コントローラーから呼び出す
最後に、オリジナルクラスおよびメソッドを、コントローラーから呼び出します。
<?php use App\Libs\Common; class UserController { public function print_welcome_message () { $common = new Common(); $common->say_hello(); } } ?>
Controllerの一番最初に、use句で、オリジナルクラスのnamespace名+オリジナルクラス名を指定します。
・namespace名:App\Libs
・クラス名:Common
※use句でクラスのフルパス(App\Libs\Common)を指定しているため、インスタンス化するときは、フルパスは必要ありません。
以上で、自分で作成したクラス・メソッドの呼び出しができているはずです。
まとめ
とりあえず呼び出すだけなら、こんな感じで簡単にできます。
Laravelのお作法によりちゃんと則るならDispatcherやFacadeなどを使うほうがよりベターなんだろうなと思いつつも、とりあえずはこういう方法もあるよ、ということで!
コメント