مدیریت رویدادها در لاراول

ترجمه و تالیف : امیررضا سیستانه ای
تاریخ انتشار : 13 خرداد 98
خواندن در 2 دقیقه
دسته بندی ها : لاراول

رویداد (Event) یک عمل یا اتفاقی هست که توسط برنامه سازماندهی شده که ممکنه توسط برنامه هم مدیریت بشه. رویدادهای لاراول بسادگی پیاده سازی می شوند. رویدادها میتونند توسط کارهای زیر مدیریت بشوند :

قدم اول - ساخت یک کلاس رویداد

کلاس رویداد میتونه با اجرای دستور زیر, تولید بشه :

php artisan make:event <event-class>

اینجا <event-class> باید با نام کلاس رویداد جابجا بشه. کلاس ساخته شده در مسیر app\Events ذخیره می شود.

قدم دوم - ساخت یک کلاس مدیر برای مدیریت رویداد ساخته شده

کلاس مدیر رویداد میتونه با اجرای دستور زیر, ساخته بشود :

php artisan handler:event <handler-class> --event = <event-class>

اینجا <event-class> اسم کلاس رویداد هست که در قدم اول ساختیم و <handler-class> در واقع اسم کلاس مدیر رویدادمون هست. کلاس مدیری که ساتیم در مسیر app\Handlers\Events ذخیره خواهد شد.

قدم سوم - ثبت کلاس Event و مدیرش در کلاس EventServiceProvider

ما حالا می خواهیم خود رویداد و کلاس مدیریتش رو در فایل app\Providers\EventServiceProvider.php ثبت کنیم. این فایل شامل آرایه ای هست که listen$ نام دارد. در این آرایه ما نیاز داریم کلاس رویداد رو بعنوان یک کلید و کلاس مدیر رویداد رو بعنوان value اون کلید ثبت کنیم.

قدم چهارم - اجرای رویداد

در این قدم ما باید مقدمات اجرای رویداد رو با Event facade فراهم کنیم. متد ()fire که آبجکت های کلاس رویداد رو دریافت میکنه, باید فراخوانی بشه. رویدادها میتونند بصورت زیر اجرا شوند :

Event::fire(<Event Class Object>);

<Event Class Object> باید با آبجکت کلاس رویداد جابجا بشود.

مثال

قدم اول - یک کنترلر به نام CreateStudentController می سازیم. برای اینکار از دستور زیر استفاده می کنیم :

php artisan make:controller CreateStudentController --plain

قدم دوم - بعد از اجرای دستور فوق کنترلر ساخته خواهد شد. کد زیر رو داخل فایل ساخته شده یعنی app\http\controllers\CreateStudentController.php قرار بدهید :

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use DB;

use App\Http\Requests;

use App\Http\Controllers\Controller;

use App\Events\StudentAdded;

use Event;


class CreateStudentController extends Controller {

   public function insertform(){

      return view('stud_add');

   }


   public function insert(Request $request){

      $name = $request->input('stud_name');

      DB::insert('insert into student (name) values(?)',[$name]);

      echo "Record inserted successfully.<br/>";

      echo '<a href = "/event">Click Here</a> to go back.';

      

      //firing an event

      Event::fire(new StudentAdded($name));

   }

}

قدم سوم - یک رویداد به نام StudentAdded با اجرای دستور زیر, بسازید :

php artisan make:event StudentAdded

قدم چهارم - دستور فوق یک فایل رویداد در مسیر App\events\StudentAdded.php می سازه. کد زیر رو داخل این فایل قرار دهید :

<?php

namespace App\Events;

use App\Events\Event;

use Illuminate\Queue\SerializesModels;

use Illuminate\Contracts\Broadcasting\ShouldBroadcast;


class StudentAdded extends Event {

   use SerializesModels;

   public $name;

  

   public function __construct($name) {

      $this->name = $name;

   }

   public function broadcastOn() {

      return [];

   }

}

قدم پنجم - حالا یک مدیر رویداد به اسم HandleNewStudentAdded با اجرای دستور زیر, بسازید :

php artisan handler:event HandlerNewStudentAdded --event = StudentAdded

قدم ششم - کد زیر رو در فایل ساخته شده یعنی app\handlers/events/HandleNewStudentAdded.php قرار دهید :


<?php

namespace App\Handlers\Events;

use App\Events\StudentAdded;

use Illuminate\Queue\InteractsWithQueue;

use Illuminate\Contracts\Queue\ShouldQueue;



class HandleNewStudentAdded {

   protected $name;

   

   public function __construct() {

      //

   }

   public function handle(StudentAdded $event) {

      $this->name = $event->name;

      echo "<br>New Student added in database with name: ".$this->name;

   }

}

قدم هفتم - ما باید کلاس رویداد و مدیرش رو در فایل app\providers\EventServiceProvider.php اضافه کنیم. بصورت زیر این کار رو انجام بدهید :


<?php

namespace App\Providers;

use Illuminate\Contracts\Events\Dispatcher as DispatcherContract;

use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;


class EventServiceProvider extends ServiceProvider {

   /**

   * The event listener mappings for the application.

   *

   * @var array

   */

   protected $listen = [

      'App\Events\SomeEvent' => [

         'App\Listeners\EventListener',

      ],

   

      'App\Events\StudentAdded' => [

         'App\Handlers\Events\HandleNewStudentAdded',

      ],

   ];

   /**

   * Register any other events for your application.

   *

   * @param \Illuminate\Contracts\Events\Dispatcher $events

   * @return void

   */

   public function boot(DispatcherContract $events) {

      parent::boot($events);

      //

   }

}

قدم هفتم - مسیرهای زیر رو به فایل app\http\routes.php بیافزایید :

Route::get('event','CreateStudentController@insertform');

Route::post('addstudent','CreateStudentController@insert');

قدم هشتم - حالا مرورگر رو باز کنید و برنامه رو تست کنید. مشاهده خواهید کرد که فرمی برای افزودن دانش آموز خواهید داشت, بعد از کلیک روی Add student رویداد ما اجرا میشه و یک پیام براتون به نمایش در میاد.

منبع

دیدگاه‌ها و پرسش‌ها

برای ارسال نظر لازم است ابتدا وارد سایت شوید
در حال دریافت نظرات از سرور، لطفا منتظر بمانید