-
Parametri Route
-
Numire Rute
Functia esentiala a oricarei aplicatii web este de a primi cereri de la utilizator si livra raspunsuri, de obicei prin HTTP(S).
Routing este un sistem destinat sa trimita cererea catre un controller.
"Rutele" in Laravel 5.5 pot fi definite in fisierul "
routes/web.php". Daca deschizi acest fisier cu un editor de text veti vedea un cod ca acesta:
Route::get('/', function(){
return view('welcome');
});
Aici '
Route' este o clasa care are o metoda statica
get() ce returneaza o metoda
view() care prezinta o pagina web creata in directorul '
resources/views/'.
Cand un utilizator visiteza prima pagina, va fi afisat continutul din '
welcome.blade.php' (stocat in directorul
views).
Poti trimite un alt respuns in loc de view(). De exemplu:
Route::get('/', function(){
return 'welcome';
});
Va returna doar cuvantul "welcome" pe pagina principala.
Daca vrei sa modifici pagina principala, editeaza fisierul 'welcome.blade.php' in directorul "resources/views/".
Afisare continut in functie de adresa URL
Folosind metoda
Route::get(), poti afisa continut pe pagina in functie de adresa URL.
Sa cream inca o ruta pentru o pagina "test".
- Adaugati acest cod in "
routes/web.php":
//home-page
Route::get('/', function(){
return view('welcome');
});
//test page
Route::get('/test', function(){
return view('test');
});
- In directorul "
resources/views/" creaza un fisier "
test.blade.php" cu acest continut:
<!doctype html>
<html lang="{{app()->getLocale()}}">
<head>
<meta charset="utf-8">
<title>Test page</title>
</head>
<body>
<h1>Something about nothing</h1>
</body>
</html>
Deschide interfata Command Line (CMD in Windows), navigheaza catre directorul unde este instalat Laravel si ruleaza aceasta comanda pentru a porni serverul PHP integrat.
php artisan serve
Acum, daca accesezi pagina "test" in browser, de exemplu:
//localhost:8000/test/
Va afisa o pagina ca in aceasta imagine:
Folosind un framework, nu e nevoie sa creezi un fisier view pentru fiecare pagina; acesta este doar un exemplu pentru a vedea cum functioneaza 'Route'.
Parametri Route
Daca adresa URI are parametri, acestia pot fi preluati in functia "callback" definita la Route.
- Exemplu: Preia si afiseaza ID-ul "paginii" adaugat in URL.
Route::get('page-{id}', function($id){
return 'Page id: '. $id;
});
Daca adaugi codul de mai sus in "routes/web.php", orice argument adaugat dupa "public/page-" in URL va fi retinut in $id, si putem folosi acel parametru pentru procesare in continuare. Aici doar il afisam.
Se pot folosi si parametri Route optionali, adaugand semnul "?" dupa numele parametrului:
Route::get('page{id?}', function($id ='noid'){
return 'Page id: '. $id;
});
Se pot folosi expresii Regexp pentru a executa un route doar daca un parametru indeplineste anumite cerinte; adaugand metoda
where().
Route::get('page-{name}', function($name){
return 'Page name: '. $name;
})->where('name', '[A-z-]+');
De asemenea, se pot defini mai multi parametri la un route:
Route::get('/{name}/{id?}', function($name, $id=1){
return 'Page name: '. $name .', id: '. $id;
})->where(['name'=>'[A-z-]+', 'id'=>'[0-9]+']);
Numire Rute
Laravel permite sa denumesti fiecare route cu un nume care va permite sa faci referire la acel Route fara sa adaugi in mod explicit adresa URL. Astfel, poti da nume simple unor rute complexe, apoi se pot crea link-uri simplu folosind direct numele definit, si de asemenea, nu e nevoie sa rescrii link-ul paginii daca adresa URI se schimba.
- Poti defini numele route-ului folosind metoda
name().
Route::name(name_id)->get('/{name}/{id?}', function($name, $id=1){
return 'Page name: '. $name .', id: '. $id;
})->where(['name'=>'[A-z-]+', 'id'=>'[0-9]+']);
Pentru a crea o adresa URL pentru acest route (numit 'name_id'), se foloseste functia
route(), cu numele si parametri necesari intr-un array.
De exemplu, intr-un fisier view poti adauga acest cod pentru a crea doua link-uri pentru route-ul "name_id":
<?php
$url1 = route('name_id', ['name'=>'test']); //here id is not specified because it is optional
$url2 = route('name_id', ['name'=>'tutorial', 'id'=>2]);
?>
<a href='{{$url1}}' title='test'>Test</a>
<a href='{{$url2}}' title='tutorial'>Tutorial</a>
- Va crea doua link-uri asa:
<a href='http://localhost:8000/test/' title='test'>Test</a>
<a href='http://localhost:8000/tutorial/2' title='tutorial'>Tutorial</a>
• Pentru a face
adrese URL relative, adauga "
false" ca al treilea argument in functia
route():
route('route_name', array(), false)
- Va crea un link asa:
<a href='/tutorial/2' title='tutorial'>Tutorial</a>
Asemanator, pentru a redirectiona catre un route denumit, se foloseste metoda
redirect():
return redirect()->route('name_id', ['name'=>'test']);
• Metoda
get() este folosita pentru cereri HTTP(S) GET, dar se pot defini route-uri pentru fiecare tip de cerere, cum ar fi POST, PUT sau DELETE.
Tipuri de Route in Laravel
Route::get($uri, $callback);
Route::post($uri, $callback);
Route::put($uri, $callback);
Route::patch($uri, $callback);
Route::delete($uri, $callback);
Route::options($uri, $callback);
//for multiple HTTP verbs
Route::match(['get', 'post'], '/', function(){
//
});
//route that responds to all HTTP verbs
Route::any('foo', function(){
//
});
- Documentatie:
Laravel - Routing