前提・実現したいこと
Laravel初学者です。
Laravel5.5 でSNS(Twitter)のクローンサイトを作っています。
ログインユーザーのフォロー数・フォロワー数を全ページ共通レイアウト(親ビューファイル)のサイドバーに表示したいのですが
Controllerで親ビューファイルに関数を渡した場合
ルーティングはどのように記述すればよいのでしょうか?
該当のソースコード
usersテーブル
php
1public function up() 2 { 3 Schema::create('users', function (Blueprint $table) { 4 $table->increments('id')->autoIncrement(); 5 $table->string('username',255); 6 $table->string('mail',255); 7 $table->string('password',255); 8 $table->string('remember_token',255)->nullable(); 9 $table->string('bio',400)->nullable(); 10 $table->string('images',255)->default('userIcon.png')->nullable(); 11 $table->timestamp('created_at')->useCurrent(); 12 $table->timestamp('updated_at')->default(DB::raw('current_timestamp on update current_timestamp')); 13 }); 14 }
postsテーブル
public function up() { Schema::create('posts', function (Blueprint $table) { $table->increments('id')->autoIncrement(); $table->unsignedInteger('user_id'); $table->string('post',200); $table->timestamp('created_at')->useCurrent(); $table->timestamp('updated_at')->default(DB::raw('current_timestamp on update current_timestamp')); $table->foreign('user_id')//外部キー ->references('id')//主キー ->on('users')//主キーのあるテーブル ->onDelete('cascade') ->onUpdate('cascade'); }); }
followsテーブル
public function up() { Schema::create('follows', function (Blueprint $table) { $table->increments('id')->autoIncrement(); $table->timestamp('created_at')->useCurrent(); $table->timestamp('updated_at')->default(DB::raw('current_timestamp on update current_timestamp')); $table->unsignedInteger('user_id'); $table->unsignedInteger('follow_id'); //外部キー $table->foreign('user_id') ->references('id') ->on('users') ->onDelete('cascade') ->onUpdate('cascade'); $table->foreign('follow_id') ->references('id') ->on('users') ->onDelete('cascade') ->onUpdate('cascade'); // 組み合わせのダブりを禁止(二重フォローにならないように) $table->unique(['user_id', 'follow_id']); }); }
login.blade.php
(ログイン中の全てのページで表示させる親ビューファイル)
php
1<!DOCTYPE html> 2<html> 3<head> 4<meta charset="utf-8" /> 5 <!--IEブラウザ対策--> 6 <meta http-equiv="X-UA-Compatible" content="IE=edge" /> 7 <meta name="description" content="ページの内容を表す文章" /> 8 <title>dawnSNS</title> 9 <link rel="stylesheet" href="css/style.css" type="text/css"> 10 <link rel="stylesheet" href="css/reset.css" type="text/css"> 11</head> 12<body> 13 <header class="header"> 14 <div id = "head"> 15 <h1><a href="/top"><img src="images/main_logo.png" width="100px" height="auto"></a></h1> 16 </div> 17 <div id="menu"> 18 <div id="menuItem"> 19 <p class="js_menu">{{ Auth::user()->username }}さん<span></span><img src="images/dawn.png"></p> 20 </div> 21 <ul class="subMenu"> 22 <li class="submenu_item"><a href="/top">ホーム</a></li> 23 <li class="submenu_item"><a href="/profile">プロフィール</a></li> 24 <li class="submenu_item"><a href="/logout">ログアウト</a></li> 25 </ul> 26 </div> 27 </header> 28 29 30 31 <div id="row"> 32 <div id="container"> 33 @yield('content') 34 </div > 35 <div id="side-bar"> 36 <div id="confirm"> 37 <p>{{ Auth::user()->username }}さんの</p> 38 <div> 39 <p>フォロー数</p> 40 <p>{{ $count_followings }}名</p> //←これを表示させたい 41 42 </div> 43 <p class="btn"><a href="">フォローリスト</a></p> 44 <div> 45 <p>フォロワー数</p> 46 <p>{{ $count_followings }}名</p> 47 </div> 48 <p class="btn"><a href="">フォロワーリスト</a></p> 49 </div> 50 <p class="btn"><a href="/search">ユーザー検索</a></p> 51 </div> 52 </div>
UsersController.php
php
1public function countFollowings() 2 { 3 $userId = Auth::user()->id; 4 $count_followings = \DB::connection('hoge') 5 ->table('follows') 6 ->where('user_id', '=', $userId) 7 ->count(); 8 9 return view('layouts.login', [ 10 'count_followings' => $count_followings 11 ]);
web.php
Route::get('/top', 'UsersController@countFollowings');
Route::get('/top', ...);
にすると、いままで表示できていた子ビューファイルが表示できなくなりました。
調べてもこのような問題の解決方法がのっている記事をみつけることができませんでした。
どうかご教授おねがいいたします。
補足
子ビューファイルを掲載いたします。(search.blade.php)
これは/topではなく、アカウントを作ったユーザーを検索する画面ですが。
top以外にも全て共通で表示させたいのです。
@extends('layouts.login') @section('content') <div id="container"> <div class="seach"> {!!Form::input( 'text', 'newPost', null, ['required', 'class' => 'form-control', 'placeholder' => 'ユーザー名'] )!!} </div> <button type="submit" class="" name=""> <img src="images/search.png" alt="検索ボタン" width="25px" height="25px"> </button> <div class="userIndex"> <table> @foreach ($all_users as $user) <tr> <td> <img class="image-circle" src="{{ asset('images/' . $user->images ) }}" alt=""> </td> <td>{{ $user->username }}</td> <td> @include('follows.follow_button', ['user'=>$user]) </td> </tr> @endforeach </table> </div> </div> @endsection
質問する上でどの変数かを明示したかっただけですので
「//←これを表示させたい」については実際のコードには書いてません。
知識が浅く、見当違いなことをお尋ねしてしまっているかもしれません。
ご容赦ください。
回答1件
あなたの回答
tips
プレビュー