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;
}
}