Hanan Fahad2 نشر 21 يوليو 2021 أرسل تقرير نشر 21 يوليو 2021 ابغا مثال على الاحداث والمنصت بسيط وسهل اطبقه وشوف هالشي كبدايه عشان افهم الفكره وتوسع اقتباس
0 سمير عبود نشر 21 يوليو 2021 أرسل تقرير نشر 21 يوليو 2021 يوفر Laravel طريقة ممتازة للربط بحدث معين في تطبيقك أو مشروعك باستخدام الأحداث (events) والمستمعين (listeners). ستتيح لك هذه الميزة الاشتراك والاستماع إلى الأنشطة المختلفة التي حدثت في التطبيق الخاص بك. ببساطة ، فكر في الحدث على أنه شيء حدث في تطبيقك والمستمعين كمجموعة من المنطق للرد بها على ذلك الحدث. لذلك ، يتيح هذا للمطورين ، إصدار إعلانات داخل التطبيق بحدوث شيء ما وتنفيذ مجموعة من العمليات بناءً على هذا الحدث المحدد. نتيجة لذلك ، ستساعد الأحداث والمستمعون بشكل أكبر في تبسيط أكوادنا وإعادة بناء المهام المعقدة. قد تسأل لماذا نستخدم هذه الخصائص ! تُساعد هذه الخصائص كثيراً في تحقيق مبادئ تصميم البرمجيات (SOLID) حيث أن أحد هذه المبادئ مبدأ SRP اي Single Responsibility Principle و يعني ببساطة أن كل وحدة او كلاس أو دالة يجب عليها أن تقوم بمسؤولية واحدة فقط. قد نرغب في تطبيقنا عند إنشاء منشور ما أن نُرسل إشعار إلى كافة المستخدمين عن طريق البريد الإلكتروني بوجود منشور جديد: نقوم بإنشاء الحدث و المستمع عن طريق الأمر: php artisan make:event PostCreated php artisan make:listener NotifyPostCreated --event="PostCreated" سيُنشئ الأمر أعلاه ملف للحدث بالإسم PostCreated بداخل المسار app/Events و ملف للمستمع بالإسم NotifyPostCreated بداخل المسار app/Listeners بعد ذلك ، تحتاج إلى تسجيل الأحداث والمستمعين في ملف EventServiceProvider.php. في المسار app/Providers: use App/Events/PostCreated; use App/Listeners/NotifyPostCreated; //... /** * The event listener mappings for the application. * * @var array */ protected $listen = [ //... PostCreated::class => [ NotifyPostCreated::class, ], ]; في المصفوفة listen$ مع إستدعاء الكلاسات في الأعلى. الآن بعد أن قمنا بإعداد الأحداث والمستمعين ، كل ما تبقى هو تحديد بعض المنطق داخل الحدث والمستمع. ثم ، أخيرًا إرسال الحدث. أولاً ، لنبدأ بفئة الحدث PostCreated التي أنشأناها سابقًا. ما نريده هو إخطار المستخدمين في كل مرة يتم فيها إنشاء منشور جديد. لذلك ، سنحتاج إلى تمرير كائن post الفعلي إلى باني الفئة PostCreated هذه. سنتعلم كيفية إرسال حدث في وقت لاحق ، ولكن الغرض من ذلك هو إتاحة الوصول إلى الكائن post بين جميع المستمعين. # app/Events/PostCreated.php <?php namespace App\Events; .... use App\Post; class PostCreated { use Dispatchable, InteractsWithSockets, SerializesModels; public $post; /** * Create a new event instance. * * @return void */ public function __construct(Post $post) { $this->post = $post; } } ثانيًا ، ستحتفظ فئة المستمع NotifyPostCreated بالمنطق الفعلي لإرسال البريد الإلكتروني إلى المستخدمين. لاحظ أن هناك تابع handle، هذا هو التابع الذي سيتم استدعاؤه بواسطة الحدث وضمن هذا التابع سنكتب كل الكود اللازم لإرسال البريد الإلكتروني # app/Events/NotifyPostCreated.php <?php namespace App\Listeners; use App\Events\PostCreated; use App\User; use Mail; class NotifyPostCreated { .... .... /** * Handle the event. * * @param PostCreated $event * @return void */ public function handle(PostCreated $event) { // Access the post using $event->post... $users = User::all(); foreach($users as $user) { Mail::to($user)->send('emails.post.created', $event->post); } } } يرجى ملاحظة أنني استخدمت واجهة Mail لإرسال بريد إلكتروني وقمت بتهيئة بيانات اعتماد البريد وفقًا لذلك وأنشأت أيضًا ملفًا لمحتوى البريد الإلكتروني في Resources / views / emails / post / created.blade.php. يُمكن أيضاً إنشاء صنف Notification للتعامل مع الإشعار بشكل مبسط بحيث تُصبح عملية الإخطار بالشكل التالي: $users = User::all(); foreach($users as $user) { $user->notify(new PostCreatedNotification($post)); } الخطوة الأخيرة هي تشغيل حدث PostCreated أو إطلاقه. كل ما علينا فعله هو استخدام المساعد event . سيرسل هذا المساعد الحدث إلى جميع مستمعيه المسجلين. # app/Http/Controllers/PostController.php <?php namespace App\Http\Controllers; use App\Events\PostCreated; use App\Http\Controllers\Controller; use App\Post; class PostController extends Controller { //... public function store(Request $request) { // post storing logic... event(new PostCreated($post)); } } بدلاً من ذلك ، إذا كان حدثك يستخدم Dispatchable trait ، فيمكنك استدعاء التابع الثابت dispatch بهذا الشكل: //... public function store(Request $request) { // post storing logic... PostCreated::dispatch($post); } إفتراضياً لارفل تستخدم نفس العملية عند تسجيل مستخدم جديد لإرسال بريد إلكتروني لتأكيد الحساب. 1 اقتباس
السؤال
Hanan Fahad2
ابغا مثال على الاحداث والمنصت بسيط وسهل اطبقه وشوف هالشي كبدايه عشان افهم الفكره وتوسع
1 جواب على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.