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');
}
};
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.
