Как создать событие (event) в Laravel при создании записи, при редактировании записи или при удалении записи.

Ромчик
0

laravelДоброго времени суток. В одной статье «Создание событий (Event) в Laravel 5» я уже писал как создать event в Laravel. Но это было в далеком 15 году. Прошло уже достаточно времени – Laravel изменился. Поэтому давайте рассмотрим снова, как создавать события в Laravel. А создавать события (event) мы будем для модели. Т.е. наши события будут возникать, когда мы создадим, изменим или удалим запись. Например, для ведения логов. (заодно и рассмотрим, как писать лог в файл).

И так приступим. Я не буду рассказывать как устанавливать и настраивать Laravel.

Шаг 1. Создание таблицы

Первое, что мы сделаем – это создадим таблицу, например, с категориями. Для этого выполните в консоли следующую команду:


php artisan make:migration create_categories_table --create=categories

Создание миграции в Laravel

Данной командой мы создали файл миграции.

Миграция создана. Переходим к редактированию файла create_categories_table.

<?php use Illuminate\Support\Facades\Schema; use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; class CreateCategoriesTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('categories', function (Blueprint $table) { $table->increments('id');

$table->string('name');

$table->timestamps();

});

}


/**

* Reverse the migrations.

*

* @return void

*/

public function down()

{

Schema::dropIfExists('categories');

}

}

Все миграцию описали. Теперь можем ее запустить. Для этого выполните следующую команду:


php artisan migrate

Запуск миграции

Миграция успешно выполнена. Если мы перейдем в нашу базу данных, то увидим в ней таблицу categories с полями:

  • id
  • name
  • created_at
  • updated_at

Просмотр созданной таблицы

Замечание. Если вам не нужны поля created_at и updated_at или вы хотите их переименовать, то как это сделать вы можете прочитать в моих статьях «Laravel: работаем с created_at и updated_at (убираем поля, переопределяем updated_at и убираем поле updated_at)» и «Переименование полей created_at и updated_at в Eloquent Laravel»

Шаг 2. Создание события в Laravel для Category

Для создания события (event) в Laravel нужно использовать artisan команду:


php artisan make:event CategoryEvent

Создание event в Laravel

Событие в Laravel создано. Открываем файл app\Events\CategoryEvent.php на редактирование:

<?php

namespace App\Events;

use Illuminate\Broadcasting\Channel;

use Illuminate\Queue\SerializesModels;

use Illuminate\Broadcasting\PrivateChannel;

use Illuminate\Broadcasting\PresenceChannel;

use Illuminate\Foundation\Events\Dispatchable;

use Illuminate\Broadcasting\InteractsWithSockets;

use Illuminate\Contracts\Broadcasting\ShouldBroadcast;

use App\Category;

use Log;

class CategoryEvent

{

use Dispatchable, InteractsWithSockets, SerializesModels;


/**

* Create a new event instance.

*

* @return void

*/

public function __construct()

{

//

}

/**

* Get the channels the event should broadcast on.

*

* @return \Illuminate\Broadcasting\Channel|array

*/

public function broadcastOn()

{

return new PrivateChannel('channel-name');

}

public function categoryCreated(Category $category)

{

Log::info("Category Created: ".$category);

}


public function categoryUpdated(Category $category)

{

Log::info("Category Updated: ".$category);

}

public function categoryDeleted(Category $category)

{

Log::info("Category Deleted: ".$category);

}

}

Шаг 3. Регистрация события в Laravel.

Регистрация событий происходит в файле app\Providers\EventServiceProvider.php. В свойство $listen добавим наши события:

<?php namespace App\Providers; use Illuminate\Support\Facades\Event; 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\Event' => [

'App\Listeners\EventListener',

],


'category.created' => [

'App\Events\CategoryEvent@categoryCreated',

],


'category.updated' => [

'App\Events\CategoryEvent@categoryUpdated',

],


'category.deleted' => [

'App\Events\CategoryEvent@categoryDeleted',

],

];


/**

* Register any events for your application.

*

* @return void

*/

public function boot()

{

parent::boot();

//

}

}

Шаг 4. Создание модели в Laravel

Давайте создадим модель для нашей таблицы categories. Для этого необходимо выполнить следующую команду:


php artisan make:model Category

Создание модели в Laravel

Модель создана. Давайте в нее добавим следующий код:

<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
use Event;
class Category extends Model

{

protected $table = 'categories';

protected $fillable = [
'name',
];

public static function boot()

{

parent::boot();

static::created(function($category){

Event::fire('category.created',$category);

});

static::updated(function($category){

Event::fire('category.updated',$category);

});

static::deleted(function($category){

Event::fire('category.deleted',$category);

});

}

Шаг 5. Добавление маршрутов в Laravel.

Добавляем маршруты в файл routes/web.php


Route::get('add', function(){

\App\Category::create(['name'=>'test 1']);

dd('Категория добавлена');

});



Route::get('edit', function(){

\App\Category::find(1)->update(['name'=>'test change']);

dd('Категория изменена');

});



Route::get('delete', function(){

\App\Category::find(1)->delete();

dd('Категория удалена');

});

Отлично. Провеяем.

Создадим категорию, переходим <домен>/add

Добавление данных

Теперь изменим категорию, переходим <домен>/edit

Редактирование данных

И удалим категорию, переходим <домен>/delete

Удаление данных

Все отработало без ошибок. Теперь давайте откроем файл с логами и посмотрим, что у нас получилось.


[2018-02-01 10:32:17] local.INFO: Category Created: {"name":"test 1","updated_at":"2018-02-01 10:32:17","created_at":"2018-02-01 10:32:17","id":1}

[2018-02-01 10:32:22] local.INFO: Category Updated: {"id":1,"name":"test change","created_at":"2018-02-01 10:32:17","updated_at":"2018-02-01 10:32:22"}

[2018-02-01 10:32:49] local.INFO: Category Deleted: {"id":1,"name":"test change","created_at":"2018-02-01 10:32:17","updated_at":"2018-02-01 10:32:22"}

Вот, как-то так.

Заключение.

Мы с вами создали три события, которые реагируют на создание, редактировании или удалении записи. А также рассмотрели, как записывать логи в файл. Как видите создание событий (event) в Laravel простой процесс.

Понравилась статья? Поделись с друзьями.
  • Add to favorites
  • Добавить ВКонтакте заметку об этой странице
  • Twitter
  • Facebook
  • Мой Мир
  • LiveJournal
  • Одноклассники
  • Блог Я.ру
  • MySpace
  • FriendFeed
  • В закладки Google
  • Google Buzz
  • Яндекс.Закладки
  • Reddit
  • StumbleUpon
  • Technorati
  • del.icio.us
  • БобрДобр
  • LinkedIn
  • Memori.ru
  • Сто закладок
  • Blogger
©2012-2018 По всем вопросам обращайтесь через форму обратной связи

Яндекс.Метрика