Illuminate\Foundation\Events\Dispatchable: Difference between revisions

From binaryoption
Jump to navigation Jump to search
Баннер1
(@pipegas_WP)
 
(@pipegas_WP)
 
Line 1: Line 1:
=== Illuminate\Foundation\Events\Dispatchable ===
=== Illuminate\Foundation\Events\Dispatchable ===


'''Dispatchable''' هو سمة (trait) أساسي في إطار عمل Laravel PHP، يهدف إلى تبسيط عملية إطلاق [[الأحداث]] (Events) في تطبيقاتك. يوفر Dispatchable طريقة أنيقة وفعالة لإرسال الأحداث دون الحاجة إلى كتابة التعليمات البرمجية المتكررة.  يُستخدم بشكل رئيسي داخل [[الفئات]] (Classes) التي تمثل [[الأحداث]] نفسها. هذه المقالة موجهة للمبتدئين وستشرح بالتفصيل كيفية عمل Dispatchable، وكيفية استخدامه، وأهميته في بنية Laravel.
'''Dispatchable''' هو ترايف (Trait) أساسي في إطار عمل Laravel PHP يوفر طريقة أنيقة وفعالة لإرسال [[الأحداث]] (Events) في تطبيقاتك. فهم هذا الترايف ضروري لبناء تطبيقات قابلة للصيانة والتوسع، خاصةً عند التعامل مع [[البرمجة الموجهة نحو الأحداث]] (Event-Driven Programming). يهدف هذا المقال إلى تقديم شرح مفصل للمبتدئين حول كيفية عمل `Dispatchable` وكيفية استخدامه بشكل فعال.


== ما هي الأحداث؟ ==
== ما هي الأحداث؟ ==


قبل الخوض في تفاصيل Dispatchable، من المهم فهم مفهوم [[الأحداث]] في Laravel. الأحداث هي آلية تسمح لأجزاء مختلفة من تطبيقك بالتفاعل مع بعضها البعض دون أن تكون مرتبطة بشكل وثيق.  فكر في الأمر على أنه نظام إشعارات. عندما يحدث شيء مهم في تطبيقك (مثل تسجيل مستخدم جديد، أو تحديث بيانات)، يمكنك إطلاق حدث. يمكن لأجزاء أخرى من التطبيق "الاشتراك" في هذه الأحداث والاستماع إليها، وتنفيذ التعليمات البرمجية الخاصة بها استجابةً للحدث. هذا يعزز [[الاقتران الضعيف]] (Loose Coupling) ويجعل تطبيقك أكثر قابلية للصيانة والتوسع.
قبل أن نتعمق في `Dispatchable`، من المهم فهم مفهوم [[الأحداث]] في Laravel. الأحداث هي ببساطة إشارات (signals) يتم إطلاقها عندما يحدث شيء مهم في تطبيقك. على سبيل المثال، قد تطلق حدثًا عندما يقوم المستخدم بالتسجيل، أو عندما يتم إنشاء منشور جديد، أو عندما يتم تحديث بيانات معينة.


== دور Dispatchable ==
== دور Dispatchable ==


Dispatchable يسهل عملية إطلاق الأحداث. بدلاً من كتابة التعليمات البرمجية اللازمة لاستدعاء نظام الأحداث في كل مرة تريد فيها إطلاق حدث، يمكنك ببساطة استخدام سمة Dispatchable داخل فئة الحدث الخاص بك. يقوم Dispatchable بتوفير طريقة مختصرة لإطلاق الحدث، مع التعامل مع جميع التفاصيل الداخلية.
`Dispatchable` يبسط عملية إطلاق هذه الأحداث. بدلاً من الاضطرار إلى كتابة التعليمات البرمجية المتكررة لإرسال الأحداث يدويًا، يمكنك تضمين هذا الترايف في [[الكلاسات]] (Classes) الخاصة بك والاستفادة من الوظائف التي يوفرها. يوفر `Dispatchable` طريقتين رئيسيتين لإرسال الأحداث:
 
