Laravelでクラスをnewする
今回はLaravelでのクラスのnewの仕方です。
正確には、Laravelでの他ファイルで作成したClassの読み込み方です。
通常phpではrequireを利用しますが、たぶんLaravelではそれは美しくないと思われている(と僕が勝手に思っている)。
どうやらautoloadという仕組みがあるらしく、それによってrequireを宣言せずにクラスを自動で使えるようにしてくれるみたいです。
composer.jsonに追記する
今回私は/app/models/viewmodelsというフォルダを新規に作成して、その中に新しいクラスを作成しました。
そしてこのクラスをコントローラでnewしたいのですが、上手くできません。
そこでautoloadでのload対象設定を記述してあるcomposer.jsonを修正します。
今回は以下のように修正します。
"autoload": { "classmap": [ "app/commands", "app/controllers", "app/models", "app/models/viewmodels", "app/database/migrations", "app/database/seeds", "app/tests/TestCase.php" ] }
app/models/viewmodelsが追加されています。
またjsonを更新したら以下のコマンドを/app直下で実行しましょう。
/app直下というよりは、composer.jsonがある場所ですね。
$ composer dump-autoload
これでautoloadが更新され、viewmodels内のクラスも利用することができるようになりました。
ちなみにこのとき/app/vendor/composer/autoload_classmap.phpが更新されています。
global.phpの編集
もし上記だけで動かなかったら、こちらも修正してみてください。
/app/start/global.php
ClassLoader::addDirectories(array( app_path().'/commands', app_path().'/controllers', app_path().'/models', app_path().'/models/viewmodels', app_path().'/database/seeds', ));
これでできるかと思います。
基本的にはこっちはlaravelそのもので設定する方法になります。
composerではautoloadというモジュールを利用しているという感じでしょう。