Laravel5.8です。
Laravelでビューコンポーザーでユーザー情報を使えるようにしたいのですが、$userがundefinedになります。
かなり時間を費やしてしまったのですが、解決しませんでした。
ここがおかしいんじゃないの?という箇所があればご指摘お願いします。
よろしくお願いします。
config/app.php
App\Providers\ComposerServiceProvider::class,
App\Http\ViewComposers\UserComposer.php
<?php namespace App\Http\ViewComposers; use Illuminate\Contracts\View\View; use Illuminate\Contracts\Auth\Guard; class UserComposer { protected $auth; public function __construct(Guard $auth) { $this->auth = $auth; } public function compose(View $view) { $view->with('user', $this->auth->user()); } }
App\Providers\ComposerServiceProvider
<?php namespace App\Providers; use Illuminate\Support\ServiceProvider; use App\Http\ViewComposers\UserComposer; use Illuminate\Support\Facades\View; class ComposerServiceProvider extends ServiceProvider { /** * Register services. * * @return void */ public function register() { // } /** * Bootstrap services. * * @return void */ public function boot() { View::composers([ UserComposer::class => 'layouts.*' ]); } }
views\layouts\app.blade.php
<a id="navbarDropdown" class="nav-link dropdown-toggle" href="#" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" v-pre> {{ $user->email }} <span class="caret"></span></a>
App\Providers\ComposerServiceProvider@boot の、
View::composers([
UserComposer::class => 'layouts.*'
]);
は、どこかのサイトを参考に書かれたコードですか?
https://hackmd.io/@pWYQqHa2RdicRqXJoRuDHw/H1F4jPCCr#11-%E3%83%93%E3%83%A5%E3%83%BC%E3%82%B3%E3%83%B3%E3%83%9D%E3%83%BC%E3%82%B6%E3%83%BC%E3%81%A7%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E6%83%85%E5%A0%B1%E5%8F%96%E5%BE%97%E3%82%92%E3%81%BE%E3%81%A8%E3%82%81%E3%82%88%E3%81%86%EF%BC%81
こちらの11.4あたりです。
ただ、そこのコードは
View::composer('layouts.app', UserComposer::class);
や
View::composer(
'layouts.*', 'App\Http\View\ViewComposers\UserComposer'
);
に変えても同じエラーが出てしまってました。
上記参考サイトの、
11.5 config/app.phpに設定を追加
は、正しく設定済みですか?
はい、11.6までは写経を終えて、userがundefinedだと出ました。
11.4から11.6までコピペして、ディクトリの階層も間違っていないか確認しても同じエラーが出てしまったので質問させていただきました。
手元のlaravel 5.8.36で同じように実装していったところ、ComposerServiceProviderに書かれた
View::composers([ UserComposer::class => 'layouts.*' ]);
で、渡している引数が少ないと、エラーになりました・・^^;
マイナーバージョンでの差異でない限り、このエラーが neginattofanさんの環境では出ない、
ということは、ComposerServiceProviderは使われていない(読み込まれていない)ということかと思うので、もう一度 config/app.php の providers に正しく設定できているかを確認してみてください。
設定が正しい場合は、キャッシュの可能性もありそうなので、
php artisan clear-compiled
とか試してみると何か変わるかもしれません。。。!
php artisan config:cacheをみて、以前もphp artisan config:cacheを使ったことがあったのを思い出して、実行すると解決しました。死ぬほど助かりました!
回答1件
あなたの回答
tips
プレビュー