前提・実現したいこと
ログインしないとほとんどの画面が動作しないサイトの開発を行っています。そのサイトのコードで、Laravelに直接依存していないビジネスロジッククラスに、うまいことAuth::user()の情報を自動で注入したいと思っています。
どんな方法があるかご教示ください。
前提
- ビジネスロジックの中はLaravelから切り離したいのでAuth::user()と書きたくない。
- Laravel側から登録しにくるサービスコンテナは使ってもいいと思っている。
ゴール
class SomePlainOldPhpLogic { private $user; }
このロジッククラスのインスタンスが呼ばれると常に$userにAuth::user()が入っていて欲しいです。
試したこと
コンストラクタインジェクション
- 呼び元がコントローラなのでそちらのコンストラクタを利用しようとしました。タイプヒントでビジネスロジックをインジェクションしてから、後追いで情報を追加($logic->setUser( Auth::user() )しようとしました。 - しかしそもそもコンストラクタ内ではAuth::user()が呼べませんでした。 - 上の対策にmiddlewareを使う方法というのも試しましたが、事前にAuth::login()で認証情報を仕込んだテストケースから動かすと情報が入らないという動きをしたので、採用できませんでした。
auth::user()と紐付いたサービスコンテナとしてサービスプロバイダに登録
- registerのときはAuth::user()が呼べませんでした。
- bootのときは呼べそうですが、どう呼んで紐付ければいいのかわかりません。(ここが解決すればなんとかなる?)
ちなみに今は
ビジネスロジックのpublicなメソッドに毎回 Auth::user()を渡しています。ダサいです。
せめて$logic->setUser( Auth::user() )を自動で呼ぶことはできないかな…
補足情報(FW/ツールのバージョンなど)
Laravel 5.4 です。古くてすみません。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/04/03 18:44 編集
2019/04/04 11:38
2019/04/04 18:10
2019/04/04 18:20 編集
2019/04/04 18:21
2019/04/05 07:20