Eğitim Serisi 31 Jan 2026 5 dk

Laravel Veri Güncelleme: Edit Formu ve Update İşlemi (Gün 10)

Author
CyberDirtyCat
Full Stack Developer
Laravel Veri Güncelleme: Edit Formu ve Update İşlemi (Gün 10)

 İkinci Şans

Merhaba dostlar! Ben Uğurcan. LaraFreelancer serimizin 10. günündeyiz.

Dün verileri kaydettik. Peki ya müşterimiz "Telefon numaram değişti" derse? Ya da yanlışlıkla bütçeyi 5000 yerine 500 yazdıysak? Veritabanına girip elle düzeltmek yok!

Bugün, mevcut veriyi alıp bir forma dolduracağız, değiştireceğiz ve Update (Güncelleme) işlemiyle tekrar kaydedeceğiz.

Adım 1: Akıllı Rotalar (Route Model Binding)

Önce rotalarımızı tanımlayalım. Burada Laravel'in harika bir özelliğini kullanacağız: Route Model Binding.

URL'de gelen ID'yi (/musteriler/5/duzenle) otomatik olarak veritabanındaki Müşteri ile eşleştireceğiz.

routes/web.php dosyasını açın:

// Düzenleme Sayfası (Formu dolu getirir)
Route::get('/musteriler/{client}/duzenle', [ClientController::class, 'edit'])->name('clients.edit');

// Güncelleme İşlemi (Veriyi işler)
Route::put('/musteriler/{client}', [ClientController::class, 'update'])->name('clients.update');

Adım 2: Controller - Veriyi Bulmak

ClientController.php dosyasını açın. edit ve update metotlarını ekleyelim. Laravel, fonksiyona (Client $client) yazdığımız anda gidip o ID'ye sahip müşteriyi bizim için buluyor. Client::find($id) yazmamıza gerek kalmıyor!

// 1. Düzenleme formunu aç
public function edit(Client $client)
{
    // Müşteri verisini 'edit' sayfasına gönder
    return view('clients.edit', compact('client'));
}

// 2. Değişiklikleri kaydet
public function update(Request $request, Client $client)
{
    // Doğrulama (Validation)
    $validatedData = $request->validate([
        'name'   => 'required|min:3',
        // Önemli: E-posta kontrolünde, kendi e-postasını hariç tutmalıyız yoksa "zaten kayıtlı" hatası verir.
        'email'  => 'required|email|unique:clients,email,' . $client->id,
        'phone'  => 'nullable|numeric',
        'budget' => 'nullable|numeric'
    ]);

    // Güncelle
    $client->update($validatedData);

    return redirect()->route('clients.index');
}

Adım 3: Edit Formu (Method Spoofing)

Şimdi resources/views/clients klasörüne edit.blade.php dosyasını oluşturun. Dünkü create.blade.php kodlarını kopyalayıp buraya yapıştırın. Üzerinde 3 kritik değişiklik yapacağız:

  1. Form Action: Güncelleme rotasına gidecek.
  2. Method PUT: HTML formları PUT desteklemediği için @method('PUT') kullanacağız.
  3. Value: Inputların içi boş gelmeyecek, veritabanındaki veriyle dolu gelecek.
@extends('layouts.admin')

@section('title', 'Müşteriyi Düzenle')

@section('content')
<div class="container">
    <div class="card shadow">
        <div class="card-header bg-warning text-dark">
            <h4 class="mb-0">Müşteriyi Düzenle: {{ $client->name }}</h4>
        </div>
        <div class="card-body">
            
            <form action="{{ route('clients.update', $client->id) }}" method="POST">
                @csrf 
                @method('PUT') <div class="mb-3">
                    <label>Müşteri Adı</label>
                    <input type="text" name="name" class="form-control" 
                           value="{{ old('name', $client->name) }}" required>
                </div>

                <div class="row">
                    <div class="col-md-6 mb-3">
                        <label>E-Posta</label>
                        <input type="email" name="email" class="form-control" 
                               value="{{ old('email', $client->email) }}" required>
                    </div>
                    <div class="col-md-6 mb-3">
                        <label>Telefon</label>
                        <input type="text" name="phone" class="form-control" 
                               value="{{ old('phone', $client->phone) }}">
                    </div>
                </div>

                <div class="mb-3">
                    <label>Bütçe</label>
                    <input type="number" name="budget" class="form-control" step="0.01"
                           value="{{ old('budget', $client->budget) }}">
                </div>

                <button type="submit" class="btn btn-warning w-100">🔄 Güncelle</button>
            </form>

        </div>
    </div>
</div>
@endsection

Adım 4: Listeden Link Vermek

Son olarak index.blade.php dosyasındaki "Düzenle" butonunu aktif edelim:

<a href="{{ route('clients.edit', $client->id) }}" class="btn btn-sm btn-info text-white">Düzenle</a>

Artık listeden "Düzenle"ye basınca form dolu geliyor, değiştirip "Güncelle" deyince veritabanı güncelleniyor. İşte bu kadar!

VS Code İpucu 💡

Kodun içinde bir fonksiyonun ne işe yaradığını mı unuttunuz? (Örn: unique)

  • Windows: Ctrl tuşuna basılı tutarak fonksiyona tıklayın.
  • Mac: Cmd tuşuna basılı tutarak tıklayın. VS Code sizi o fonksiyonun tanımlandığı Laravel çekirdek dosyasına götürür. Kaynağı görmek en iyi öğrenme yöntemidir!

Adım 5: Save Point (Git Commit)

CRUD'un U harfi de tamam.

git add .
git commit -m "Gün 10: Müşteri düzenleme ve güncelleme işlemleri yapıldı"
git push

🎯 GÜNÜN GÖREVİ (Challenge)

Kopyala yapıştır yapmak kolay, peki ya uyarlamak?

  1. ProjectController için edit ve update metotlarını yaz.
  2. projects/edit.blade.php dosyasını oluştur.
  3. Proje durumunu (status) güncellemek için bir <select> kutusu kullan.
    • İpucu: Seçili olanı getirmek için: {{ $project->status == 'bekliyor' ? 'selected' : '' }} yapısını kullan.
  4. Çalışan formun ekran görüntüsünü yorumlara at!


Bu Teknolojiyle Projenizi Uçuralım

Yazıda bahsettiğim yöntemleri projenize entegre etmek ister misiniz? Profesyonel destek alın.

Teklif Al
#Backend Dersleri #Laravel Update #Edit Formu #Route Model Binding #Method Spoofing #CRUD

Yorumlar (0)

Düşüncelerini Paylaş

Henüz yorum yapılmamış.