2016-03-27 1 views
0

Angenommen, ich habe einen Controller namens HeroController und ich möchte ein neues Heldenobjekt erstellen und es als neuen Helden in meine Datenbank einfügen.Laravel 5.2 - Verwende Controller Store() um einen neuen DB-Eintrag einzufügen

Mein Controller enthält die folgende Methode:

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

     return redirect('/'); 
    } 

Ich mag diese Methode verwenden, wenn der Benutzer das „einen neuen Helden hinzufügen“ Formular veröffentlichen. Eigentlich, was passiert ist, dass ich einen neuen Helden über meine routes.php Datei bin erstellen:

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('/'); 
}); 

Warum mein Held in ths erstellt routes.php und wie kann ich es mit meinem HeroController zu arbeiten ändern? es fühlt sich mehr Recht auf diese Weise ..

Antwort

1

recht direkt, wenn ich das richtig verstehen:

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

Es wäre am besten, um durch den Controller docs

2

Sie wirklich brauchen, um zu erfahren, RESTful controllers und Ressourcenrouten. Das ist genau was du willst.

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

sollten Sie create Aktion verwenden, um eine Ansicht mit einem Helden Schöpfung Form und store Aktion, um Daten in DB, erstellen und speichern Benutzereingabe basiert.

Also alle die Logik in einem Controller und der einzige Weg, haben Sie ist:

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

ändern Route to Strecke :: Post ("Helden/erstellen", "HeroController @ store") ;

Und kopieren Sie den Inhalt Ihrer aktuellen Route auf die Speicherfunktion in Ihrem HeroController