2016-03-27 6 views
0

HeroController adlı bir denetleyicim olduğunu varsayalım ve yeni bir kahraman nesnesi oluşturmak ve veritabanına yeni bir kahraman olarak eklemek istiyorum.Laravel 5.2 - Yeni bir DB kaydı eklemek için denetleyici deposunu() kullanın

public function store(Request $request) 
    { 
     $hero = new Hero; 
     $hero->name = $request->name; 
     $hero->description = $request->description; 
     $hero->avatar = "None"; 
     $hero->save(); 

     return redirect('/'); 
    } 

Ben kullanıcı "yeni bir kahraman Ekle" formunu gönderme olduğunu bu yöntemi kullanmak istiyorum:

Benim denetleyicisi aşağıdaki yöntem içerir. Aslında ne olur benim routes.php dosyası üzerinden yeni bir kahraman yaratmak olmam:

benim kahramanım ths routes.php oluşturulur Neden
Route::post('/heroes/create', function (Request $request) { 
    $validator = Validator::make($request->all(), [ 
     'name' => 'required|max:255', 
    ]); 

    if ($validator->fails()) { 
     return redirect('/') 
      ->withInput() 
      ->withErrors($validator); 
    } 

    $hero = new Hero; 
    $heroname = $request->name; 
    $hero->save(); 

    return redirect('/'); 
}); 

ve bunu kendi HeroController ile çalışmak nasıl değiştirebileceğinizi?

Route::post('/heroes/create', '[email protected]'); 

O Gerçekten yaklaşık RESTful controllers ve öğrenmesi gereken docs

cevap

1

daha doğru bu şekilde hissediyor kaynak yolları. Tam olarak istediğin bu.

https://laravel.com/docs/5.1/controllers#restful-resource-controllers

Sen kullanıcı girişi temel oluşturmak ve DB verileri kaydetmek için bir kahraman yaratma formu ve store eylem ile bir görünüm dönmek için create eylemini kullanmalıdır. ("HeroController @ mağaza" "kahramanlar oluşturmak /")

Route::resource('heroes', 'HeroController'); 
2

kontrolöre geçmesi iyi olurdu: eğer doğru anlamak o Pretty yalındır ..

1

Değişim Rota Rota için :: mesaj:

nedenle tüm mantık bir denetleyici içinde olacak ve sahip olacak tek yoldur ;

Geçerli rotanızın içeriğini HeroController

ürününüzün mağaza işlevine kopyalayın.