質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

Q&A

解決済

1回答

1040閲覧

Laravel ビューコンポーザー用の変数がUndefinedになる

neginattofan

総合スコア66

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

0グッド

0クリップ

投稿2020/03/10 05:15

編集2020/03/13 04:06

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>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mix-peach

2020/03/13 07:04

App\Providers\ComposerServiceProvider@boot の、 View::composers([ UserComposer::class => 'layouts.*' ]); は、どこかのサイトを参考に書かれたコードですか?
neginattofan

2020/03/13 07:24

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' ); に変えても同じエラーが出てしまってました。
mix-peach

2020/03/13 07:35 編集

上記参考サイトの、 11.5 config/app.phpに設定を追加 は、正しく設定済みですか?
neginattofan

2020/03/13 07:40

はい、11.6までは写経を終えて、userがundefinedだと出ました。 11.4から11.6までコピペして、ディクトリの階層も間違っていないか確認しても同じエラーが出てしまったので質問させていただきました。
mix-peach

2020/03/13 08:38 編集

手元のlaravel 5.8.36で同じように実装していったところ、ComposerServiceProviderに書かれた View::composers([ UserComposer::class => 'layouts.*' ]); で、渡している引数が少ないと、エラーになりました・・^^; マイナーバージョンでの差異でない限り、このエラーが neginattofanさんの環境では出ない、 ということは、ComposerServiceProviderは使われていない(読み込まれていない)ということかと思うので、もう一度 config/app.php の providers に正しく設定できているかを確認してみてください。 設定が正しい場合は、キャッシュの可能性もありそうなので、 php artisan clear-compiled とか試してみると何か変わるかもしれません。。。!
neginattofan

2020/03/13 09:04

php artisan config:cacheをみて、以前もphp artisan config:cacheを使ったことがあったのを思い出して、実行すると解決しました。死ぬほど助かりました!
guest

回答1

0

自己解決

php artisan config:cacheで解決しました

投稿2020/03/13 09:09

neginattofan

総合スコア66

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問