Nehmen Sie diesen Regler als Beispiel:
<?php
class TestController extends BaseController {
public function getIndex()
{
echo "a";
}
public function postSecond($a)
{
echo "b";
}
}
In Ihre Routen, wenn Sie haben
Route::controller('tests', 'TestController');
And execut
e
php artisan routes
werden Sie haben:
+--------+--------------------------------------------+------------------------+-----------------------------------+----------------+---------------+
| Domain | URI | Name | Action | Before Filters | After Filters |
+--------+--------------------------------------------+------------------------+-----------------------------------+----------------+---------------+
| | GET /tests/index/{v1}/{v2}/{v3}/{v4}/{v5} | | [email protected] | | |
| | GET /tests | | [email protected] | | |
| | POST /tests | tests.store | [email protected] | | |
| | GET /tests/{_missing} | | [email protected] | | |
+--------+--------------------------------------------+------------------------+-----------------------------------+----------------+---------------+
Laravel prüft die Steuerung und erzeugt Routen basierend auf welche Methoden es findet, automatisch.
Aber wenn Sie
Route::resource('tests', 'TestController');
tun Sie finden diese Route-Eintrag erhalten:
+--------+--------------------------------------------+------------------------+-----------------------------------+----------------+---------------+
| Domain | URI | Name | Action | Before Filters | After Filters |
+--------+--------------------------------------------+------------------------+-----------------------------------+----------------+---------------+
| | GET /tests | | Closure | | |
| | GET /tests | tests.index | [email protected] | | |
| | GET /tests/create | tests.create | [email protected] | | |
| | POST /tests | tests.store | [email protected] | | |
| | GET /tests/{tests} | tests.show | [email protected] | | |
| | GET /tests/{tests}/edit | tests.edit | [email protected] | | |
| | PUT /tests/{tests} | tests.update | [email protected] | | |
| | PATCH /tests/{tests} | | [email protected] | | |
| | DELETE /tests/{tests} | tests.destroy | [email protected] | | |
+--------+--------------------------------------------+------------------------+-----------------------------------+----------------+---------------+
Keine erraten, Laravel verwendet eine vordefinierte CRUD Liste von Routen, können Sie einige dieser Routen entfernen, aber Es wird Ihren Controller nicht untersuchen, um Routen für Ihre Methoden zu erstellen.
Sie entscheiden, was das Beste für Sie ist. Aber normalerweise ist Route :: resource() ein guter Anfang, wenn Sie einen CRUD-Controller verwenden, andernfalls können Sie Route :: controller() verwenden oder Ihre Routen manuell erstellen.
EDIT:
Es gibt keine wirklich, warum eine oder warum eine andere ist nur eine Frage der Gestaltung und Auswahl. Einige werden keines von ihnen jemals benutzen. Es ist nur Hut Route::resource()
folgt dem Weg der Schiene Routing: http://guides.rubyonrails.org/routing.html.
Mit Route::resource()
Sie brauchen nicht alle diese Methoden zu erstellen, aber Sie werden mit einer Liste von sinnlose Routen enden, weil Laravel immer alle von ihnen standardmäßig erstellen, es sei denn, Sie tun:
Route::resource('photo', 'PhotoController',
array('only' => array('index', 'show')));
Und Ihre Routenliste zeigt nur den Index und zeigt Aktionen an.
Wenn du noch andere Routen benötigst, musst du sie mit Route::resource()
manuell erstellen oder mit etwas Magie arbeiten, um sie für all deine findigen Routen automatisch zu machen. Mit Route::controller()
ist alles automatisch, jedes Mal, wenn Sie eine neue Methode hinzufügen, wird eine neue Route für Sie erstellt.
Wenn Sie einen CRUD-Controller erstellen möchten, beginnen Sie mit Route::resource()
. Andernfalls denken Sie über die Vorteile des einen oder anderen in Ihrem speziellen Fall nach.
EDIT2:
Dies ist ein großer Artikel, von Phil Sturgeon (PyroCMS und PHP-Figur), über die Vorteile der manuell alle Ihre Routen bauen: http://philsturgeon.co.uk/blog/2013/07/beware-the-route-to-evil.
Letzteres, Route :: Ressource, wie in der Dokumentation - es sei denn, Sie benötigen mehr Kontrolle. :) –
Also mit 'Route :: Controller ('posts', 'PostController');' sollte nicht verwendet werden, um RESTful-Controller zu erstellen? Weder sollten wir den Controller-Methoden das entsprechende HTTP-Verb voranstellen? Mir ist klar, dass die letzte Frage für dieses Format wahrscheinlich nicht angemessen ist, da es subjektiv ist. – Iain