*  '''dispatch()''' : هذه الطريقة ترسل الحدث بشكل متزامن (synchronously). بمعنى آخر، ينتظر الكود الخاص بك حتى يتم معالجة جميع [[المستمعين]] (Listeners) المرتبطين بالحدث قبل المتابعة.
*  '''dispatchNow()''' : هذه الطريقة ترسل الحدث بشكل فوري (immediately) وتضمن معالجته قبل أي مهام أخرى.


== كيفية استخدام Dispatchable ==
== كيفية استخدام Dispatchable ==


لاستخدام Dispatchable، قم بتضمينه في فئة الحدث الخاص بك باستخدام الكلمة المفتاحية `use`. على سبيل المثال:
لاستخدام `Dispatchable`، يجب عليك أولاً تضمينه في الكلاس الذي تريد إرسال الأحداث منه. إليك مثال:


```php
```php
namespace App\Events;
namespace App\Models;


use Illuminate\Database\Eloquent\Model;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Broadcasting\InteractsWithSockets;
use Contracts\Queue\ShouldQueue;


class UserRegistered
class Post extends Model
{
{
     use Dispatchable, InteractsWithSockets, ShouldQueue;
     use Dispatchable;


     /**
     protected $fillable = ['title', 'body'];
    * المستخدم الذي تم تسجيله.
    *
    * @var \App\Models\User
    */
    public $user;


    /**
     public function afterCreate()
    * إنشاء مثيل جديد للحدث.
    *
    * @param  \App\Models\User  $user
    * @return void
    */
     public function __construct(\App\Models\User $user)
     {
     {
         $this->user = $user;
         $this->dispatch(new PostCreated($this));
     }
     }
}
}
```
```


في هذا المثال، قمنا بتضمين Dispatchable في فئة `UserRegistered`. الآن، يمكنك إطلاق هذا الحدث بسهولة باستخدام طريقة `dispatch()`:
في هذا المثال، قمنا بتضمين `Dispatchable` في كلاس `Post` نموذج. ثم قمنا بتعريف دالة `afterCreate` التي يتم استدعاؤها بعد إنشاء منشور جديد. داخل هذه الدالة، نستخدم `dispatch` لإرسال حدث `PostCreated`، مع تمرير نموذج `Post` كبيانات للحدث.
 
== إنشاء المستمعين (Listeners) ==
 
بعد إرسال الحدث، تحتاج إلى إنشاء [[المستمعين]] (Listeners) الذين سيستجيبون لهذا الحدث. المستمع هو كلاس يستمع إلى حدث معين وينفذ بعض الإجراءات عندما يتم إطلاق هذا الحدث. إليك مثال:


```php
```php
event(new UserRegistered($user));
namespace App\Listeners;
 
use App\Events\PostCreated;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\InteractsWithQueue;
 
class SendPostNotification implements ShouldQueue
{
    use InteractsWithQueue, Dispatchable;
 
    public function handle(PostCreated $event)
    {
        // إرسال إشعار بالمنشور الجديد
        // ...
    }
}
```
```


== فوائد استخدام Dispatchable ==
في هذا المثال، قمنا بإنشاء مستمع `SendPostNotification` الذي يستمع إلى حدث `PostCreated`. داخل دالة `handle`، يمكنك تنفيذ أي إجراء تريده، مثل إرسال إشعار عبر البريد الإلكتروني أو تحديث قاعدة البيانات.


*  '''تبسيط التعليمات البرمجية:''' يقلل Dispatchable من مقدار التعليمات البرمجية المتكررة التي تحتاج إلى كتابتها لإطلاق الأحداث.
== التسجيل في خدمة الأحداث (Event Service) ==
*  '''تحسين القراءة:''' يجعل التعليمات البرمجية الخاصة بك أكثر وضوحًا وسهولة في الفهم.
*  '''زيادة الإنتاجية:''' يوفر الوقت والجهد، مما يسمح لك بالتركيز على جوانب أخرى من تطبيقك.
*  '''المرونة:''' يسمح لك بإطلاق الأحداث من أي مكان في تطبيقك بسهولة.


