Właśnie ten regulator np
<?php
class TestController extends BaseController {
public function getIndex()
{
echo "a";
}
public function postSecond($a)
{
echo "b";
}
}
W trasy, jeśli masz:
Route::controller('tests', 'TestController');
Wykonaj e
php artisan routes
Musisz mieć:
+--------+--------------------------------------------+------------------------+-----------------------------------+----------------+---------------+
| 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 kontroluje kontroler i generuje trasy w oparciu o jakie metody stwierdzi, automatycznie.
Ale jeśli nie
Route::resource('tests', 'TestController');
Dostaniesz tę listę trasy:
+--------+--------------------------------------------+------------------------+-----------------------------------+----------------+---------------+
| 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] | | |
+--------+--------------------------------------------+------------------------+-----------------------------------+----------------+---------------+
Nie zgadywać, laravel używa predefiniowaną listę CRUD tras, można usunąć niektóre z tych tras, ale nie sprawdzi kontrolera, aby zbudować trasy dla twoich metod.
Ty decydujesz, co jest dla Ciebie najlepsze. Ale zwykle, jeśli twój kontroler to CRUD, dobrym początkiem jest Route :: resource(), poza tym możesz użyć kontrolera Route ::() lub zbudować trasy ręcznie.
EDIT:
Nie ma naprawdę dlaczego jeden lub dlaczego innego, to tylko kwestia projektu i wyboru. Niektórzy nigdy z nich nie skorzystają. To tylko kapelusz Route::resource()
podąża za routingiem Railsów: http://guides.rubyonrails.org/routing.html.
Korzystanie Route::resource()
nie trzeba tworzyć wszystkie te metody, ale będziesz skończyć z listą tras bezcelowe, ponieważ laravel zawsze stworzyć wszystkie z nich domyślnie, chyba że robisz:
Route::resource('photo', 'PhotoController',
array('only' => array('index', 'show')));
Lista Twoich tras wyświetli tylko indeks i pokaż akcje.
Ponadto, jeśli potrzebujesz innych tras, używając Route::resource()
, musisz je zbudować ręcznie lub wykonać trochę magii, aby były automatyczne dla wszystkich zaradnych tras. Korzystanie z funkcji Route::controller()
odbywa się automatycznie, za każdym razem, gdy dodajesz nową metodę, tworzona jest dla ciebie nowa trasa.
Ponownie, jeśli masz sterownik CRUD do zbudowania, zacznij od użycia Route::resource()
. W przeciwnym razie pomyśl o korzyściach wynikających z tego czy innego w danym przypadku.
EDIT2:
Jest to świetny artykuł z Philem jesiotra (PyroCMS i PHP-rys), o korzyściach płynących z ręcznie zbudować wszystkich trasach: http://philsturgeon.co.uk/blog/2013/07/beware-the-route-to-evil.
Ten ostatni, Route :: resource, zgodnie z dokumentami - chyba że potrzebujesz więcej kontroli. :) –
Używanie 'Route :: controller ('posts', 'PostController');' nie powinno być używane do tworzenia kontrolerów RESTful? Nie powinniśmy również poprzedzać metodami kontrolera odpowiednim czasownikiem HTTP? Zdaję sobie sprawę, że ostatnie pytanie prawdopodobnie nie jest odpowiednie dla tego formatu, ponieważ jest subiektywne. – Iain