Laravel 10 CRUD Uygulama Örneği Eğitimi

L

Bugün, size Laravel 10'da CRUD (Create, Read, Update, Delete) işlemlerinin bir örneğini vereceğim. Bu örnekte Laravel 10 CRUD uygulaması nasıl oluşturulur öğreneceksiniz. Laravel 10 CRUD uygulamasını başlangıç seviyesindeki kullanıcılar için kullanacağız. Laravel 10'da CRUD oluşturma konusunda basit bir örnek vereceğiz. Şimdi adımlara geçelim.

CRUD Anlamı: CRUD, bilgisayar programlaması dünyasından gelen ve uygulamanızda kalıcı depolamayı uygulamak için gerekli kabul edilen dört işlevi temsil eden bir kısaltmadır: oluşturma (create), okuma (read), güncelleme (update) ve silme (delete).

Bu örnekte, Laravel 10 kullanarak bir ürün CRUD uygulaması oluşturacağız. Laravel 10 migration kullanarak adı ve detay sütunlarına sahip bir "products" tablosu oluşturacağız, ardından ürün modülü için route (yol), controller (denetleyici), view (görünüm) ve model dosyaları oluşturacağız. Şu anda tasarım için Bootstrap 5 kullanacağız. O halde Laravel 10 ile CRUD işlemi oluşturmak için aşağıdaki adımları takip edelim.

Adım 1: Laravel 10 Uygulamasını Kurun

Eğitime yeni bir laravel 10 uygulaması yükleyerek başlayalım. Eğer zaten projeyi oluşturduysanız, aşağıdaki adımı atlayın.  

composer create-project laravel/laravel example-app

Adım 2: Veritabanı Yapılandırması

İkinci adımda, veritabanı yapılandırması yapacağız. Veritabanı adını, MySQL kullanıcı adını ve şifresini eklememiz gerekiyor. .env dosyasını açın ve aşağıdaki gibi tüm detayları doldurun:

.env

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=buraya veritabanı adınızı yazın(blog)
DB_USERNAME=buraya veritabanı kullanıcı adınızı yazın(root)
DB_PASSWORD=buraya veritabanı şifrenizi yazın(root)

Adım 3: Migration Oluşturma

Burada, Laravel migration kullanarak "products" tablosunu oluşturacağız. Aşağıdaki komutu kullanarak bir migration dosyası oluşturmak için aşağıdaki komutu kullanalım.

php artisan make:migration create_products_table --create=products

Bu komutu çalıştırdıktan sonra, "database/migrations" yolunda bir dosya bulacaksınız ve aşağıdaki kodu migration dosyanıza eklemelisiniz:

<?php
  
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
  
return new class extends Migration
{
    /**
     * Tabloyu oluşturmak için migration'ı çalıştır.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('products', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->text('detail');
            $table->timestamps();
        });
    }
  
    /**
     * Migration'ı geri almak için.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('products');
    }
};
Bu migration'ı çalıştırmak için aşağıdaki komutu kullanmalısınız:
php artisan migrate

Adım 4: Controller ve Model Oluşturma

Bu adımda, ProductController olarak adlandırdığımız yeni bir kaynak (resource) controller oluşturmalıyız. Aşağıdaki komutu çalıştırarak yeni bir controller oluşturalım:

php artisan make:controller ProductController --resource --model=Product

Bu komutu çalıştırdıktan sonra, "app/Http/Controllers/ProductController.php" yolunda yeni bir dosya bulacaksınız. Bu controller'da aşağıdaki yöntemleri (methods) varsayılan olarak oluşturacağız:

1) index()

2) create()

3) store()

4) show()

5) edit() 

6)update()

7)destroy()

Bu yöntemler, CRUD (Create, Read, Update, Delete) işlemlerini gerçekleştirmek için kullanılır. Oluşturduğumuz "ProductController" sınıfı aşağıdaki gibi olacaktır:

<?php

namespace App\Http\Controllers;

use App\Models\Product;
use Illuminate\Http\Request;

class ProductController extends Controller
{
    /**
     * Ürünleri listeleme.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        $products = Product::latest()->paginate(5);
  
        return view('products.index', compact('products'))
            ->with('i', (request()->input('page', 1) - 1) * 5);
    }
  
    /**
     * Yeni bir ürün oluşturma formu.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        return view('products.create');
    }
  
    /**
     * Yeni bir ürün oluşturma.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        $request->validate([
            'name' => 'required',
            'detail' => 'required',
        ]);
  
        Product::create($request->all());
  
        return redirect()->route('products.index')
            ->with('success', 'Ürün başarıyla oluşturuldu.');
    }
  
    /**
     * Belirli bir ürünü gösterme.
     *
     * @param  \App\Models\Product  $product
     * @return \Illuminate\Http\Response
     */
    public function show(Product $product)
    {
        return view('products.show', compact('product'));
    }
  
    /**
     * Bir ürünü düzenleme formu.
     *
     * @param  \App\Models\Product  $product
     * @return \Illuminate\Http\Response
     */
    public function edit(Product $product)
    {
        return view('products.edit', compact('product'));
    }
  
    /**
     * Bir ürünü güncelleme.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \App\Models\Product  $product
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, Product $product)
    {
        $request->validate([
            'name' => 'required',
            'detail' => 'required',
        ]);
  
        $product->update($request->all());
  
        return redirect()->route('products.index')
            ->with('success', 'Ürün başarıyla güncellendi.');
    }
  
    /**
     * Bir ürünü silme.
     *
     * @param  \App\Models\Product  $product
     * @return \Illuminate\Http\Response
     */
    public function destroy(Product $product)
    {
        $product->delete();
  
        return redirect()->route('products.index')
            ->with('success', 'Ürün başarıyla silindi.');
    }
}

