Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

Laravelのviewファイルにて、特定の場合は返信機能を表示させない処理をしたい。

解決したいこと

Laravelのviewファイルにて、特定の場合は返信機能を表示させない処理をしたい。
また、リンク先でのみ返信機能を表示させたい。

詳細)
現在、LaravelにてTwitterのようなアプリを作っています。
返信機能を個別ページのみに表示させたいのですが、投稿一覧のページにも出力されてしまっているので、投稿一覧のページの方には出力させない処理をしたいです。
なお、投稿の一覧画面と個別ページのbladeファイルが一緒です。

@if()を使えば、できそうな気がするのですが、()内をどのように指定すれば、うまくいくのかわからず、できませんでした。

解決方法を教えて下さい。

index.blade.php (一番下のdivの@if(?)のところです。)

    <div class="mx-auto w-50 ">
            @foreach($records as $record)
            <div class="card my-5">

                <!-- 名前と日付 -->
                <div class="bg-dark bg-opacity-25 row mx-0 pt-3">
                    <div class="icon col-md-2">
                        <img src="" alt="img">
                    </div>
                    <div class="col-md">
                        <h4> {{ $record->name }} </h4>
                        <p><small>{{ $record->date }}</small></p> 
                    </div>
                    <div class="col-md-1">
                        <!-- 自分の投稿のみ編集ボタンが出力されるようにする -->
                        @if( $record->user_id == \Auth::user()->id )
                        <a href="/edit/{{ $record->id }}" class="text-decoration-none text-black">
                        <i class="fa fa-bars" aria-hidden="true"></i>
                        </a>
                        @endif
                    </div>
                </div>

                <!-- 記録項目 -->
                <div class="row mx-0 my-3">
                    <div class="col-md my-2">
                        <p class="border-bottom border-dark">体重 :{{ $record->weight }}</p>
                    </div>
                    <div class="col-md my-2">
                        <p class="border-bottom border-dark">カロリー収支 :{{ $record->sum }}</p>
                    </div>
                    <div class="my-2">
                        <p class="border-bottom border-dark">今日の活動について :</p>
                        <p class="border-bottom border-dark">{{ $record->memo }}</p>
                    </div>
                </div>

                <!-- Likeボタンとリプライボタン -->
                <div class="bg-dark bg-opacity-10">
                    <p class="float-end px-5 pt-3">
                        <a href="" class="m-2 p-2 text-decoration-none">いいね!</a>
                        <a href="/index/{{ $record->id }}" class="m-2 p-2 text-decoration-none">コメント</a>
                    </p> 
                </div>

            </div>

            <!-- 返信機能 indexページには表示しない、<a>コメント</a>で飛ぶ先の個別ページのみに表示したい -->
            @if(?)
            <div class="card my-2">
                <div class="row bg-dark bg-opacity-25 row mx-0 py-3">
                    <h4 class="col-md-2"> picture </h4>
                    <h4 class="col-md"> {{ Auth::user()->name }} </h4>
                </div>

                <div class="my-5 mx-3">
                    <textarea name="reply" id="" cols="30" rows="5" class="form-control"></textarea>
                    <input type="submit" name="submit" value="送信" class="form-control w-25 float-end bg-primary text-white mt-3">
                </div>
            </div>
            @endif
            @endforeach


    </div>

自分で試したこと

①if(!('index.blade.php'))を試したところ、投稿一覧と個別ページの両方から消えました。
②if(!('http://localhost:8888/index')) とURLを絶対パス(?)で指定してみましたが、①同様に両方のページから消えました。個別ページは(http://localhost:8888/index/番号) になるのでいけるかと思ったのですが、ダメでした。

何か良い解決方法がありましたら、ご教示いただけますと幸いです。

0

2Answer

おそらくですが、routeは違いますよね?
routeにnameを設定しているのであれば
routeのnameを条件分岐に入れてみればいいと思います。

index.blade.php

@if (\Route::currentRouteName() === 'hogehuga')
// ~~~
// 表示させたいテンプレート
// ~~~
@endif

routeにnameがなければurlの正規表現など

index.blade.php

@if (preg_match('/\A\/index\/\d+\z/', request()->getPathInfo()))
// ~~~
// 表示させたいテンプレート
// ~~~
@endif

もっといい方法あるかもしれませんがとりあえず判定できます

1Like

ご回答ありがとうございます。
試してみたら、無事思い通りにできました!
Routeで判定可能だなんて知らなかったので、大変勉強になりました。
誠にありがとうございました^^!

1Like

Your answer might help someone💌