== Dispatchable و Queue ==
بعد إنشاء المستمعين، يجب عليك تسجيلهم في خدمة الأحداث (Event Service) في ملف `EventServiceProvider` الخاص بك. إليك مثال:


غالبًا ما يتم استخدام Dispatchable مع [[الصفوف]] (Queues) في Laravel.  عندما تقوم بإطلاق حدث باستخدام Dispatchable، يمكنك اختياريًا وضعه في قائمة الانتظار للمعالجة في الخلفية.  هذا مفيد بشكل خاص للمهام التي تستغرق وقتًا طويلاً، مثل إرسال رسائل البريد الإلكتروني أو معالجة الصور.  لجعل الحدث قابلاً للوضع في قائمة الانتظار، قم بتضمين سمة `ShouldQueue` في فئة الحدث الخاص بك، كما هو موضح في المثال أعلاه.
```php
namespace App\Providers;


== العلاقة مع Event Listeners ==
use App\Listeners\SendPostNotification;
use App\Events\PostCreated;
use Illuminate\Support\Facades\Event;
use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;


Dispatchable يعمل جنبًا إلى جنب مع [[Event Listeners]] (مستمعو الأحداث). مستمعو الأحداث هي فئات تستمع إلى الأحداث المحددة وتنفيذ التعليمات البرمجية الخاصة بها استجابةً لهذه الأحداث. يمكنك تسجيل مستمعي الأحداث في ملف `EventServiceProvider` الخاص بك.
class EventServiceProvider extends ServiceProvider
{
    protected $listen = [
        PostCreated::class => [
            SendPostNotification::class,
        ],
    ];


== أمثلة على حالات الاستخدام ==
    public function boot()
    {
        parent::boot();
    }
}
```


*  '''إرسال رسائل بريد إلكتروني بعد تسجيل المستخدم:''' إطلاق حدث `UserRegistered` بعد تسجيل مستخدم جديد، ثم استخدام مستمع حدث لإرسال رسالة بريد إلكتروني ترحيبية.
في هذا المثال، قمنا بتسجيل مستمع `SendPostNotification` للاستماع إلى حدث `PostCreated`.
*  '''تسجيل النشاط:''' إطلاق حدث `ActivityLogged` عند إجراء إجراء مهم في تطبيقك، ثم استخدام مستمع حدث لتسجيل هذا النشاط في قاعدة البيانات.
*  '''تحديث ذاكرة التخزين المؤقت:''' إطلاق حدث `CacheUpdated` بعد تحديث ذاكرة التخزين المؤقت، ثم استخدام مستمع حدث لتحديث ذاكرة التخزين المؤقت في أجزاء أخرى من تطبيقك.
*  '''إشعارات الدفع:''' إطلاق حدث عند حدوث تغيير في حالة الطلب، واستخدام مستمع لإرسال إشعار دفع للمستخدم.


== مقارنة مع الطرق الأخرى لإطلاق الأحداث ==
== مزايا استخدام Dispatchable ==


تقليديًا، كان بإمكانك إطلاق الأحداث باستخدام طريقة `Event::dispatch()`. ومع ذلك، فإن استخدام Dispatchable يوفر طريقة أكثر إيجازًا وأناقة. كما أنه يسمح لك بتضمين سمات إضافية مثل `ShouldQueue` بسهولة.
*  '''قابلية الصيانة''' : يجعل الكود الخاص بك أكثر تنظيمًا وسهولة في الصيانة.
*  '''الفصل بين الاهتمامات''' : يفصل بين منطق إرسال الأحداث ومنطق معالجة الأحداث.
*  '''التوسع''' : يسهل إضافة مستمعين جدد للأحداث الحالية.
*  '''الاختبار''' : يجعل الكود الخاص بك أسهل في الاختبار.


