Podstawową funkcją każdej strony www jest przyjmowanie zapytań HTTP i przesyłanie z powrotem do przeglądarki odpowiedzi, najczęściej w formie kodu HTML. W pierwszej kolejności musimy zatem nauczyć się definiować ścieżki.
W Laravelu, ścieżki definiuje się w plikach znajdujących się w katalogu routes
. W świeżej instalacji Laravela w tym katalogu znajdują się cztery pliki:
api.php
channels.php
console.php
web.php
Na początku interesuje nas plik routes/web.php
, w którym definiuje się standardowe ścieżki aplikacji. Tak wygląda ten plik w świeżej instalacji:
Route::get('/', function () {
return view('welcome');
});
Co robi ten kawałek kodu? Rejestruje ścieżkę. Gdy ktoś odwiedzi naszą stronę główną skrypt zwróci widok znajdujący się w pliku welcome.blade.php
w katalogu resources/views
. O widokach i silniku szablonów Blade będziecie mogli przeczytać w następnym poście.
Możemy sami zdefiniować np. taką ścieżkę:
Route::get('/contact', function () {
return view('contact');
});
Pod adresem /contact
skrypt zwróci widok znajdujący się w pliku resources/views/contact.blade.php
.
Składnia metody Route::get()
jest bardzo prosta. Jako jej pierwszy parametr przekazujemy koncówkę adresu, która ma być przechwycona. Jako drugi przekazujemy tak zwaną funkcję anonimową, która zwraca widok.
Warto zwrócić uwagę, że ukośnik (/
) na początku pierwszego argumentu nie jest wymagany, moglibyśmy zdefiniować tę scieżkę w następujący sposób:
Route::get('contact', function () {
return view('contact');
});
Zamiast funkcji anonimowej jako drugi argument możemy wskazać kontroler, który ma być użyty do obsługi ścieżki. Na przykład w ten sposób:
Route::get('user', 'UserController@index');
Pod adresem /user
skrypt zwróci to co zwraca metoda index()
znajdująca się w klasie UserController
w pliku app/Http/Controllers/UserController.php
.
Do tej pory używaliśmy metody get()
do definiowania ścieżek. Ta metoda odpowiada na metodę GET protokołu HTTP. Mamy też do dyspozycji metodę, która odpowiada na metodę POST.
Route::post('/posts', 'PostController@store');
Są też dostępne metody put()
, patch()
, delete()
, options()
. Wszystkie odpowiadają metodom protokołu HTTP o tych samych nazwach.
Parametry
W ścieżce można też łatwo definiować parametery, na przykład:
Route::get('users/{id}', function ($id) {
return 'User: ' . $id;
});
Możemy zdefiniować dowolną liczbę parametrów:
// routes/web.php
Route::get('posts/{post}/comments/{comment}', 'CommentController@show');
// app/Http/Controllers/CommentController.php
class CommentController extends Controller
{
public function show($postId, $commentId)
{
return 'Comment: ' . $commentId . ' from post: ' . $postId;
}
}
Parametry definiuje się spinając ich nazwy nawiasami klamrowymi. Nazwa parametru nie może zawierać myślinika (-). Parametry zostaną przekazane do funkcji w tej samej kolejności, w której zostały zdefiniowane. Nazwa parametrów nie ma znaczenia, chociaż najlepszą praktyką jest nazywać je tak samo w definicji ścieżki i w kontrolerze.
Parametr może być opcjonalny, wystarczy dodać znak zapytania (?) do jego definicji:
Route::get('movies/{category?}', function ($category = 'comedy') {
return 'Category: ' . $category;
});
/**
* /movies => Category: comedy
* /movies/action => Category: action
*/
W tej części tutoriala nauczyliśmy się podstaw definiowania ścieżek w Laravelu. W następnej części omówimy widoki i silnik szablonów Blade.