MaReee69
@MaReee69

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

ミドルウェアを機能させたい

解決したいこと

ミドルウェアをうまく機能させたい
例)
初心者です。laravel,php,html,cssを使用しECサイトを作成する練習をしています。
だいぶ中身が足りないとは思いますが必要なコードがございましたら言ってください。

発生している問題・エラー

@if(Auth::check())→実際に発生している例の一部。

例)

以下のようにhome.blade.phpにbootstrapなのかミドルウェアなのかうまく機能していないです。そもそもこのコードが間違っているのでしょうか

image.png

該当するソースコード

Route::group(['middleware' => 'auth'],function(){
    Route::get('/home', [DisplayController::class,'home'])->name('home');
});

home.blade.php

<!DOCTYPE html>
<body>
    <div id="app">
    <!doctype html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <!-- ブートストラップ -->
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">
    <!-- CSRF Token -->
    <meta name="csrf-token" content="{{ csrf_token() }}">

    <title>{{ config('app.name', 'ECサイト') }}</title>

    <!-- Scripts -->
    <script src="{{ asset('js/app.js') }}" defer></script>

    <!-- Fonts -->
    <link rel="dns-prefetch" href="//fonts.gstatic.com">
    <link href=https://mdbootstrap.com/docs/standard/ rel="stylesheet">

    <!-- Styles -->
    <link href="{{ asset('css/app.css') }}" rel="stylesheet">
    <!-- @yield('stylesheet') -->
    
</head>
<body>
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.bundle.min.js" integrity="sha384-MrcW6ZMFYlzcLA8Nl+NtUVF0sA7MsXsP1UyJoMp4YLEuNSfAP+JcXn/tWtIaxVXM" crossorigin="anonymous"></script>

    <div id="app">
        <nav class="navbar navbar-expand-md navbar-light bg-white shadow-sm">
            <div class="container">
                <a class="navbar-brand" href="{{ url('/') }}">
                    ECサイト
                </a>
            </div>
        
            <div class = "my-navbar-control">
                @if(Auth::check())
                    <!-- <spen class = "my-navbar-item">{{ Auth::user()->name }}</spen> -->
                    /
                    <a href = "#" id="logout" class ="my-navbar-item">ログアウト</a>
                    <form id = "logout-form" action = "{{ route('logout') }}" method = "POST" style = "display: none;">
                        <!-- @csrf -->
                    </form>
                    <script>
                        document.getElementById('logout').addEventListener('click',function(event){
                        event.preventDefault();
                        document.getElementById('logout-form').submit();
                        });
                    </script>
                @endif
                <!-- @else -->
                    <a class = "my-navbar-item" href = "{{ route('login') }}">ログイン</a>
                    /
                    <a class = "my-navbar-item" href = "{{ route('register') }}">会員登録</a>
                <!-- @endif -->
            </div>
        </nav>
        <!-- @yield('content') -->
        <!-- 1行目からここまでが外部化できていてsection('content')で呼び出せるようになっている -->
    </div>
</body>
</html>
        <main class="py-4 d-flex flex-column vh-100">
            <div class="row justify-content-around">
                <div class="col-md-4">
                    <div class="card">
                        <div class="card-header">
                            
                        </div>
                        <div class="card-body">
                            <div  class="d-flex justify-content-around ">
                                <form method="POST" action="{{  }}" class="">
                                    <a href = "{{ route('search.date') }}">
                                        <button type = 'button' class = 'btn btn-primary'style="width: 10vh"> 検索 </button>
                                    </a>
                                    <a href = "{{ route('search.date') }}">
                                        <button type = 'button' class = 'btn btn-primary'style="width: 10vh"> 金額 </button>
                                    </a>
                                <!-- @csrf -->
                                
                                </form>
                                    
                            </div>
                            <div  class="d-flex justify-content-around ">
                                <div>商品一覧</div>
                            </div>

                            <div class="product">
                                <img src="product1.jpg" alt="商品1">
                                <h2>商品名1</h2>
                                <p>¥1000</p>
                            </div>
                            <div class="product">
                                <img src="product1.jpg" alt="商品1">
                                <h2>商品名2</h2>
                                <p>¥1000</p>
                            </div><div class="product">
                                <img src="product1.jpg" alt="商品1">
                                <h2>商品名3</h2>
                                <p>¥1000</p>
                            </div>
                            <div class="product">
                                <img src="product1.jpg" alt="商品1">
                                <h2>商品名4</h2>
                                <p>¥1000</p>
                            </div>
                        </div>

                    </div>
                    
                </div>
                
            </div>
            
        </main>

        <!-- <!-- <main class="py-4"> -->
            <div class="">
                <div class="position-absolute bottom-0 col-12">
                    <div class="card">
                        <!-- <div class="card-header"> -->
                            
                        </div>
                        <div class="card-body space-around">

                            <div class="d-flex justify-content-around mb-auto">
                                <div class="col-3">
                                    <a class="my-navbar-item" href="{{ route('home') }}">ホーム</a>
                                </div>
                                <div class="col-3">
                                    <a class="my-navbar-item" href="{{ route('buy.goods.list') }}">購入商品一覧</a>
                                </div>
                                <div class="col-3">
                                    <a class="my-navbar-item" href="{{ route('cart') }}">カート</a>
                                </div>
                                <div class="col-3">
                                    <a class="my-navbar-item" href="{{ route('good.list') }}">いいね一覧</a>
                                </div>
                            </div>
                           
                            
                        </div>
                    </div>
                </div>
                <!-- <div class="col-md-4">
                <div class="card">
                    <div class="card-header">
                        
                    </div>
                    
                    <div class="card-body">
                        <div class="card-body">
                            

                         

                            

                            
                                    
                        </div>
                    </div>
                </div>
            </div>
        </main>
    </div> -->