Adım 5: Rotaların Tanımlanması

Sonraki adımda, oluşturduğumuz CRUD işlemlerini yönlendirmek için rotaları tanımlamamız gerekiyor. "routes/web.php" dosyasını açın ve aşağıdaki rotaları tanımlayın:

<?php

use Illuminate\Support\Facades\Route;
use App\Http\Controllers\ProductController;

Route::get('/products', [ProductController::class, 'index'])
    ->name('products.index');

Route::get('/products/create', [ProductController::class, 'create'])
    ->name('products.create');

Route::post('/products', [ProductController::class, 'store'])
    ->name('products.store');

Route::get('/products/{product}', [ProductController::class, 'show'])
    ->name('products.show');

Route::get('/products/{product}/edit', [ProductController::class, 'edit'])
    ->name('products.edit');

Route::put('/products/{product}', [ProductController::class, 'update'])
    ->name('products.update');

Route::delete('/products/{product}', [ProductController::class, 'destroy'])
    ->name('products.destroy');

Bu rotalar, ilgili işlevleri "ProductController" sınıfındaki ilgili yöntemlerle eşleştirir. Örneğin, /products rotası index() yöntemini, /products/create rotası create() yöntemini vb. çağırır.

Bu adımdan sonra, artık CRUD işlemlerini gerçekleştirmek için ilgili URL'leri kullanabilirsiniz.

Bu örnekte, /products URL'si tüm ürünleri listelerken, /products/create URL'si yeni bir ürün oluşturma formunu gösterir. Ayrıca /products/{product} URL'si belirli bir ürünü gösterirken, /products/{product}/edit URL'si bir ürünü düzenleme formunu gösterir.

Not: Yukarıdaki örnekte, rotaları GET, POST, PUT ve DELETE HTTP yöntemlerine göre tanımladık. Bu yöntemleri uygun şekilde değiştirebilirsiniz, özellikle PUT ve DELETE yöntemlerini kullanmanın zor olduğu durumlarda.

Adım 6: Kullanıcı Arayüzünün Oluşturulması

CRUD işlemlerini gerçekleştirebilmek için kullanıcı arayüzünü oluşturmanız gerekecektir. Laravel, Blade adlı bir şablon motoru kullanarak kullanıcı arayüzünü oluşturmanıza olanak sağlar.

resources/views dizininde products adlı bir dizin oluşturun. Bu dizin içinde aşağıdaki Blade şablon dosyalarını oluşturun:

  • index.blade.php: Tüm ürünleri listeleyen bir sayfa.
  • create.blade.php: Yeni ürün oluşturma formunu gösteren bir sayfa.
  • edit.blade.php: Bir ürünü düzenleme formunu gösteren bir sayfa.
  • show.blade.php: Bir ürünün ayrıntılarını gösteren bir sayfa.

Örnek olarak, index.blade.php şablon dosyasının içeriği aşağıdaki gibi olabilir:

<!DOCTYPE html>
<html>
<head>
    <title>Ürünler</title>