== اعتبارات الأداء ==
== اعتبارات الأداء ==


بشكل عام، يعتبر Dispatchable فعالاً من حيث الأداء. ومع ذلك، من المهم أن تكون على دراية بالتأثير المحتمل لإطلاق عدد كبير من الأحداث، خاصةً إذا كنت تستخدم الصفوف. تأكد من أن مستمعي الأحداث الخاص بك يتم تحسينهم لتجنب أي اختناقات في الأداء.
عند استخدام الأحداث، من المهم مراعاة الأداء. إذا كان لديك عدد كبير من المستمعين أو إذا كانت مهام معالجة الأحداث تستغرق وقتًا طويلاً، فقد يؤدي ذلك إلى تباطؤ تطبيقك. في هذه الحالات، يمكنك استخدام [[الطوابير]] (Queues) لمعالجة الأحداث بشكل غير متزامن.
 
== أمثلة إضافية ==


== مفاهيم ذات صلة ==
*  إرسال حدث عند تحديث نموذج: `dispatch(new ModelUpdated($this));`
*  إرسال حدث عند حذف نموذج: `dispatch(new ModelDeleted($this));`
*  إرسال حدث مخصص: `dispatch(new MyCustomEvent($data));`


*  [[Laravel]]
== روابط ذات صلة ==
*  [[الأحداث]]
 
*  [[Event Listeners]]
*  [[Laravel Documentation – Events]]
*  [[الصفوف]]
*  [[Laravel Documentation – Listeners]]
*  [[Laravel Documentation – Dispatchable Trait]]
*  [[Event-Driven Architecture]]
*  [[Observer Pattern]]
*  [[Dependency Injection]]
*  [[Dependency Injection]]
*  [[SOLID Principles]]
*  [[Design Patterns in PHP]]
*  [[Queue System in Laravel]]
*  [[Eloquent Models]]
*  [[Service Container]]
*  [[Service Container]]
*  [[Facades]]
*  [[Facades]]
*  [[Middleware]]
*  [[Routing]]
*  [[Routing]]
*  [[Middleware]]
*  [[Eloquent ORM]]
*  [[Blade Templating Engine]]
*  [[Blade Templating Engine]]
*  [[Artisan Console]]
*  [[Configuration]]
*  [[Database Migrations]]
*  [[Testing]]
== استراتيجيات التحليل الفني وحجم التداول (للمقارنة المفاهيمية) ==


*  [[Moving Averages]] (المتوسطات المتحركة) - مثل تجميع الأحداث لمعالجة متكررة.
== استراتيجيات تداول الخيارات الثنائية وتحليل السوق ==
*  [[Bollinger Bands]] (نطاقات بولينجر) - تحديد نطاق التغييرات في الأحداث.
*  [[Fibonacci Retracement]] (استرجاع فيبوناتشي) - تحديد نقاط مهمة في تدفق الأحداث.
*  [[Volume Weighted Average Price]] (متوسط السعر المرجح بالحجم) - تحليل حجم الأحداث وتأثيرها.
*  [[On Balance Volume]] (حجم التوازن) - قياس قوة تدفق الأحداث.
*  [[MACD]] (مؤشر الماكد) - تحديد اتجاه الأحداث.
*  [[RSI]] (مؤشر القوة النسبية) - قياس زخم الأحداث.
*  [[Ichimoku Cloud]] (سحابة إيشيموكو) - تحليل شامل لاتجاه الأحداث.
*  [[Candlestick Patterns]] (أنماط الشموع) - تحديد أنماط سلوك الأحداث.
*  [[Support and Resistance Levels]] (مستويات الدعم والمقاومة) - تحديد نقاط التحول المحتملة في تدفق الأحداث.
*  [[Trend Lines]] (خطوط الاتجاه) - تحديد اتجاه الأحداث.
*  [[Chart Patterns]] (أنماط الرسوم البيانية) - تحديد أنماط سلوك الأحداث.
*  [[Elliott Wave Theory]] (نظرية موجات إليوت) - تحليل دورات الأحداث.
*  [[Gann Angles]] (زوايا جان) - تحديد مستويات الدعم والمقاومة بناءً على الزوايا.
*  [[Market Depth]] (عمق السوق) - فهم حجم الأحداث المتراكمة.


