Beni Takip Edebilirsin
Laravel Route Model Binding
Laravel kullanan hepimizin bilmesini düşündüğüm bir özellikten sizlere bahsetmek istiyorum.
Örnegin bir blog sitesi yazdığımızı düşünelim Bu site içerisinde blogların detaylarını blogId ile aldığımızı var sayalım.
Şimdi bunun için Routes/Web.php dosyasına;
Route::get('/{blogId}','indexController@index');
Ekliyoruz, ve indexController.php dosyamıza ise ;
<?php
namespace App\\Http\\Controllers;
use App\\Blog;
use App\\Http\\Controllers\\Controller;
use App\\Http\\Requests\\ContactRequest;
use Illuminate\\Http\\Request;
class indexController extends Controller
{
public function index($blogId){
dd($blogId);
}
}
Şeklinde tanımlıyoruz.Eğerki tarayıcımızdan http://127.0.0.1:8000/1 diye yazacak olursak ekrana "1" yazdığını görücez buda bizim blog yazımızın id si olacaktır.Bu blog yazısının veritabanında olup olmadığını nasıl kontrol edebiliriz?
$blog = Blog::findOrFail($blogId);
Yazarak bu yazının gerçekten veritabanında olduğunu görebiliriz eğerki veri var ise verimiz dönecektir yoksa 404 hatası verecektir.
Burada yapmak istediğimiz olay şu blogId sini almadan Route çağrımından direk model ile ilişkilendirme kurup ekrana blog detayını koymak.
Öncelikle App\Blog.php de eğerki protected protected $primaryKey = 'id'; düzenlememiz gerekiyorsa yani baglanacağı id yi belirtmemiz gerekiyorsa belirtiyoruz.Eğerki sizde blog tablosunda id olarak tanımlı ise gerek yok.
Routes/Web.php yi açıyoruz ve düzenliyoruz.
Route::get('/{blog}','indexController@index');
Çok güzel sıra geldi controller dosyamızı düzenlemek.
public function index(Blog $blog){
dd($blog);
}
Şeklinde tanımladığımız zaman artık hangi id yi girersek girelim otomatik olarak o blog verisini bize döndürücektir.Denemesi Bedava :)
Yorumlar: