Использование событий моделей в 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.

Наталья Кайдаавтор-переводчик статьи «How to use Model Events in Laravel 8?»

Комментарии

Оставьте свой комментарий
Пока никто не оставил комментариев