Действия пользователя. Часть 3

Продолжим работу с профилем пользователя. На данный момент у нас там выводятся записи о сообщениях пользователя и об опубликованных им новых темах. Добавим к этому также записи о сообщениях, за которые пользователь проголосовал.

Первым делом нам нужно включить трейт RecordsActivity в модель Favorite. Добавляемая строчка выделена жирным шрифтом.
class Favorite extends Model
{
    use RecordsActivity;
    …
}
После чего все модели проекта будут составлять следующую структуру: Теперь мы сможем отслеживать момент добавления голоса за сообщение и сохранять запись об этом событии в таблице activities.

Также в этот же файл добавим следующий код:
/* Полиморфное отношение – получаем сообщение, за которое был отдан голос */
public function favorited()
{
    return $this->morphTo();
}
Далее отредактируем файл модели Reply. Добавим в него следующее содержимое:
public function path()
{
    return $this->thread->path() . "#reply-{$this->id}";
} 
Данный путь в виде ссылки будет вести со страницы профиля пользователя на страницу темы форума, при этом браузер будет автоматически переходить к нужному сообщению благодаря использованию якоря.

Модифицируем html-код в файле reply.blade.php (папка resources/views/threads/). Заменим строку:
<div class="panel panel-default">
на следующую:
<div id="reply-{{ $reply->id }}" class="panel panel-default">
Далее создадим вид для вывода списка сообщений, за которые проголосовал пользователь. Файл будет называться created_favorite.blade.php (папка resources/views/profiles/activities/). Его содержимое должно быть следующим:
@component('profiles.activities.activity')
    @slot('heading')
        <span class="flex">
	        {{ $profileUser->name }} проголосовал за
	        <a href="{{ $activity->subject->favorited->path() }}"> сообщение</a>
        </span>
        <span>{{ $activity->subject->created_at->format('d-m-Y | H:i:s') }}</span>    
    @endslot

    @slot('body')
        {{ $activity->subject->favorited->body }}
    @endslot
@endcomponent
Здесь мы используем Blade-директиву @component. Поэтому содержимое этого вида включается в отдельный компонент, в нашем случае profiles.activities.activity, который мы создали в предыдущем разделе этого материала (Действия пользователя. Часть 2).

Последнее, что мы сделаем, это немного модифицируем файл для вида профиля пользователя show.blade.php (папка resources/views/profiles/). Найдите строчку
@include ("profiles.activities.{$record->type}", ['activity' => $record])
и замените ее следующим кодом:
@if (view()->exists("profiles.activities.{$record->type}"))
    @include ("profiles.activities.{$record->type}", ['activity' => $record])
@endif
На этом все, теперь страница профиля пользователя должна выглядеть следующим образом: