Kann die route-Modells verbindlich eingesetzt werden mit RESTful-Controller?
Ich habe mit RESTful Controller in meinem Laravel Projekt. Durch einschließlich:
Route::controller('things', 'ThingController')
in meinem routes.php ich kann Funktionen definieren, die in der ThingController
wie:
public function getDisplay($id) {
$thing = Thing::find($id)
...
}
so, dass Immer die URL "...Dinge/display/1" würde automatisch weitergeleitet werden, um die controller-Funktion. Dies scheint ziemlich einfach und funktioniert bestens für mich so weit.
Bemerkte ich viele meiner controller-Funktionen beginnen immer mit einer Modell-id aus der url, und ich dachte, es wäre schön, in der Lage sein zu verwenden route-Modell verbindlich, dies zu tun für mich. Also ich aktualisiert meine routes.php zu
Route::model('thing', 'Thing');
Route::controller('things', 'ThingController')
verändert und die ThingController
Funktionen
public function getDisplay($thing) {
...
}
Bin ich davon ausgegangen, dies würde auf Magische Weise funktioniert, wie ich wollte, dass es (wie alles andere, was ich bisher ausprobiert habe in Laravel hat), aber leider bekomme ich "Trying to get property of non-object", wenn ich versuche zu verwenden $thing
in der Funktion. Ist dies etwas, das sollte sein in der Lage zu arbeiten und ich gerade gemacht haben, ist es falsch, oder kann die route-Modell nur verbindlich, arbeiten mit Routen explizit benannt routes.php?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Euch das nichts ausmacht mit der URI-Pfad, Methode Namen und arbeiten Sie einfach nur
show
,edit
undupdate
Methode, die Sie verwenden können, Ressource Controller zu generieren, die URI-Zeichenfolge, die können Sie definieren, Modell verbindlich.In
routes.php
änderungKönnen Sie
php artisan routes
Befehl, um alle URIsDanach können Sie bedrohlich parameter wie
Thing
Objekts, ohne explizit den Namen der route.Wenn Sie möchten, den Zugang
ThingController@show
, geben Sie Ihre Modell-ID und Laravel ruft es automatisch.http://example.com/things/1
Können Sie die Route:Ressourcen und immer noch zu anderen Methoden. Legen Sie die route, die Sie brauchen nur vor, die insbesondere
Route::resource
Linie.Eg:
Dann legen Sie die entsprechende Methode in der controller.
Hier ist die offizielle Dokumentation von Laravel 4.2 docs:
Quelle: http://laravel.com/docs/controllers#resource-controllers
Zusätzliche Routen Ressource Controller
Wenn es notwendig wird, für Sie, um zusätzliche Wege zu einer Ressourcen-Steuerung über die Standard-resource-Routen, definieren Sie die Routen, bevor Sie Ihren Anruf zu
Route::resource
: