Kapıları Açmak
Merhaba dostlar! Ben Uğurcan. LaraFreelancer serimizin 8. günündeyiz.
Dün verileri listeledik. Bugün ise o listenin başındaki "+ Yeni Müşteri" butonuna can vereceğiz. Kullanıcıdan veriyi alacağız, güvenlik kontrolünden (CSRF) geçireceğiz ve veritabanına yazacağız.
Hazırsanız formları doldurmaya başlayalım!
Adım 1: Rotaları Tanımlamak (Git ve Gel)
Veri ekleme işleminde iki aşama vardır:
- GET: Form sayfasını göstermek.
- POST: Formdan gelen veriyi alıp kaydetmek.
routes/web.php dosyasını açın ve ClientController altına şu rotaları ekleyin:
// Formu Gösterme Rotası (Sayfayı açar)
Route::get('/musteriler/olustur', [ClientController::class, 'create'])->name('clients.create');
// Kaydetme Rotası (Veriyi işler)
Route::post('/musteriler/kaydet', [ClientController::class, 'store'])->name('clients.store');
Adım 2: Controller Metotları
app/Http/Controllers/ClientController.php dosyasını açın. İki yeni fonksiyon ekleyeceğiz: create ve store.
// 1. Form Sayfasını Gösterir
public function create()
{
return view('clients.create');
}
// 2. Formdan Gelen Veriyi Kaydeder
public function store(Request $request)
{
// Formdan gelen tüm verileri al ve veritabanına yaz
// Not: Model dosyasında $fillable tanımlı olduğu için güvenlidir.
Client::create($request->all());
// İşlem bitince listeye geri gönder
return redirect()->route('clients.index');
}
Adım 3: Form Tasarımı ve CSRF (Çok Önemli!)
Şimdi resources/views/clients klasörü içine create.blade.php adında yeni bir dosya oluşturun.
Aşağıdaki kodda @csrf komutuna dikkat edin. Bu komut, Laravel'in "Bu veri gerçekten benim sitemden mi geliyor?" kontrolü yapmasını sağlar. Bunu yazmazsanız 419 Page Expired hatası alırsınız.
@extends('layouts.admin')
@section('title', 'Yeni Müşteri Ekle')
@section('content')
<div class="container">
<div class="card shadow">
<div class="card-header bg-primary text-white">
<h4 class="mb-0">Yeni Müşteri Oluştur</h4>
</div>
<div class="card-body">
<form action="{{ route('clients.store') }}" method="POST">
@csrf <div class="mb-3">
<label>Müşteri Adı / Firma Adı</label>
<input type="text" name="name" class="form-control" placeholder="Örn: Acme A.Ş." required>
</div>
<div class="row">
<div class="col-md-6 mb-3">
<label>E-Posta Adresi</label>
<input type="email" name="email" class="form-control" placeholder="info@acme.com" required>
</div>
<div class="col-md-6 mb-3">
<label>Telefon</label>
<input type="text" name="phone" class="form-control" placeholder="0555...">
</div>
</div>
<div class="mb-3">
<label>Bütçe (₺)</label>
<input type="number" name="budget" class="form-control" step="0.01">
</div>
<button type="submit" class="btn btn-success w-100">💾 Kaydet</button>
</form>
</div>
</div>
</div>
@endsection
Adım 4: Butonu Bağlamak
Son olarak, dünkü clients/index.blade.php sayfasındaki "+ Yeni Müşteri" butonunun href="#" kısmını güncelleyelim:
<a href="{{ route('clients.create') }}" class="btn btn-primary">+ Yeni Müşteri</a>
Artık butona basınca form açılacak, formu doldurup "Kaydet" deyince listeye geri dönecek ve en üstte yeni müşterinizi göreceksiniz!
VS Code İpucu 💡
HTML form elemanları yazarken input:text.form-control yazıp Tab tuşuna basarsanız, VS Code sizin için <input type="text" class="form-control"> kodunu tamamlar. Hız hayat kurtarır!
Adım 5: Save Point (Git Commit)
Veri giriş kapısını yaptık.
git add . git commit -m "Gün 8: Müşteri ekleme formu ve kaydetme işlemi yapıldı" git push
🎯 GÜNÜN GÖREVİ (Challenge)
Sıra sende kral!
- ProjectController içinde create ve store metotlarını yaz.
- projects/create.blade.php dosyasını oluştur.
- Proje formunda şu alanlar olsun:
- Proje Adı (Input Text)
- Açıklama (Textarea)
- Durum (Select Box: Bekliyor, Devam Ediyor, Bitti)
- Formu doldurup kaydettiğinde Proje Listesine yönlensin.
- Kanıt: Eklediğin projenin listede göründüğü ekran görüntüsünü veya kodlarını paylaş!