«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Легко строить социальные сети с Laravel и Stream

Легко строить социальные сети с Laravel и Stream

Опубликовано в 2025-04-15
Просматривать:878

Эта статья основана на предыдущем учебном пособии о добавлении функции «Следуйте» в приложение Laravel с использованием потока. Эта часть фокусируется на настройке моделей для отслеживания деятельности, изучения типов каналов Stream, получения каналов и отображения их в представлениях.

]

Building a Social Network with Laravel and Stream? Easy!

Key Concepts:

    ]
  • Stream Laravel's FeedManager упрощает операции подачи, предлагая предварительно построенные каналы (пользователь, новости, уведомление).
  • ]
  • Stream сохраняет данные как actions (Actor, глагол, объект, время, плюс пользовательские данные).
  • rekelecontroller использует feedmanager для следующего/отречения, соответственно обновление фидов.
  • ]
  • действия обогащены перед отображением, преобразование необработанных данных в удобный для просмотра формат.
  • ]
  • Stream поддерживает различные типы каналов (новости, уведомления), позволяя пользовательским шаблонам для различных действий.
  • ]
]

Структура данных активности:

Stream представляет данные как действия, по крайней мере, с актером, глаголом, объектом и временем. Пользовательские поля также разрешены.

]
    ]
  • object: ссылка на экземпляр модели.
  • ]
  • actor: Ссылка на пользователя, создающего деятельность.
  • verb: строка, представляющая действие (например, ', созданный').
]

Пример: определение activityverb в model :

class Post extends Model
{
    // ... other code ...

    /**
     * Stream: Activity verb for post creation.
     */
    public function activityVerb()
    {
        return 'created';
    }
}

Использование FeedManager:

]

FeedManager упрощает взаимодействие подачи. Доступен через фасадный псевдоним, установленном в config/app.php .

]

предварительно настроенные подачи:

]

FeedManager предоставляет предварительно построенные каналы: пользователь, новости и уведомление. В этом примере в первую очередь используются новости и уведомления. Доступна дополнительная информация о других типах каналов здесь .

]

следуйте/отписать функциональность с FeedManager:

]

relowcontroller обновляется для использования Feedmanager для эффективных действий следующего/unfold:

]
// app/Http/Controllers/FollowController.php

public function follow(User $user)
{
    if (!Auth::user()->isFollowing($user->id)) {
        Auth::user()->follows()->create(['target_id' => $user->id]);
        FeedManager::followUser(Auth::id(), $user->id);
        return back()->with('success', 'Now following ' . $user->name);
    } else {
        return back()->with('error', 'Already following this user.');
    }
}

public function unfollow(User $user)
{
    if (Auth::user()->isFollowing($user->id)) {
        $follow = Auth::user()->follows()->where('target_id', $user->id)->first();
        FeedManager::unfollowUser(Auth::id(), $follow->target_id);
        $follow->delete();
        return back()->with('success', 'Unfollowed ' . $user->name);
    } else {
        return back()->with('error', 'Not following this user.');
    }
}

отображение Feeds:

]

a feedsController создан для обработки поиска и отображения:

]
use GetStream\StreamLaravel\Enrich;

class FeedsController extends Controller
{
    // ... other code ...

    public function newsFeed(Request $request)
    {
        $feed = FeedManager::getNewsFeeds($request->user()->id)['timeline'];
        $activities = $feed->getActivities(0, 25)['results'];
        $activities = $this->enrich()->enrichActivities($activities);
        return view('feed.newsfeed', ['activities' => $activities]);
    }

    private function enrich()
    {
        return new Enrich;
    }

    // ... other methods ...
}

enrich обрабатывает преобразование данных для рендеринга представления. Маршрут определяется для доступа к этому действию контроллера. ]

Templating:

Newsfeed Просмотреть итераты через обогащенные действия, используя частичную ( Stream-Laravel :: render_activity ) для выполнения отдельных действий. Пользовательская деятельность Partials (например, cenestion.blade.php для Post Coreation) созданы в папке просмотр.

пример

censue.blade.php Partial:

{{ date('F j, Y, g:i a', strtotime($activity['time'])) }}

{{ $activity['actor']['name'] }} created a new post titled {{ $activity['object']['title'] }}

] уведомление Feed:

модель

follow обновляется, чтобы включить обработку подачи уведомлений: ]

class Follow extends Model
{
    use \GetStream\StreamLaravel\Eloquent\ActivityTrait;

    // ... other code ...

    public function activityNotify()
    {
        $targetFeed = FeedManager::getNotificationFeed($this->target_id);
        return [$targetFeed];
    }

    public function activityVerb()
    {
        return 'follow';
    }

    public function activityExtraData()
    {
        return ['followed' => $this->target, 'follower' => $this->user];
    }
}
] аналогичное действие контроллера, маршрут и view (

уведомления. Отдельный частичный ( natification_follow.blade.php ) используется для следующих уведомлений.

Заключение:

Stream упрощает добавление надежной функции корма к приложениям Laravel. Учебное пособие демонстрирует, как отслеживать различные действия, управлять различными типами корма и эффективно оказать их в взглядах. Дальнейшее исследование возможностей потока поощряется.

]

faqs (слегка переформатировано):

] раздел часто задаваемых вопросов хорошо написан и предоставляет полезную информацию. Никаких существенных изменений не требуется, но незначительные корректировки форматирования могут улучшить читаемость. Рассмотрите возможность использования нумерованного списка или терминов ключа жирника для лучшей визуальной организации.

]
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3