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

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

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

1693閲覧

ユーザーの一覧とお気に入りがどちらか一方しか作動しない

tsubasa8770

総合スコア15

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2019/04/22 13:51

前提・実現したいこと

現在LaravelでTwitterクローンの作成を行っています。

ナビバーにUsersという機能を実装中に以下のエラーメッセージが発生しました。
UsersはUserの一覧を表示するためにつけました。

同じように、bootstrapを用いて、ナビバーにドロップダウンで、ユーザの名前を押すと

  • My profile
  • Favorites
  • Logout

が出るようにしました。
イメージ説明

しかし、そのFavorites をつけた途端、Usersを押した時にエラーになってしまいました。

Favoritesをコメントにしてもエラーになリます。
ただ、Favorites の部分を削除すれば、Users は正常に動きます。
そこがとても気になる点です。

FavoritesもUsersもどちらも実行したいので、お助けください。

発生している問題・エラーメッセージ

Undefined variable: user (View: /home/ec2-user/environment/microposts/resources/views/commons/navbar.blade.php) (View: /home/ec2-

該当のソースコード

php

1// navbar.blade.php 2 3<header class="mb-4"> 4 <nav class="navbar navbar-expand-sm navbar-dark bg-dark"> 5 <a class="navbar-brand" href="/">Microposts</a> 6 7 <button type="button" class="navbar-toggler" data-toggle="collapse" data-target="#nav-bar"> 8 <span class="navbar-toggler-icon"></span> 9 </button> 10 11 <div class="collapse navbar-collapse" id="nav-bar"> 12 <ul class="navbar-nav mr-auto"></ul> 13 <ul class="navbar-nav"> 14 @if (Auth::check()) 15 <li class="nav-item">{!! link_to_route('users.index', 'Users', [], ['class' => 'nav-link']) !!}</li> 16 <li class="nav-item dropdown"> 17 <a href="#" class="nav-link dropdown-toggle" data-toggle="dropdown">{{ Auth::user()->name }}</a> 18 <ul class="dropdown-menu dropdown-menu-right"> 19 <li class="dropdown-item">{!! link_to_route('users.show', 'My profile', ['id' => Auth::id()]) !!}</li> 20 <li class="dropdown-item">{!! link_to_route('users.favorites', 'Favorites', ['id' => $user->id]) !!}</li> 21 <li class="dropdown-divider"></li> 22 <li class="dropdown-item">{!! link_to_route('logout.get', 'Logout') !!}</li> 23 </ul> 24 </li> 25 @else 26 <li class="nav-item">{!! link_to_route('signup.get', 'Signup', [], ['class' => 'nav-link']) !!}</li> 27 <li class="nav-item">{!! link_to_route('login', 'Login', [], ['class' => 'nav-link']) !!}</li> 28 @endif 29 </ul> 30 </div> 31 </nav> 32</header>

php

1//UsersController.php@index部分 2 3public function index() 4 { 5 $users = User::orderBy('id', 'desc')->paginate(10); 6 7 return view('users.index', [ 8 'users' => $users, 9 ]); 10 }

php

1//UsersController.php@favorites部分 2 3 4public function favorites($id) 5 { 6 $user = User::find($id); 7 $favorites = $user->favorites()->paginate(10); 8 9 $data = [ 10 'user' => $user, 11 'microposts' => $favorites, 12 ]; 13 14 $data += $this->counts($user); 15 16 return view('users.favorites', $data); 17 }

補足情報(FW/ツールのバージョンなど)

cloud9を使用
Laravelのバージョン:Laravel Framework 5.5.45

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

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

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

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

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

guest

回答1

0

ベストアンサー

エラーになっているのは、

php

1<li class="dropdown-item">{!! link_to_route('users.favorites', 'Favorites', ['id' => $user->id]) !!}</li>

ここの$userですね。favorites()の方は、コントローラーからuserの値を渡していますが、index()の方は渡していないので、エラーになっているようです。

viewのnavbar.blade.phpは、users.indexからも、users.favoritesからも共通パーツとしてinclude等で利用しているのだと思うので、どちらから使われても問題ないようにしなければいけません。

「お気に入り」はログインユーザーのお気に入り登録したものを表示するようなページでしょうか。。。
であれば、My profile同様、認証ユーザーのidが渡せればいいのだと思うので、

php

1<li class="dropdown-item">{!! link_to_route('users.favorites', 'Favorites', ['id' => Auth::id()]) !!}</li> 2

と変更すれば解決しそうに思いますが。。。詳しい仕様は不明なので、あくまでご参考までに。

投稿2019/04/23 01:15

mix-peach

総合スコア1910

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

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

tsubasa8770

2019/04/23 16:38

完璧に作動しました!本当にありがたいです。 共通パーツはどちらから使われても問題のないようにしなければならないことを知りました。ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問