Le rotte si trovano nella directory Routes e sono divise per tipologia.
Quelle per il Web sono in web.php
Di base una rotta è:
<?php
Route::get('/', function () {
return view('welcome');
});
?>
senza parametri nell'URL richiama la vista welcome.
Per comporre URL con multi parametri, si usa la sintassi:
<?php
Route::get('/{name?}/{lastname?}', function ($name = "", $lastname = "") {
return "<h1>Ciao ".$name." ".$lastname;
});
?>
Il punto di domanda indica che il parametro è opzionale quindi serve impostare il valore di default nella function.
Per creare filtri sul tipo di parametro, si usa il where ed una espressione regolare. Nell'esempio si può imporre che i due parametri siano solo testo.
<?php
Route::get('/{name?}/{lastname?}', function ($name = "", $lastname = "") {
return "<h1>Ciao ".$name." ".$lastname;
})->where("name","[a-zA-Z]+")->where("lastname","[a-zA-Z]+");
?>
E' possibile passare alla where un array di espressioni regolari:
<?php
Route::get('/{name?}/{lastname?}/{age?}', function ($name = "", $lastname = "", $age = 0) {
return "<h1>Ciao ".$name." ".$lastname." di ".$age." anni";
})->where([
"name" => "[a-zA-Z]+",
"lastname" => "[a-zA-Z]+",
"age" => "[0-9]{1,3}"
]);
?>
Avere tante rotte con logica è sconveniente perché il file potrebbe crescere in complessità quindi conviene passare direttamente all'uso dei controller. Per creare un controller potete fare a mano oppure usare il comando:
php artisan make:controller LoginController
Aggiungiamo un metodo login:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class LoginController extends Controller
{
//
public function login()
{
return "Sono il login";
}
}
e nella route creiamo la rotta di default che punta a tale metodo del controller:
<?php
Route::get('/', "LoginController@login");
?>
E' buona cosa farsi sempre dare la Request nel controller, così da averlo a disposizione nel caso ci serva per della logica. Per farlo basa mettere:
public function login(Request $req)
GET /isigym/public/ HTTP/1.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate, br
Accept-Language: it-IT,it;q=0.9,en-US;q=0.8,en;q=0.7
Cache-Control: max-age=0
Connection: keep-alive
Cookie: admin_auth=eyJpdiI6ImNxWkQxemFkdXJjZjROVlIzbFFlV0E9PSIsInZhbHVlIjoiNEc3SWV0ZmVTV0FqaHhcL2RYNHZrWGR5RGZ0N3c4Z3VISHFHeHk0QmNxTkNZQXo5dEhYUjU1RFNLVzQ2ZzlxWnBIVTJRcVhManNLZksrd2hZc25NNXkzM2k2d2NJc3dCaHAwRnVSZUtxUmtiRXJzdXErYTJmdWoxcjJNcHB4NU5kIiwibWFjIjoiZmU5OTU0YzQzMTgwMTdmOGUyOTlhMjc0ZDNkOWE2ZGFiN2M5YmFlM2M3ODQ0NzNiZTU3OGUzODdkZmEwNDk5MCJ9; XSRF-TOKEN=eyJpdiI6IkJMQ3NaOE9Qais2MkRWR1J0SWFhT1E9PSIsInZhbHVlIjoiTVZSNVU1RW96U2dhOGpLZGh6cDhnYWMrbjd6SGh1ZXZ0TExyWnowVWhkc1BjNXNRdUpHS2dUM3FPSFZNWFRwb0w0d3RUbjM0MzdoOGlVRVUzQ0RKalE9PSIsIm1hYyI6ImVkM2MzY2JlYjY4YjQ2NThkMjZkZjU2ZDZjOTZiMTc1ODc1ZjdjYTczMGMyN2VmZTQyMjBiM2EzZDdkZGM0YTUifQ%3D%3D; laravel_session=eyJpdiI6InFjTzlhQVZEcUZHXC9tMkZ2Y1ZVc1hRPT0iLCJ2YWx1ZSI6IndMMFl6eDBqcHJpeFlabzByb0I1ZFB4TndPQlduOGFES29UdFNDM1pQRWQySTNJXC9kNUR1cmxqRUdkOWVTUFdtbk03a1BDUlJpRDFuREJlTUNcL3BrZlE9PSIsIm1hYyI6ImY0MWRlMzM4NjQyZTIzMmM1YmU5YWQ0MDA5MDg4M2MzYzY0NTZmZDMwZjIwNzFkOGI5NTI3YWQxY2U4OGJjYjMifQ%3D%3D
Host: localhost
Referer: http://localhost/isigym/
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36
Cookie: admin_auth=; XSRF-TOKEN=GMaKfvlv6SnV7prIixE25tWIaZf8U7m5rTaS9knX; laravel_session=OAPI84csT9lfBS0mKiu698ohwXFb8zoVTo7Zr9G9
Analogamente a sopra, possiamo passare parametri di URL al controller semplicemente usando la sintassi sopra per la route e censendo il parametro nel metodo del controller
Route::get('/{username?}', "LoginController@login");
public function login($username = "", Request $req)
{
return "Sono il login di ".$username;
}
I parametri in GET che possono cambiare, non vanno censiti nella rotta ma vengono letti direttamente dal metodo del controller grazie proprio alla Request.
<?php
public function login($username = "", Request $req)
{
$lang = $req->input("lang");
return "Sono il login di ".$username." in lingua ".$lang;
}
?>
http://localhost/site/public/Emiliano?lang=it
dsda