Laravel Nova, Laravel framework’ü üzerine inşa edilmiş güçlü bir yönetim paneli aracıdır. Nova’nın en önemli özelliklerinden biri de “Resources” (Kaynaklar) konseptidir. Bu blog yazısında, Nova Resources’ın ne olduğunu, nasıl oluşturulduğunu ve özelleştirilebildiğini detaylı bir şekilde inceleyeceğiz.
- Nova Resources Nedir?
Nova Resources, veritabanı tablolarınızı yönetim panelinizde temsil eden PHP sınıflarıdır. Her bir Resource, bir Eloquent modeliyle ilişkilidir ve bu modelin nasıl görüntüleneceğini, düzenleneceğini ve yönetileceğini tanımlar.
- Nova Resource Oluşturma
Bir Nova Resource oluşturmak için, Laravel’in Artisan komut satırı aracını kullanabilirsiniz:
php artisan nova:resource Post
Bu komut, app/Nova
dizininde Post
adında bir Resource sınıfı oluşturacaktır. İşte basit bir Resource sınıfının yapısı:
<?php
namespace App\Nova;
use Laravel\Nova\Fields\ID;
use Laravel\Nova\Fields\Text;
use Laravel\Nova\Fields\Textarea;
use Laravel\Nova\Http\Requests\NovaRequest;
class Post extends Resource
{
public static $model = \App\Models\Post::class;
public static $title = 'title';
public static $search = [
'id', 'title', 'content',
];
public function fields(NovaRequest $request)
{
return [
ID::make()->sortable(),
Text::make('Title'),
Textarea::make('Content'),
];
}
}
- Fields (Alanlar)
Nova Resource’ın en önemli bölümü fields
metodudur. Bu metot, resource’un hangi alanları görüntüleyeceğini ve düzenleyeceğini tanımlar.
Nova, çeşitli alan türleri sunar:
- Text
- Textarea
- Boolean
- Number
- Date
- DateTime
- Select
- BelongsTo
- HasMany
- ve daha fazlası…
Örnek olarak, daha karmaşık bir Post resource’u oluşturalım:
public function fields(NovaRequest $request)
{
return [
ID::make()->sortable(),
Text::make('Title')
->sortable()
->rules('required', 'max:255'),
Textarea::make('Content')
->rules('required'),
DateTime::make('Published At')
->sortable()
->nullable(),
Boolean::make('Is Featured')
->sortable(),
BelongsTo::make('Author', 'author', User::class),
HasMany::make('Comments'),
];
}
- Resource Özelleştirme
Nova Resources’ı çeşitli şekillerde özelleştirebilirsiniz:
a. İndeks Görünümü Özelleştirme:
public static function indexQuery(NovaRequest $request, $query)
{
return $query->where('is_published', true);
}
b. Kaynak Gruplaması:
public static $group = 'Blog';
c. Politikalar:
public static function authorizedToCreate(Request $request)
{
return $request->user()->isAdmin();
}
d. Özel Aksiyonlar:
public function actions(NovaRequest $request)
{
return [
new PublishPost,
];
}
- Filtreler ve Lensler
Nova, verileri filtrelemek ve özel görünümler oluşturmak için Filtreler ve Lensler sunar.
Filtre örneği:
<?php
namespace App\Nova\Filters;
use Laravel\Nova\Filters\Filter;
use Laravel\Nova\Http\Requests\NovaRequest;
class PostStatus extends Filter
{
public function apply(NovaRequest $request, $query, $value)
{
return $query->where('status', $value);
}
public function options(NovaRequest $request)
{
return [
'Published' => 'published',
'Draft' => 'draft',
];
}
}
Lens örneği:
<?php
namespace App\Nova\Lenses;
use Laravel\Nova\Fields\ID;
use Laravel\Nova\Fields\Text;
use Laravel\Nova\Lenses\Lens;
use Laravel\Nova\Http\Requests\NovaRequest;
class MostCommentedPosts extends Lens
{
public function query(NovaRequest $request, $query)
{
return $query
->withCount('comments')
->orderBy('comments_count', 'desc');
}
public function fields(NovaRequest $request)
{
return [
ID::make()->sortable(),
Text::make('Title'),
Text::make('Comments', 'comments_count'),
];
}
}
- Metrikler
Nova, verileri görselleştirmek için metrikler sunar:
<?php
namespace App\Nova\Metrics;
use App\Models\Post;
use Laravel\Nova\Metrics\Value;
use Laravel\Nova\Http\Requests\NovaRequest;
class NewPosts extends Value
{
public function calculate(NovaRequest $request)
{
return $this->count($request, Post::class);
}
public function ranges()
{
return [
30 => '30 Days',
60 => '60 Days',
365 => '365 Days',
'TODAY' => 'Today',
'MTD' => 'Month To Date',
'QTD' => 'Quarter To Date',
'YTD' => 'Year To Date',
];
}
}
Sonuç
Laravel Nova Resources, veritabanı yönetimini kolaylaştıran güçlü bir araçtır. Eloquent modellerinizi hızlı ve etkili bir şekilde yönetmenizi sağlar. Özelleştirme seçenekleri, filtreler, lensler ve metrikler ile Nova, karmaşık yönetim panelleri oluşturmanıza olanak tanır.
Nova’nın sunduğu bu özellikler sayesinde, geliştiriciler CRUD (Create, Read, Update, Delete) işlemlerini hızlı bir şekilde gerçekleştirebilir ve zamanlarını daha karmaşık iş mantığı geliştirmeye ayırabilirler.
Nova Resources’ı kullanmaya başladığınızda, veritabanı yönetiminin ne kadar kolaylaştığını ve uygulamanızın yönetim tarafının ne kadar hızlı geliştirilebileceğini göreceksiniz. Laravel Nova, modern web uygulamaları geliştirme sürecini önemli ölçüde hızlandıran ve kolaylaştıran bir araç olarak öne çıkmaktadır.
Bu yazıda Laravel Nova Resources’ın temellerini, nasıl oluşturulduğunu ve özelleştirildiğini gördük. Daha ileri düzey kullanımlar için Nova’nın resmi dokümantasyonunu incelemenizi öneririm. Nova ile çalışırken, ihtiyaçlarınıza göre daha fazla özelleştirme ve optimizasyon yapabilirsiniz.
İlk Yorumu Siz Yapın