===
*  [[Trend Following]]
*  [[Range Trading]]
*  [[Breakout Trading]]
*  [[Moving Average Crossover]]
*  [[Bollinger Bands]]
*  [[Fibonacci Retracement]]
*  [[Candlestick Patterns]]
*  [[Support and Resistance Levels]]
*  [[Volume Analysis]]
*  [[Technical Indicators]]
*  [[Fundamental Analysis]]
*  [[Risk Management]]
*  [[Algorithmic Trading]]
*  [[Scalping]]
*  [[Day Trading]]


[[Category:الفئة:Laravel]]
[[Category:الفئة:أطر عمل PHP]]


== ابدأ التداول الآن ==
== ابدأ التداول الآن ==

Latest revision as of 12:57, 24 April 2025

Illuminate\Foundation\Events\Dispatchable

Dispatchable هو ترايف (Trait) أساسي في إطار عمل Laravel PHP يوفر طريقة أنيقة وفعالة لإرسال الأحداث (Events) في تطبيقاتك. فهم هذا الترايف ضروري لبناء تطبيقات قابلة للصيانة والتوسع، خاصةً عند التعامل مع البرمجة الموجهة نحو الأحداث (Event-Driven Programming). يهدف هذا المقال إلى تقديم شرح مفصل للمبتدئين حول كيفية عمل `Dispatchable` وكيفية استخدامه بشكل فعال.

ما هي الأحداث؟

قبل أن نتعمق في `Dispatchable`، من المهم فهم مفهوم الأحداث في Laravel. الأحداث هي ببساطة إشارات (signals) يتم إطلاقها عندما يحدث شيء مهم في تطبيقك. على سبيل المثال، قد تطلق حدثًا عندما يقوم المستخدم بالتسجيل، أو عندما يتم إنشاء منشور جديد، أو عندما يتم تحديث بيانات معينة.

دور Dispatchable

`Dispatchable` يبسط عملية إطلاق هذه الأحداث. بدلاً من الاضطرار إلى كتابة التعليمات البرمجية المتكررة لإرسال الأحداث يدويًا، يمكنك تضمين هذا الترايف في الكلاسات (Classes) الخاصة بك والاستفادة من الوظائف التي يوفرها. يوفر `Dispatchable` طريقتين رئيسيتين لإرسال الأحداث:

  • dispatch() : هذه الطريقة ترسل الحدث بشكل متزامن (synchronously). بمعنى آخر، ينتظر الكود الخاص بك حتى يتم معالجة جميع المستمعين (Listeners) المرتبطين بالحدث قبل المتابعة.
  • dispatchNow() : هذه الطريقة ترسل الحدث بشكل فوري (immediately) وتضمن معالجته قبل أي مهام أخرى.

كيفية استخدام Dispatchable

لاستخدام `Dispatchable`، يجب عليك أولاً تضمينه في الكلاس الذي تريد إرسال الأحداث منه. إليك مثال:

```php namespace App\Models;

use Illuminate\Database\Eloquent\Model; use Illuminate\Foundation\Events\Dispatchable;

class Post extends Model {

   use Dispatchable;
   protected $fillable = ['title', 'body'];
   public function afterCreate()
   {
       $this->dispatch(new PostCreated($this));
   }

} ```

