Использование событий моделей в Laravel 8
Модели в Laravel 8 позволяют улучшить архитектуру приложения и сделать код более гибким и понятным. В статье рассмотрены основные принципы использования событий моделей для эффективного управления бизнес-логикой.
Вы познакомитесь с ключевыми особенностями Laravel 8 и узнаете, как интегрировать события моделей для упрощения обработки различных операций в приложении. Это поможет вам повысить производительность и упростить процесс разработки.
Создаем модель с помощью событий
Сначала создадим файл Product.php, расположим его по адресу app/Models/Product.php и добавим в него следующий код:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Log;
use Str;
class Product extends Model
{
use HasFactory;
protected $fillable = [
'name', 'slug', 'detail'
];
/**
* Создание кода для метода
*
* @возвращение ответа()
*/
public static function boot() {
parent::boot();
/**
* Создание кода для метода
*
* @возвращение ответа()
*/
static::creating(function($item) {
Log::info('Creating event call: '.$item);
$item->slug = Str::slug($item->name);
});
/**
* Создание кода для метода
*
* @возвращение ответа()
*/
static::created(function($item) {
/*
Код метода
*/
Log::info('Created event call: '.$item);
});
/**
* Создание кода для метода
*
* @возвращение ответа()
*/
static::updating(function($item) {
Log::info('Updating event call: '.$item);
$item->slug = Str::slug($item->name);
});
/**
* Создание кода для метода
*
* @возвращение ответа()
*/
static::updated(function($item) {
/*
Код метода
*/
Log::info('Updated event call: '.$item);
});
/**
* Создание кода для метода
*
* @возвращение ответа()
*/
static::deleted(function($item) {
Log::info('Deleted event call: '.$item);
});
}
}
Здесь мы просто вызываем методы модели один за другим и получаем ответы.
Создание записи с использованием событий creating и created
Откройте для редактирования файл контроллера ProductController.php, расположенный по адресу app/Http/Controllers/ProductController.php и добавьте в него следующий код:
<?php
namespace App\Http\Controllers;
use App\Models\Product;
use Illuminate\Http\Request;
class ProductController extends Controller
{
/**
* Вывод листинга ресурса.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
Product::create([
'name' => 'silver',
'detail' => 'This is silver'
]);
dd('done');
}
}
Результат выполнения кода в лог-файле выглядит следующим образом:
[2020-10-20 14:39:04] local.INFO: Updating event call: {"id":5,"name":"silver updated","detail":"This is silver","created_at":"2020-10-20T14:37:26.000000Z","updated_at":"2020-10-20T14:37:26.000000Z","slug":"silver"}
[2020-10-20 14:39:04] local.INFO: Updated event call: {"id":5,"name":"silver updated","detail":"This is silver","created_at":"2020-10-20T14:37:26.000000Z","updated_at":"2020-10-20T14:39:04.000000Z","slug":"silver-updated"}
Удаление записи с применением события deleted
Приведенный ниже код нужно вставить в файл контроллера ProductController.php, расположенный по адресу app/Http/Controllers/ProductController.php:
<?php
namespace App\Http\Controllers;
use App\Models\Product;
use Illuminate\Http\Request;
class ProductController extends Controller
{
/**
* Вывод листинга ресурса.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
Product::find(5)->delete();
dd('done');
}
}
Результат исполнения этого кода в лог-файле выглядит следующим образом:
[2020-10-21 03:14:45] local.INFO: Deleted event call: {"id":5,"name":"silver updated","detail":"This is silver","created_at":"2020-10-20T14:37:26.000000Z","updated_at":"2020-10-20T14:39:04.000000Z","slug":"silver-updated"}Надеюсь, статья вам пригодилась. Возможно, вас также заинтересует руководство по назначению ролей и прав пользователей в Laravel 8.
Комментарии