</body>
</html>

自分で試したこと

ミドルウェアを記載するRoute::group(['middleware' => 'auth'],function(){をweb.phpに記述していますが他に何が必要なのでしょうか。調べたサイトを参考にしたのですが、そもそも何かが足りていないような気がします。https://qiita.com/washio12/items/59f5cde23b4205973c6b

DisplayController

<?php

namespace App\Http\Controllers;
use App\User;
use Illuminate\Http\Request;

class DisplayController extends Controller
{
    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('auth');
    }

    /**
     * Show the application dashboard.
     *
     * @return \Illuminate\Contracts\Support\Renderable
     */
    public function index()
    {
        return view('home');
    }
    public function home()
    {
        return redirect('/');
    }
}

Web.php

<?php
use App\Http\Controllers\DisplayController;
use App\Http\Controllers\RegistrationController;

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/

// Route::get('/', function () {
//     return view('home');
// });

Auth::routes();

// Route::group(['middleware' => 'auth'],function(){

Route::get('/',[DisplayController::class,'index']);

Route::get('/home',[DisplayController::class,'home'])->name('home');

Route::get('/login',[DisplayController::class,'index']);

Route::get('/search',[DisplayController::class,'search'])->name('search');

Route::get('/getPriceRanges',[DisplayController::class,'getPriceRanges']);
Auth::routes();

// Route::get('/home', [DisplayController::class,'home'])->name('home');

// });
0

1Answer

うまく機能していない

「文字列として出力されている」とおっしゃりたいのだと推察しますが、Bladeテンプレートの記載に問題があるように思われます。
Bladeテンプレートのコードを載せていただければ詳しくわかるかもしれません。

問題をさらに切り分ける事もできるでしょう。@ifをはじめとしたBlade構文が機能していないのか、Auth::check()が機能していないのか、とった観点で調べることでより詳しく状況がわかると思います。

0Like

Comments

  1. @MaReee69

    Questioner

    ありがとうございます。
    おっしゃる通りです!どう表現するのが適切なのか分からず投稿しました!
    bladeファイルを追加させていただきます!
    添付してくださったサイトも見ます!
    よろしくお願いいたします。

  2. Bladeテンプレートのコードを拝見しました。
    ざっと見たところ、if文の構造が正しくないように見えます。

    まず<!-- -->はHTMLのコメントであり、Bladeテンプレートのコメントではありません。つまり<!-- -->で括ってもBladeのコードとしては有効です。
    それを踏まえて下記のコードを見ると、@else@if@endifの外にあります。また@endifが2つあるものの、対になる@ifが1つしかありません。

                <div class = "my-navbar-control">
                    @if(Auth::check())
                        // ...
                    @endif
                    <!-- @else -->
                       // ...
                    <!-- @endif -->
                </div>
    

    本来は構文として誤っているのでエラーなると思うのですが、スクショのように表示されるのは不可解ですね・・・

    コントローラーの処理はどのようになっているでしょうか?別のテンプレートを指定してることはないでしょうか?
    原因がどこにあるのかわからないときは、最小限で正しく動くところから1つずつ確認していくことが重要です。

    Bladeのコメント

    ちなみにBladeのコメントは下記のようになります。

    {{-- このコメントはHTMLのなかに存在しない --}}
    

  3. @MaReee69

    Questioner

    ご回答と拝見ありがとうございます。
    コメントアウトしたつもりでもブレードファイルには表示されるという事を知りませんでした。とても勉強になります。
    ありがとうございます。
    コントローラーもweb.phpも追加させていただきます。
    よろしくお願いいたします。

  4. 追加の情報ありがとうございます。
    拝見しましたが特別問題があるようには見えないので、まずは構文の誤りを修正するのが良いと思います。
    一度にいろいろやると原因がどこにあるのか分からなくなるので、最低限の状態で確認することをお勧めします。

  5. @MaReee69

    Questioner

    ありがとうございます!
    修正してみます!
    回答をいただきとても助かりましたし勉強になりました。
    また何かあった際はご教授いただけると嬉しいです。

Your answer might help someone💌