2014-06-24 28 views
5

Laravel projemde RESTful controllers kullanıyorum. dahil ederek: my routes.php içindeModel bağlamayı RESTful denetleyicileriyle birlikte kullanılabilir mi?

Route::controller('things', 'ThingController') 

, içeri fonksiyonlar tespit ThingController gibi: URL alma" ... işler/ekran/1" otomatik olacak şekilde

public function getDisplay($id) { 
    $thing = Thing::find($id) 
    ... 
} 

kontrolör fonksiyonuna yönlendirildi. Bu oldukça kullanışlı görünüyor ve şimdiye kadar benim için harika çalışıyor.

Denetleyici işlevlerimin çoğunun, URL'lerden bir modelin kimliğini alarak başladığını fark ettim ve bunun yerine benim için route model binding'u kullanabilmenin güzel olacağını düşündüm. Bu yüzden

Route::model('thing', 'Thing'); 
Route::controller('things', 'ThingController') 

benim routes.php güncellenen ve bu sihirli ben bunu istediğim şekilde işe kabul

public function getDisplay($thing) { 
    ... 
} 

için ThingController fonksiyonları değişti (her şey gibi şimdiye kadar denedim Laravel'de) ama maalesef fonksiyonda $thing'u kullanmayı denediğimde "Nesne olmayan mülkün mülkiyetini almaya çalışıyorum". Bu çalışabilmesi gereken bir şey mi ve yanlış mı yaptım ya da model bağını yalnızca route.php'de açıkça adlandırılan yollarla çalışmaktan geçebilir mi? URI yolu, yöntemi adı ve sadece tek show, edit ve update yöntemi işe sahip sakıncası yoksa

cevap

4

, modeli bağlama tanımlayabilirsiniz URI dizesini oluşturmak için Resource Controller kullanabilirsiniz.

Route::model('things', 'Thing'); 
Route::resource('things', 'ThingController'); 

değişiklik routes.php yılında tüm URI'ları olmadan Thing nesne olarak tehdit parametre açıkça rotayı adlandırabilir Bundan sonra

$ artisan routes | grep ThingController 
GET|HEAD things    | things.index    | [email protected] 
GET|HEAD things/create   | things.create    | [email protected] 
POST things     | things.store    | [email protected] 
GET|HEAD things/{things}  | things.show    | [email protected] 
GET|HEAD things/{things}/edit | things.edit    | [email protected] 
PUT things/{things}   | things.update    | [email protected] 
PATCH things/{things}   |       | [email protected] 

görmek php artisan routes komutunu kullanabilirsiniz.

/** 
* Display the specified thing. 
* 
* @param Thing $thing 
* @return mixed 
*/ 
public function show(Thing $thing) 
{ 
    return $thing->toJson(); 
} 

sen [email protected] erişmek istiyorsanız, modeliniz kimliğini iletmek ve laravel otomatik olarak geri yükler. kaynak ve hala diğer yöntemleri sağlar:

http://example.com/things/1

{"id":1,"type":"Yo!"} 
1

Sen Rota kullanabilirsiniz. İhtiyacınız olan rotayı, o belirli Route::resource satırından hemen önce yerleştirin. Ör:

Route::model('things', 'Thing'); 
Route::get('things/{things}/owner', '[email protected]'); 
Route::resource('things', 'ThingController'); 

Sonra denetleyicisi karşılık gelen yöntemini oluşturmak.

public function getOwner($things) { 
    return Response::json($things->owner()->get()); 
} 

İşte Laravel 4 resmi belgeleri.2 docs:

Kaynak: http://laravel.com/docs/controllers#resource-controllers

, daha önce bu yolları tanımlamak gerekir varsayılan kaynak yollarının ötesinde bir kaynak denetleyiciye ek yollar dahil etmek için gerekli hale gelirse Kontrolörleri

Kaynak için ek Yolları ekleme Route::resource numaralı telefon numaranız:

Route::get('photos/popular'); 
Route::resource('photos', 'PhotoController'); 
İlgili konular