Laravel - Rota :: kaynak vs Rota :: denetleyici


138

Laravel web sitesi, Stack Overflow ve Google'daki dokümanları okudum ve yine de Route::resourceveRoute::controller .

Cevaplardan biri Route :: source'un zalim olduğunu söyledi. Ancak Route :: controller ile Route :: source ile aynı şeyi başarabiliriz ve sadece gerekli eylemleri belirleyebiliriz.

Kardeş gibi görünüyorlar:

Route::controller('post','PostController');
Route::resource('post','PostController');

Ne kullanacağımızı nasıl seçebiliriz? İyi uygulama nedir?


12
Laravel 5.2 kullanıcıları için sadece bir not, bu arada örtük denetleyiciler kullanımdan kaldırıldı.
Roy

Yanıtlar:


283

RESTful Kaynak denetleyicisi

Bir dinlendirici kaynak denetleyici size ve hatta isimlerinin onları için bazı varsayılan rotalardan setleri.

Route::resource('users', 'UsersController');

Size şu adlandırılmış yolları sunar:

Verb          Path                        Action  Route Name
GET           /users                      index   users.index
GET           /users/create               create  users.create
POST          /users                      store   users.store
GET           /users/{user}               show    users.show
GET           /users/{user}/edit          edit    users.edit
PUT|PATCH     /users/{user}               update  users.update
DELETE        /users/{user}               destroy users.destroy

Ve kontrolörünüzü böyle bir şey kurarsınız (actions = yöntemler)

class UsersController extends BaseController {

    public function index() {}

    public function show($id) {}

    public function store() {}

}

Hangi eylemlerin dahil edileceğini veya hariç tutulacağını da seçebilirsiniz:

Route::resource('users', 'UsersController', [
    'only' => ['index', 'show']
]);

Route::resource('monkeys', 'MonkeysController', [
    'except' => ['edit', 'create']
]);

RESTful Kaynak Denetleyicisi belgeleri


Örtük denetleyici

Bir Kapalı kontrol daha esnektir. HTTP istek türüne ve adına bağlı olarak denetleyici yöntemlerinize yönlendirilirsiniz. Ancak, sizin için tanımlanmış rota adlarınız yoktur ve aynı rota için tüm alt klasörleri yakalar.

Route::controller('users', 'UserController');

Denetleyiciyi bir çeşit RESTful adlandırma şemasıyla kurmanıza neden olur:

class UserController extends BaseController {

    public function getIndex()
    {
        // GET request to index
    }

    public function getShow($id)
    {
        // get request to 'users/show/{id}'
    }

    public function postStore()
    {
        // POST request to 'users/store'
    }

}

Örtük Denetleyici belgeleri


Tercihinize göre ihtiyacınız olanı kullanmak iyi bir uygulamadır. Kişisel olarak Örtük denetleyicileri sevmiyorum , çünkü dağınık olabilirler, ad vermezler ve kullanırken kafa karıştırıcı olabilirler php artisan routes. Genellikle RESTful Resource Controller denetleyicilerini açık yollarla birlikte kullanırım.


1
Birkaç Kaynak yolu kullanırsak (belki dizin, göster) neden statik yollar kullanmıyorsunuz Route :: get (...)? Ben dizi ('only' => dizi ('index', 'show') kullanmak daha kötü değil bence ve 'kullanıcı / 123' gibi bir şey istediğimizde RESTFull denetleyicisi için hangi yöntem kullanılır, getIndex () 'kullanıcı /' ama kullanıcı / 123 ile hata alıyorum NotFoundHttpException (farklı adları getView ve diğerlerini denedi, sadece Controller @ getView olarak bildirildiğinde çalışır)?
Sonique

Birisi 'resource.edit' in ne amaçla kullanıldığını açıklayabilir mi? Bu bir GET yöntemidir, bu yüzden sadece 'resource.show' ile sınırlı bilgi yerine, bir kaynak hakkında tam bilgi gerekiyordu varsayıyorum?
Anthony

1
@Anthony - resource.edittemel olarak mevcut bir kaynağı düzenleme formunu bir düzenleme Görünümü göstermektir.
ryanwinchester

@fungku Bu ilginç .. yani resource.edit'in aslında JSON yerine HTML döndüreceğini mi söylüyorsunuz?
Anthony

2
@ Anthony Genellikle, (ve bildiğim kadarıyla) evet. resource.editve resource.creategenellikle bir kullanıcı arayüzü içindir ... HTML formlarıyla bir görünüm oluşturur. Bu formlar sırasıyla resource.updateve PUT / POST resource.storeolacaktır. Bunu yapmıyorsanız, onları yok sayabilir ve denetleyicinizde edit () ve create () yöntemlerinden kurtulabilirsiniz.
ryanwinchester

3

Güzergah kontrol yöntemi için sadece bir güzergah tanımlamamız gerekmektedir. Get veya post yönteminde rotayı ayrı ayrı tanımlamamız gerekir.

Ve kaynaklar yöntemi, çeşitli Restful eylemlerini işlemek için birden fazla rota oluşturmak için kullanılır.

İşte bu konuda Laravel belgeleri .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.