@Volkan,
Laravel'in RESTful, resourceful terimlerini biraz karıştırdığını kabul etmeliyiz. Bununla birlikte Laravel 4'de RESTful Controllerler Route::controller metodu ile, Resource Controllerler ise Route::resource metodu ile ilişkilendirilmiştir. İlginç olarak php artisan controller:make komutu RESTFul controller değil Resource Controller iskelesi oluşturmaktadır.
Route::controller ile Route::resource fonksiyonlarının davranış biçimleri farklıdır. İlkinde yeni rotalar oluşturmak için metoda parametre olarak geçilen Controller'in içine bakılırken, diğerinde böyle yapılmadan rotalar oluşturulur.
Routes.php'de Route::controller('kokrota', 'RestbirController'); deyince RestbirController'in yöneteceği temel URI kokrota olur. Controllerde getIndex adında bir metod bunun için çalışmalıdır. Route::controller metodu doğrudan bir rota tanımı değildir. Örneğimizde bu metod, RestbirController'in içine bakar, orada HTTP verbleriyle başlayan tüm metodları araştırır, bulduklarını metod ismini biri HTTP verb adı olmak üzere ikiye bölerek ve birincisini rota tanımının HTTP verbi olarak kullanıp bölüğün ikinci kısmını temel uriye ekleyerek yeni rotalar oluşturur ve bunları rota koleksiyonuna ekler. Eğer metodlarda parametre varsa onlar da rota tanımına rota parametresi olarak eklenir. Örneğin RestbirController'in içinde getIndex, getBir, postIki, putDort, deleteBes adında metodlar varsa ve putDort ve deleteBes metodlarında birer $id parametresi varsa şu rotalar eklenir
Route::get('kokrota', 'RestbirController@getIndex');
Route::get('kokrota/bir', 'RestbirController@getBir');
Route::post('kokrota/iki', 'RestbirController@postIki');
Route::put('kokrota/dort/{id}', 'RestbirController@putDort');
Route::delete('kokrota/bes/{id}', 'RestbirController@deleteBes');
Route::resource fonksiyonu, ilgili Controller'de temel veritabanı işlemleri (göster, ekle, düzenle ve sil) ile ilgili toplam 7 eylem olmasını bekleyerek, (ilgili controller gerçekten mevcut olmasa bile) eylemlerin her biri için bir rotayı rota koleksiyonuna ekler. Metodun üçüncü parametresinde geçilen dizinin only veya except elemanlarına göre bu yedi rotadan sadece bir kısmının oluşturulmasını sağlamak mümkündür.
Veritabanı işlemleri 4 tane olduğu halde, yeni kayıt ekleme ve düzenleme işlemleri için kullanıcıların girdi yapmalarını sağlayan birer get metodları da gerektiği için 2 eylem, ayrıca birden çok kaydı göstermek için de 1 eylem daha olmak üzere toplam 7 controller eylemi beklenmektedir.
İlgili controller için hazır bir iskele php artisan controller:make komutu ile oluşturulabilmektedir.
Anlaşılacağı üzere Route::resource metodu ile oluşturulan rota isimleri ve yapısı ön tanımlıdır. Siz farklı bir yapı oluşturmak istiyorsanız başka bir şey kullanmalısınız.
Route::resource('subcategory', 'SubCategoryController'); metodu ile oluşturulan 7 rota şunlardır:
Verb Path Action Rota Adı
GET /subcategory index subcategory.index (Tüm kayıtları göstermek için)
GET /subcategory/create create subcategory.create (Yeni kayıt oluştur göstermek için)
POST /subcategory store subcategory.store (Bu yeni kaydı kaydetmek için)
GET /subcategory/{id} show subcategory.show (Belirli bir kaydı göstermek için)
GET /subcategory/{id}/edit edit subcategory.edit (Belirli bir kaydın düzenlemesini göstermek için)
PUT /subcategory/{id} update subcategory.update (Düzenlenen belirli bir kaydı kaydetmek için)
DELETE /subcategory/{id} destroy subcategory.destroy (Belirli bir kaydı silmek için)
Tüm kayıtları göstermek için bir id belirtmeye gerek olmadığı gibi, yeni kayıt oluştururken de gerek oluşturma formunu göstermek, gerek girilen verileri kaydetmek için bir id belirtilmesine gerek olmadığı açıktır. Bu yüzden sizin index, create ve store için id beklemeniz uygun bir yaklaşım değildir.