Как предотвратить повторение предупреждения об успехе в этом приложении Laravel?

Я сделал приложение для ведения блога в Laravel 8.

Я работаю над функциональностью добавления ответов на комментарии.

В контроллере я добавляю такие комментарии:

$comment = [
  'user_id'    => Auth::user()->id,
  'article_id' => $request->get( 'article_id' ),
  'parent_id' => $request->get( 'parent_id' ),
  'body'       => $fields['msg'],
  'approved'   => 0
];

// Insert comment in the 'comments' table
$query = Comment::create( $comment );

if ( $query ) {
  return redirect()->back()->with( 'success', 'Your comment is pending.' );
} else {
  return redirect()->back()->with( 'error', 'Adding comment failed' );
}

Я добавил форму комментариев под каждым комментарием:

@foreach ($comments as $comment)
  @if (null == $comment->parent_id)
    <li class = "depth-1 comment">
      <div class = "comment__avatar">
          <img class = "avatar" src = "{{ asset('images/avatars/' . $comment->user->avatar) }}" alt = "<img class = "avatar" src = "{{ asset('images/avatars/' . $reply->user->avatar) }}" alt = "{{ $comment->user->first_name }} {{ $comment->user->last_name }}" width = "50" height = "50">" width = "50" height = "50">
      </div>
      <div class = "comment__content">
          <div class = "comment__info">
              <div class = "comment__author">{{ $comment->user->first_name }} {{ $comment->user->last_name }}</div>
              <div class = "comment__meta">
                  <div class = "comment__time">{{ date('jS M Y', strtotime($comment->created_at)) }}</div>
                  @auth
                    <div class = "comment__reply">
                      <a class = "comment-reply-link" href = "#0">Reply</a>
                    </div>
                  @endauth
              </div>
          </div>
          <div class = "comment__text">
              <p>{{ $comment->body }}</p>
          </div>
      </div>

      // Comments form template here!
      @auth
        <div class = "comment__reply">
          <a class = "comment-reply-link" href = "#0">Reply</a>
        </div>
      @endauth

      {{-- Comment replies --}}
      @if (count($comment->replies))
        <ul class = "children">
          @foreach ($comment->replies as $reply)
            <li class = "depth-2 comment">
              <div class = "comment__avatar">
                <img class = "avatar" src = "{{ asset('images/avatars/' . $reply->user->avatar) }}" alt = "" width = "50" height = "50">
              </div>
              <div class = "comment__content">
                  <div class = "comment__info">
                      <div class = "comment__author">{{ $reply->user->first_name }} {{ $reply->user->last_name }}</div>
                      <div class = "comment__meta">
                          <div class = "comment__time">{{ date('jS M Y', strtotime($reply->created_at)) }}</div>
                      </div>
                  </div>
                  <div class = "comment__text">
                    <p>{{ $reply->body }}</p>
                  </div>
              </div>
            </li>
          @endforeach
        </ul>
      @endif
    </li>
  @endif
@endforeach

Форма комментариев (partials\comment-form.blade.php):

@if (session('success'))
    @include('themes/' .$theme_directory . '/partials/success')
@endif

@if (session('error'))
    @include('themes/' .$theme_directory . '/partials/errors')
@endif

<form method = "post" action = "{{ route('comment.submit') }}" autocomplete = "off">
  @csrf
    <fieldset>
        <input type = "hidden" name = "article_id" value = "{{ $article->id }}">
        <input type = "hidden" name = "parent_id" value = "{{ $comment->id ?? '' }}">

        <div class = "message form-field">
            <textarea name = "msg" id = "message" class = "h-full-width" placeholder = "Your Message"></textarea>

            @error('msg')
            <p class = "help-block text-danger">{{ $message }}</p>
            @enderror
        </div>
        <br>
        <input name = "submit" id = "submit" class = "btn btn--primary btn-wide btn--large h-full-width" value = "Add Comment" type = "submit">
    </fieldset>
</form>

Проблема

Из-за того, что шаблон формы комментариев содержит внутри себя оповещение об успешном (или неудачном) завершении (шаблон) находится внутри @foreach, который зацикливает комментарии при добавлении ответа, оповещение о подтверждении появляется под каждым комментарием.

Конечно, я хочу, чтобы он отображался только под комментарием, на который был дан ответ.

Как я могу добиться желаемого результата?

ПРИМЕЧАНИЕ

При попытке реализовать решение, предложенное @Alun Razvan, я получаю ошибку Undefined variable: comment в comment-form.blade.php.

Вы редактировали свой вопрос и удалили здесь // шаблон формы комментариев! @include('themes/' . $theme_directory . '/partials/comment-form') Как вы ожидаете, что другие будут правильно следовать вашему вопросу? ??

Alin Razvan 15.05.2023 15:25
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
1
332
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В вашем контроллере также передайте идентификатор родительского комментария следующим образом:

return redirect()->back()->with([
    'success' => 'Your comment is pending.',
    'success_comment_id' => $request->get('parent_id'),
]);

Затем в своем шаблоне comment-form.blade.php проверьте, совпадают ли идентификаторы комментариев.

@if (session('success') && session('success_comment_id') == ($comment->id ?? null))
    @include('themes/' .$theme_directory . '/partials/success')
@endif

Другие вопросы по теме