في هذا المثال، قمنا بتضمين `Dispatchable` في كلاس `Post` نموذج. ثم قمنا بتعريف دالة `afterCreate` التي يتم استدعاؤها بعد إنشاء منشور جديد. داخل هذه الدالة، نستخدم `dispatch` لإرسال حدث `PostCreated`، مع تمرير نموذج `Post` كبيانات للحدث.

إنشاء المستمعين (Listeners)

بعد إرسال الحدث، تحتاج إلى إنشاء المستمعين (Listeners) الذين سيستجيبون لهذا الحدث. المستمع هو كلاس يستمع إلى حدث معين وينفذ بعض الإجراءات عندما يتم إطلاق هذا الحدث. إليك مثال:

```php namespace App\Listeners;

use App\Events\PostCreated; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Queue\InteractsWithQueue;

class SendPostNotification implements ShouldQueue {

   use InteractsWithQueue, Dispatchable;
   public function handle(PostCreated $event)
   {
       // إرسال إشعار بالمنشور الجديد
       // ...
   }

} ```

في هذا المثال، قمنا بإنشاء مستمع `SendPostNotification` الذي يستمع إلى حدث `PostCreated`. داخل دالة `handle`، يمكنك تنفيذ أي إجراء تريده، مثل إرسال إشعار عبر البريد الإلكتروني أو تحديث قاعدة البيانات.

التسجيل في خدمة الأحداث (Event Service)

بعد إنشاء المستمعين، يجب عليك تسجيلهم في خدمة الأحداث (Event Service) في ملف `EventServiceProvider` الخاص بك. إليك مثال:

```php namespace App\Providers;

use App\Listeners\SendPostNotification; use App\Events\PostCreated; use Illuminate\Support\Facades\Event; use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;

class EventServiceProvider extends ServiceProvider {

   protected $listen = [
       PostCreated::class => [
           SendPostNotification::class,
       ],
   ];
   public function boot()
   {
       parent::boot();
   }

} ```

في هذا المثال، قمنا بتسجيل مستمع `SendPostNotification` للاستماع إلى حدث `PostCreated`.

مزايا استخدام Dispatchable

  • قابلية الصيانة : يجعل الكود الخاص بك أكثر تنظيمًا وسهولة في الصيانة.
  • الفصل بين الاهتمامات : يفصل بين منطق إرسال الأحداث ومنطق معالجة الأحداث.
  • التوسع : يسهل إضافة مستمعين جدد للأحداث الحالية.
  • الاختبار : يجعل الكود الخاص بك أسهل في الاختبار.

اعتبارات الأداء

عند استخدام الأحداث، من المهم مراعاة الأداء. إذا كان لديك عدد كبير من المستمعين أو إذا كانت مهام معالجة الأحداث تستغرق وقتًا طويلاً، فقد يؤدي ذلك إلى تباطؤ تطبيقك. في هذه الحالات، يمكنك استخدام الطوابير (Queues) لمعالجة الأحداث بشكل غير متزامن.

أمثلة إضافية

  • إرسال حدث عند تحديث نموذج: `dispatch(new ModelUpdated($this));`
  • إرسال حدث عند حذف نموذج: `dispatch(new ModelDeleted($this));`
  • إرسال حدث مخصص: `dispatch(new MyCustomEvent($data));`

روابط ذات صلة

استراتيجيات تداول الخيارات الثنائية وتحليل السوق

ابدأ التداول الآن

سجل في IQ Option (الحد الأدنى للإيداع $10) افتح حساباً في Pocket Option (الحد الأدنى للإيداع $5)

انضم إلى مجتمعنا

اشترك في قناة Telegram الخاصة بنا @strategybin للحصول على: ✓ إشارات تداول يومية ✓ تحليلات استراتيجية حصرية ✓ تنبيهات باتجاهات السوق ✓ مواد تعليمية للمبتدئين

Баннер