</head>
<body>
    <h1>Ürünler</h1>
    <a href="{{ route('products.create') }}">Yeni Ürün Ekle</a>
    <table>
        <thead>
            <tr>
                <th>ID</th>
                <th>Ad</th>
                <th>Açıklama</th>
                <th>Fiyat</th>
                <th>İşlemler</th>
            </tr>
        </thead>
        <tbody>
            @foreach($products as $product)
            <tr>
                <td>{{ $product->id }}</td>
                <td>{{ $product->name }}</td>
                <td>{{ $product->description }}</td>
                <td>{{ $product->price }}</td>
                <td>
                    <a href="{{ route('products.show', $product->id) }}">Göster</a>
                    <a href="{{ route('products.edit', $product->id) }}">Düzenle</a>
                    <form action="{{ route('products.destroy', $product->id) }}" method="POST">
                        @csrf
                        @method('DELETE')
                        <button type="submit">Sil</button>
                    </form>
                </td>
            </tr>
            @endforeach
        </tbody>
    </table>
</body>
</html>

Örnek olarak, create.blade.php şablon dosyasının içeriği aşağıdaki gibi olabilir:

<!DOCTYPE html>
<html>
<head>
    <title>Yeni Ürün Oluştur</title>
</head>
<body>
    <h1>Yeni Ürün Oluştur</h1>
    <form action="{{ route('products.store') }}" method="POST">
        @csrf
        <div>
            <label for="name">Ürün Adı:</label>
            <input type="text" id="name" name="name" required>
        </div>
        <div>
            <label for="description">Açıklama:</label>
            <textarea id="description" name="description" required></textarea>
        </div>
        <div>
            <label for="price">Fiyat:</label>
            <input type="number" id="price" name="price" required>
        </div>
        <button type="submit">Kaydet</button>
    </form>
</body>
</html>

Örnek olarak, edit.blade.php şablon dosyasının içeriği aşağıdaki gibi olabilir:

<!DOCTYPE html>
<html>
<head>
    <title>Ürünü Düzenle</title>
</head>
<body>
    <h1>Ürünü Düzenle</h1>
    <form action="{{ route('products.update', $product->id) }}" method="POST">
        @csrf
        @method('PUT')
        <div>
            <label for="name">Ürün Adı:</label>
            <input type="text" id="name" name="name" value="{{ $product->name }}" required>
        </div>
        <div>
            <label for="description">Açıklama:</label>
            <textarea id="description" name="description" required>{{ $product->description }}</textarea>
        </div>
        <div>
            <label for="price">Fiyat:</label>
            <input type="number" id="price" name="price" value="{{ $product->price }}" required>
        </div>
        <button type="submit">Güncelle</button>
    </form>
</body>
</html>

Örnek olarak, show.blade.php şablon dosyasının içeriği aşağıdaki gibi olabilir:

<!DOCTYPE html>
<html>
<head>
    <title>Ürün Detayları</title>
</head>
<body>
    <h1>Ürün Detayları</h1>
    <div>
        <strong>ID:</strong> {{ $product->id }}
    </div>
    <div>
        <strong>Ad:</strong> {{ $product->name }}
    </div>
    <div>
        <strong>Açıklama:</strong> {{ $product->description }}
    </div>
    <div>
        <strong>Fiyat:</strong> {{ $product->price }}
    </div>
    <a href="{{ route('products.edit', $product->id) }}">Düzenle</a>
</body>
</html>

Yukarıdaki örneklerde, index.blade.php ürünleri listeleyen bir sayfa, create.blade.php yeni ürün oluşturma formunu gösteren bir sayfa, edit.blade.php bir ürünü düzenleme formunu gösteren bir sayfa ve show.blade.php bir ürünün ayrıntılarını gösteren bir sayfa olarak kullanılabilir.

Bu şablonları resources/views/products dizininde oluşturarak kullanabilirsiniz.

 

By Aydın Yağız

Aydın Yağız

Teknolojiye olan tutkumla inovasyonu destekler, kullanıcı deneyimini önceliklerim arasına alırım. Kendi yeteneklerimi ve bilgilerimi paylaşarak, daha geniş bir topluluğun faydalanmasını sağlarım. İş birliği içinde hareket ederek, geleceğin teknoloji dünyasına katkıda bulunmayı hedeflerim. Sizi de bu heyecan verici yolculuğa davet ediyor, fikirlerinizi paylaşmaya ve teknolojiye dair sınırları zorlamaya teşvik ediyorum. Birlikte büyüyelim ve yeni ufuklara açılalım!

İletişime Geçin

Kodlama dünyasına adım atın ve deneyimlerinizi paylaşın. Siz de bu aktif topluluğa katılarak yeni bağlantılar kurun, fikir alışverişinde bulunun ve bilgi birikiminizi artırın.

Özelleştir

Farklı yazı tipleri ve renk seçenekleriyle stilinizi kişiselleştirin. Aşağıdaki örneklerden birini deneyerek sizin için en uygun olanı seçin.

Yazı Tipi Örnekleri

Renk Örnekleri