Mikail.Net

Yazılımcı günlüğü

Laravel Nova Action Event

Laravel Nova, Laravel tabanlı uygulamalarınız için güçlü ve esnek bir yönetici paneli sunar. Yönetici panelleri, genellikle kullanıcıların uygulamanın verileri üzerinde çeşitli işlemler gerçekleştirdiği yerdir. Bu nedenle, kullanıcıların hangi işlemleri gerçekleştirdiğini ve ne zaman gerçekleştirdiğini izlemek önemlidir. Laravel Nova, bu tür izlemeyi sağlamak için action_events tablosunu kullanır.

Laravel Nova, kullanıcıların gerçekleştirdiği eylemleri otomatik olarak action_events tablosunda saklar. Bu tablo, kullanıcıların ne zaman ve hangi işlemleri gerçekleştirdiğini görmek için harika bir kaynaktır.

  • id: Eylemin benzersiz kimliği.
  • batch_id: Toplu işlem kimliği, aynı toplu işlemde gerçekleştirilen eylemler için kullanılır.
  • user_id: Eylemi gerçekleştiren kullanıcının kimliği.
  • name: Eylemin adı (ör. “oluşturuldu”, “güncellendi” vb.).
  • actionable_type, actionable_id: Eylemin gerçekleştirildiği modelin türü ve kimliği.
  • target_type, target_id: Eylemin hedefi olan modelin türü ve kimliği (ör. ilişkili model).
  • model_type, model_id: Eylemin gerçekleştirildiği ana modelin türü ve kimliği.
  • fields: Eylem sırasında değiştirilen alanların listesi.
  • status: Eylemin durumu (“finished”, “pending” veya “failed”).
  • exception: Eylem sırasında ortaya çıkan hataların ayrıntıları.
  • created_at, updated_at: Eylemin ne zaman oluşturulduğu ve güncellendiği tarih ve saat.

Laravel Nova’da, veritabanı tablolarını yönetmek için kaynaklar (resources) kullanılır. action_events tablosunu yönetmek için özel bir kaynak oluşturarak, bu verilere yönetici panelinde erişebilir ve bunları görüntüleyebilirsiniz.

Öncelikle, app/Nova dizini içinde Log adında bir kaynak oluşturun. Bu kaynak, action_events tablosunu temsil edecektir. Daha sonra, bu kaynak dosyasında, action_events tablosundaki alanları döndüren fields fonksiyonunu tanımlayın. Bu, yönetici panelinde bu alanları görüntüler.

// app/Nova/Log.php
<?php

namespace App\Nova;

use Laravel\Nova\Fields\ID;
use Illuminate\Http\Request;
use Laravel\Nova\Fields\Code;
use Laravel\Nova\Fields\Text;
use Laravel\Nova\Fields\DateTime;
use Laravel\Nova\Fields\BelongsTo;
use Laravel\Nova\Actions\ActionEvent;
use Laravel\Nova\Http\Requests\NovaRequest;

class Log extends Resource
{
    public static $model = ActionEvent::class;

    public static $title = 'name';

    public static $search = [
        'id', 'name', 'actionable_type', 'target_type', 'model_type',
    ];

    public function fields(Request $request)
    {
        return [
            ID::make()->sortable(),
            Text::make('Batch ID')->sortable()->hideFromIndex(),
            BelongsTo::make('User', 'user', User::class)
                ->sortable()
                ->rules('required'),
            Text::make('Name')
                ->sortable(),
            Text::make('Actionable Type')->sortable(),
            Text::make('Actionable ID')->sortable()->hideFromIndex(),
            Text::make('Target Type')->sortable()->hideFromIndex(),
            Text::make('Target ID')->sortable()->hideFromIndex(),
            Text::make('Model Type')->sortable()->hideFromIndex(),
            Text::make('Model ID')->sortable()->hideFromIndex(),
            Code::make('Fields')
                ->json()
                ->nullable()
                ->resolveUsing(function ($value) {
                    return json_encode($value);
                }),
            Text::make('Status')->sortable(),
            Code::make('Exception')
                ->json()
                ->nullable()
                ->resolveUsing(function ($value) {
                    return json_encode($value);
                }),
            DateTime::make('Created At')->sortable(),
            DateTime::make('Updated At')->sortable(),
            Code::make('Original')
                ->json()
                ->nullable()
                ->resolveUsing(function ($value) {
                    return json_encode($value);
                }),

            Code::make('Changes')
                ->json()
                ->nullable()
                ->resolveUsing(function ($value) {
                    return json_encode($value);
                }),
        ];
    }
    public static function authorizedToCreate(Request $request) {
        return false;
    }

    public function authorizedToUpdate(Request $request) {
        return false;
    }

    public function authorizedToDelete(Request $request) {
        return false;
    }
    public function authorizedToReplicate(Request $request) {
        return false;
    }
}