"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > بناء الشبكات الاجتماعية بسهولة مع لارافيل والتيار

بناء الشبكات الاجتماعية بسهولة مع لارافيل والتيار

نشر في 2025-04-15
تصفح:801

تبني هذه المقالة على برنامج تعليمي سابق حول إضافة ميزة "متابعة" إلى تطبيق Laravel باستخدام Stream. يركز هذا الجزء على تكوين النماذج لتتبع النشاط ، واستكشاف أنواع الأعلاف في الدفق ، واسترداد الخلاصات ، وتقديمها في وجهات النظر.

Building a Social Network with Laravel and Stream? Easy!

مفاهيم المفاتيح:

  • دفق Laravel's FeedManager يبسط عمليات التغذية ، ويقدم خلاصات تم تصميمها مسبقًا (المستخدم ، الأخبار ، الإخطار).
  • تدفق يخزن البيانات كأنشطة (الممثل ، الفعل ، الكائن ، الوقت ، بالإضافة إلى البيانات المخصصة).
  • يستخدم
  • متابعة Controller feedManager للتابع/غير متابع ، تحديث الخلاصات وفقًا لذلك.
  • الأنشطة هي
  • المخصب قبل العرض ، وتحويل البيانات الخام إلى تنسيق مناسب للعرض.
  • يدعم دفق أنواع الأعلاف المختلفة (الأخبار ، الإخطارات) ، مما يسمح قوالب مخصصة لأنشطة مختلفة.

بنية بيانات النشاط:

يمثل الدفق البيانات كأنشطة على الأقل: الممثل والفعل والكائن والوقت. يُسمح أيضًا بالحقول المخصصة.

  • كائن: إشارة إلى مثيل النموذج.
  • الممثل: إشارة إلى المستخدم إنشاء النشاط.
  • الفعل: سلسلة تمثل الإجراء (على سبيل المثال ، 'تم إنشاؤها').
مثال: تحديد

Activityverb في post النموذج:

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

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

استخدام FeedManager:

The

feedManager يبسط تفاعلات التغذية. يتم الوصول إليه عبر الاسم المستعار للواجهة المحددة في config/app.php .

موجز مسبقًا:

يوفر

يستخدم هذا المثال في المقام الأول الأخبار والإخطار. مزيد من التفاصيل حول أنواع الخلاص الأخرى متوفرة هنا .

اتبع/غير متابع مع FeedManager:

يتم تحديث

متابعة

لاستخدام feedManager للاطلاع على الإجراءات المتابعة/المتابعة الفعالة:

// app/http/controllers/followController.php الوظيفة العامة اتبع (مستخدم $ $) { if (! auth :: user ()-> isFollowing ($ user-> id)) { Auth :: user ()-> Follows ()-> Create (['' target_id '=> $ user-> id]) ؛ FeedManager :: Followuser (Auth :: id () ، $ user-> id) ؛ العودة مرة أخرى ()-> مع ("النجاح" ، "متابعة الآن". $ user-> name) ؛ } آخر { العودة مرة أخرى ()-> مع ("خطأ" ، "تتبع هذا المستخدم بالفعل.") ؛ } } الوظيفة العامة غير متابعة (مستخدم $ $) { if (auth :: user ()-> isFollowing ($ user-> id)) { $ اتبع = auth :: user ()-> follows ()-> حيث ('target_id' ، $ user-> id)-> first () ؛ FeedManager :: unfollowuser (auth :: id () ، $ foll-> target_id) ؛ $ foll-> delete () ؛ العودة مرة أخرى ()-> مع ("النجاح" ، "غير متابع". $ user-> name) ؛ } آخر { العودة مرة أخرى ()-> مع ("خطأ" ، "لا تتبع هذا المستخدم.") ؛ } }
// 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.');
    }
}
عرض الخلاصات:

A

يتم إنشاء FeedsController

للتعامل مع استرداد التغذية والعرض:

استخدم getStream \ StreamlAravel \ Tririch ؛ يمتد Class FeedsController وحدة التحكم { // ... رمز آخر ... الوظيفة العامة Newsfeed (طلب $) { $ feed = feedmanager :: getNewsfeeds ($ request-> user ()-> id) ['timeline'] ؛ أنشطة $ = $ feed-> getActivities (0 ، 25) ['النتائج'] ؛ أنشطة $ = $ this-> rerich ()-> rerichactivities ($ أنشطة) ؛ إرجاع عرض ('feed.newsfeed' ، ['الأنشطة' => $ أنشطة]) ؛ } دالة خاصة إثراء () { إرجاع New Enrich ؛ } // ... طرق أخرى ... }
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 ...
}
إثراء

طريقة تعامل تحويل البيانات لعرض عرض. يتم تعريف المسار للوصول إلى إجراء وحدة التحكم هذا.

templating:

The NewsFeed

يتم إنشاء جزئيات النشاط المخصص (على سبيل المثال ،

تم إنشاؤها. مثال Create.blade.php جزئي:

{{date ('f j ، y ، g: i a' ، strtotime ($ activity ['time'])}}

{{$ Activity ['Actor'] ['name']}}}

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

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

يتم إنشاء إجراء تحكم مماثل ، ومسار ، وعرض ( الإخطار. يتم استخدام جزء جزئي منفصل (

الإخطار_بلي.

خاتمة:

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];
    }
}
الأسئلة الشائعة (إعادة تنسيق قليلاً):

قسم الأسئلة الشائعة مكتوبة جيدًا ويوفر معلومات مفيدة. لا توجد حاجة إلى تغييرات كبيرة ، ولكن تعديلات التنسيق البسيطة يمكن أن تحسن قابلية القراءة. فكر في استخدام قائمة مرقمة أو مصطلحات مفتاح BOLD لتنظيم بصري أفضل.

أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3