Gereksinimler ve Ön Hazırlık
Projeye başlamadan önce bilgisayarınızda PHP 8.3 veya üzeri bir sürümün, Composer paket yöneticisinin ve veritabanı sunucusu olarak MySQL veya PostgreSQL'in kurulu olması gerekir. Laravel'in en güncel sürümünü kullanmak, performans ve güvenlik güncellemelerinden tam yararlanmanızı sağlar.
- PHP 8.3+ ve Composer
- Laravel 11+ veya güncel sürüm
- Node.js ve NPM (Frontend varlıkları için)
- Veritabanı yönetimi için bir araç (TablePlus, DBeaver veya phpMyAdmin)
Terminalinizi açın ve yeni bir Laravel projesi oluşturmak için şu komutu çalıştırın:
composer create-project laravel/laravel is-takip-paneli
cd is-takip-paneli
php artisan serve
Bu komut, projenin temel yapısını oluşturur ve yerel bir geliştirme sunucusu başlatır. Artık tarayıcınızdan http://127.0.0.1:8000 adresine giderek kurulumu test edebilirsiniz.
Veritabanı Yapısını Oluşturma: Migration ve Model
Görev odaklı bir sistemde en önemli parça veritabanı şemasıdır. Bir "Task" (Görev) modeli, görevin başlığını, açıklamasını, durumunu (tamamlandı/bekliyor) ve son teslim tarihini içermelidir. Laravel'in Migration (Göç) özelliği, veritabanı değişikliklerini versiyon kontrolü altında tutmanızı sağlar.
Aşağıdaki komutla hem modeli hem de migration dosyasını oluşturun:
php artisan make:model Task -m
Oluşturulan migration dosyasını database/migrations/xxxx_create_tasks_table.php dizininde açın ve up metodunu aşağıdaki gibi güncelleyin:
public function up(): void
{
Schema::create('tasks', function (Blueprint $table) {
$table->id();
$table->string('title');
$table->text('description')->nullable();
$table->enum('status', ['bekliyor', 'devam-ediyor', 'tamamlandi'])->default('bekliyor');
$table->timestamp('due_date')->nullable();
$table->timestamps();
});
}
Bu yapı, veritabanı seviyesinde veri bütünlüğünü sağlar. enum kullanımı, durum alanına sadece tanımlı değerlerin girilmesini garanti eder. Değişiklikleri uygulamak için php artisan migrate komutunu çalıştırın.
Görev Yönetimi İçin Controller ve Rotalar
Controller, kullanıcıdan gelen istekleri karşılayan ve Model ile View arasındaki iletişimi sağlayan köprüdür. Görevlerin listelenmesi ve yeni görev eklenmesi için bir TaskController oluşturacağız.
php artisan make:controller TaskController
routes/web.php dosyasına görev yönetim rotalarını ekleyin:
use App\Http\Controllers\TaskController;
Route::get('/gorevler', [TaskController::class, 'index'])->name('tasks.index');
Route::post('/gorevler', [TaskController::class, 'store'])->name('tasks.store');
Rotaları tanımlamak, uygulamanın hangi URL'nin hangi fonksiyonu tetikleyeceğini bilmesini sağlar. Güvenlik için her zaman name() metodunu kullanarak rotaları isimlendirin; bu, kodunuzun sürdürülebilirliğini artırır.
Veri Girişi ve Güvenlik: Request Validasyonu
Kullanıcıdan gelen verileri asla doğrudan veritabanına kaydetmeyin. Laravel'in Form Request yapısı, verileri kaydetmeden önce doğrulamak (validate) için en güvenli yoldur. Bu, SQL Injection ve XSS (Cross-Site Scripting) saldırılarını engellemek için kritik bir adımdır.
public function store(Request $request)
{
$validated = $request->validate([
'title' => 'required|string|max:255',
'description' => 'nullable|string',
'due_date' => 'nullable|date',
]);
\App\Models\Task::create($validated);
return redirect()->route('tasks.index')->with('success', 'Görev başarıyla eklendi.');
}
validate metodu, hatalı veri girişinde kullanıcıyı otomatik olarak bir önceki sayfaya yönlendirir ve hata mesajlarını $errors değişkenine atar. Bu, kullanıcı deneyimini iyileştirirken güvenliği de sağlar.
Kritik Güvenlik Uyarısı: Kullanıcıdan alınan her türlü veri potansiyel bir tehdittir. Laravel'in Eloquent ORM yapısı, veritabanı sorgularında otomatik olarak "prepared statements" kullanarak SQL Injection saldırılarına karşı koruma sağlar. Ancak, kullanıcı tarafından girilen HTML içeriğini ekrana basarken mutlaka
{{ $task->description }}gibi Blade'in otomatik kaçış (escaping) özelliğini kullanın.
Dinamik Arayüz Tasarımı: Blade Şablonları
Blade, Laravel'in güçlü ve hafif şablon motorudur. Görevleri listelemek için resources/views/tasks/index.blade.php dosyasını oluşturun. Burada bir tablo yapısı kullanarak görevleri dinamik olarak listeleyeceğiz.
@foreach($tasks as $task)
{{ $task->title }}
{{ $task->status }}
{{ $task->due_date ? $task->due_date->format('d.m.Y') : '-' }}
@endforeach
Dinamik bir panelde, her görev için durum güncelleme butonları eklemek kullanıcı etkileşimini artırır. Blade'in @if ve @foreach direktifleri, veritabanından gelen veriyi kolayca HTML içine gömmenize olanak tanır.
Yöntem Karşılaştırması: Veri Yönetimi
| Yöntem | Avantaj | Dezavantaj |
|---|---|---|
| Eloquent ORM | Okunabilir, hızlı geliştirme, güvenli | Büyük verilerde ham sorguya göre daha yavaş |
| Query Builder | Daha yüksek performans, esnek | Daha karmaşık sözdizimi |
| Raw SQL | Maksimum kontrol | Güvenlik riskleri ve bakım zorluğu |
Sıkça Sorulan Sorular
Laravel'de görev durumunu nasıl güncellerim?
Bir PATCH rotası tanımlayarak ve Controller içerisinde $task->update(['status' => 'tamamlandi']) metodunu kullanarak güncelleyebilirsiniz.
Neden Eloquent ORM kullanmalıyım?
Eloquent, veritabanı tablolarını sınıflarla eşleştirerek SQL yazmadan veritabanı işlemleri yapmanızı sağlar. Bu da kodun okunabilirliğini ve güvenliğini artırır.
Hata ayıklama (debug) için ne kullanmalıyım?
Laravel'in dd() (dump and die) veya dump() fonksiyonlarını kullanarak değişkenlerin içeriğini anlık olarak görebilirsiniz.
Üretim ortamında (production) nelere dikkat etmeliyim?
APP_DEBUG değerini false yapmalı ve veritabanı şifrelerinizi .env dosyasında güvende tutmalısınız.
İş takip panelini nasıl daha hızlı hale getirebilirim?
Veritabanı sorgularında index kullanarak ve sık kullanılan verileri Cache mekanizması ile önbelleğe alarak performansı artırabilirsiniz.
İleri Seviye İpuçları: Görev Paneline Bildirim ve Zamanlayıcı Entegrasyonu
İş takip panelinizi profesyonel bir seviyeye taşımak için Laravel'in sunduğu "Event" ve "Notification" sistemlerini kullanabilirsiniz. Bir görev atandığında veya tamamlandığında kullanıcıya anlık bildirim göndermek, kullanıcı deneyimini ciddi oranda artırır.
Database Bildirimleri Oluşturma
Öncelikle bildirimleri veritabanında tutmak için gerekli tabloyu oluşturun:
php artisan notifications:table
php artisan migrate
Ardından bir bildirim sınıfı oluşturun:
php artisan make:notification TaskCompleted
Oluşturulan sınıf içerisinde toDatabase metodunu düzenleyerek bildirim içeriğini belirleyin:
public function toDatabase($notifiable)
{
return [
'task_id' => $this->task->id,
'message' => 'Görev başarıyla tamamlandı: ' . $this->task->title,
];
}
Performans Optimizasyonu: Eager Loading Kullanımı
İş takip panelinizde görevleri listelerken "N+1" sorgu problemiyle karşılaşmamak için Eloquent'in with() metodunu kullanmak kritiktir. Örneğin, görevleri kullanıcı bilgileriyle birlikte çekerken şu yöntemi izleyin:
// Controller içerisinde hatalı kullanım (N+1 sorunu yaratır)
$tasks = Task::all();
// Doğru kullanım (Eager Loading)
$tasks = Task::with('user')->latest()->paginate(15);
Bu yaklaşım, veritabanı sorgu sayısını minimize ederek sayfa yüklenme süresini dramatik şekilde düşürür. Özellikle binlerce görev içeren büyük ölçekli panellerde bu optimizasyon hayati önem taşır.
Görev Yönetiminde Test Süreçleri
Uygulamanızın kararlılığını korumak için Feature testleri yazmak, yeni özellik eklerken mevcut yapının bozulmadığından emin olmanızı sağlar. Laravel'in Pest veya PHPUnit kütüphanesini kullanarak bir görev oluşturma testini şu şekilde kurgulayabilirsiniz:
public function test_user_can_create_task()
{
$user = User::factory()->create();
$response = $this->actingAs($user)->post('/tasks', [
'title' => 'Yeni Görev',
'description' => 'Test açıklaması',
'status' => 'pending'
]);
$response->assertStatus(302);
$this->assertDatabaseHas('tasks', ['title' => 'Yeni Görev']);
}
Bu test, uygulamanın kritik fonksiyonlarını her kod değişikliğinden sonra otomatik olarak doğrulamanıza olanak tanır.
Deployment: Uygulamayı Yayına Alma
Geliştirme ortamından üretim ortamına geçerken Laravel'in sunduğu güvenlik komutlarını kullanmayı unutmayın. Uygulamanızın performansını artırmak ve güvenlik açıklarını kapatmak için şu komutları üretim sunucusunda çalıştırın:
php artisan config:cache
php artisan route:cache
php artisan view:cache
php artisan optimize
Ayrıca .env dosyanızdaki APP_DEBUG değerini false yaparak hata detaylarının son kullanıcıya görünmesini engelleyin. Bu, uygulamanızın güvenliği için atılması gereken en temel adımdır.
Sonuç
Bu rehberde, Laravel kullanarak nasıl görev odaklı bir iş takip paneli oluşturacağınızı adım adım inceledik. Model, Controller ve View yapısını doğru kurmak, projenizin gelecekte büyümesine ve yeni özellikler eklenmesine olanak tanır. Artık temel bir CRUD (Create, Read, Update, Delete) yapısına sahipsiniz. Bir sonraki adım olarak, kullanıcı kimlik doğrulaması (Authentication) ekleyerek her kullanıcının sadece kendi görevlerini görmesini sağlayabilir veya Livewire kullanarak sayfayı yenilemeden görev durumlarını güncelleyebilirsiniz.
Yasal Uyarı: Bu makale yazılım geliştirme eğitimi amaçlıdır. Yazılan kodların güvenliği ve sunucu üzerindeki etkileri tamamen geliştiricinin sorumluluğundadır. Üretim ortamına geçmeden önce mutlaka kapsamlı testler yapınız ve güvenlik açıklarını tarayan araçlar kullanınız.


Yorumlar (0)
Yorum Yaz