-
Preluare date din formular
Pentru a obtine o instanta a HTTP accesarii curente intr-un controller, se foloseste clasa
Illuminate\Http\Request in controller si parametrul
Request $request in metoda controller-ului.
Daca metoda controller foloseste si date de la parametri Route, se adauga parametri route dupa parametrul $request.
- De exemplu, daca un route "test" este definit asa:
Route::name('test')->get('test/{id}', 'TestController@index');
O clasa
TestController intr-un fisier "
TestController.php" (in directorul
app/Http/Controllers/ ) ar arata asa:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class TestController extends Controller {
//Responds to requests to /test
//receives the $request instane, $id from URI
//returns view() response
public function index(Request $request, $id){
return view('test');
}
}
Metode si adrese Request
Obiectul
$request furnizeaza o varietate de metode pentru examinarea cererii HTTP.
- $request->fullUrl() - returneaza URL-ul intreg, incluzand sirul "query" (cu '?...').
- $request->method() - Va returna HTTP tipul de request.
- $request->path() - va returna adresa URI.
- $request->is() - permite sa verifici daca adresa accesat se potriveste cu un model dat. Poti folosi caracterul "*" ca un wildcard: is('test/*')
- $request->isMethod() - pentru a verifica ca tipul HTTP se potriveste cu un tip dat
- $request->url() - returneaza URL-ul intreg, fara sirul query.
Vezi pagina aceasta pentru o lista completa cu
Metode Request
- Exemplu:
1. Adauga urmatorul cod in fisierul "
TestController.php":
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class TestController extends Controller {
//Responds to requests to /test
//receives the $request instance, $id from URI
//returns view() response
public function index(Request $request, $name=''){
//Usage of is() method
$is_uri = $request->is('test/*');
//set array with keys to be passed to view() for template
$data =[
'name'=>$name,
'uri'=>$request->path(),
'url'=>$request->url(),
'is_uri'=>$is_uri ?'URI matches the "test/*" pattern' :'URI not matches the "test/*" pattern',
'method'=>$request->method()
];
return view('test', $data);
}
}
2. Adauga urmatorul cod in fisierul "
test.blade.php" (in directorul "
resources/views/"):
<!doctype html>
<html lang="{{app()->getLocale()}}">
<head>
<meta charset="utf-8">
<title>Test Page</title>
</head>
<body>
<h1>Test page</h1>
NAME ARGUMENT: {{$name}}<br>
URI: {{$uri}}<br>
URL: {{$url}}<br>
METHOD: {{$method}}<br>
is() METHOD: {{$is_uri}}
</body>
</html>
3. Adauga urmatoarea linie in fisierul"
routes/web.php":
Route::name('test_pg')->get('/test/{name?}', 'TestController@index');
4. Viziteaza URL-ul de mai jos:
//localhost:8000/test/peace
- Rezultatul va fi ca in imaginea urmatoare.
Preluare date din formular
Indiferent ce metoda a fost folosita, GET sau POST, obiectul
$request va return valorile input pentru ambele metodele in acelasi fel. Poti prelua datele din formular folosind oricare din variatele:
- Metoda $request->input() - primeste un argument, numele campului din formular.
$name = $request->input('username');
- Metoda $request->all() - returneaza un array cu toate datele input.
$input = $request->all();
$name = $input['username'];
- Metoda $request->intersect() - accepta un array cu numele campurilor din formular. Returneaza un arrau cu "name=>value" a datelor din formular.
$input = $request->intersect(['username', 'password']);
$name = $input['username'];
- Metoda $request->except() - accepta un array (sau lista de argumente) cu numele campurilor in formula. Returneaza un array cu "name=>value" a tuturor datelor din formular, cu exceptia numelor campurilor specificate.
$input = $request->except(['credit_card', 'address']); //or: except('credit_card', 'address')
$name = $input['username'];
- Proprietatile dinamica a instantei Request - reprezinta numele campului in formular.
$name = $request->username;
Verificare daca o valoare Input este prezenta
Este indicat sa folositi metoda
has() pentru a verifica daca un anume camp de formular este prezent in cerere.
Metoda has() returneaza
true daca valoarea este prezenta:
if($request->has('name')){
//
}
Cand este dat un
array, metoda has() va determina daca toate valorile specificate sunt prezente:
if($request->has(['name', 'email'])){
//
}
- Exemplu:
1. Adauga urmatorul cod in fisierul "
TestController.php" (in directorul
app/Http/Controllers/):
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class TestController extends Controller {
//Responds to requests to /test
//receives the $request instance, $id from URI
//returns view() response
public function index(Request $request, $name=''){
//Usage of is() method
$is_uri = $request->is('test/*');
//set array with keys to be passed to view() for template
$data =[
'name'=>$name,
'uri'=>$request->path(),
'url'=>$request->url(),
'is_uri'=>$is_uri ?'URI matches the "test/*" pattern' :'URI not matches the "test/*" pattern',
'method'=>$request->method()
];
return view('test', $data);
}
//Responds to post requests to /user/register
//receives the $request instance
//outputs input fields data, or message
public function userRegister(Request $request){
//if required fields are received, and not empty
if($request->has(['name', 'username', 'password']) && $request->name!=null && $request->username!=null && $request->password!=null){
//Retrieve the name input field
$name = $request->input('name');
echo 'Name: '.$name .'<br>';
//Retrieve the username input field
$username = $request->username;
echo 'Username: '.$username .'<br>';
//Retrieve the password input field
$password = $request->password;
echo 'Password: '.$password;
}
else echo 'Please fill all the form fields';
}
}
2. Creaza un fisier "
register_form.blade.php" in directorul "
resources/views/", cu acest cod:
<form method="post" action="/user/register">
{{ csrf_field() }}
<label>Name: <input type='text' name='name'/></label><br>
<label>Username: <input type='text' name='username'/></label><br>
<label>Password: <input type='password' name='password'/></label><br>
<input type='submit' value='Register'/>
</form>
Afirmatia {{ csrf_field() }} adauga un camp input "ascuns" in formular. Campul contine "codul" CSRF care este generat automat de framework-ul Laravel pentru a proteja aplicatia de atacuri cross-site request forgery (CSRF).
Se foloseste: {{ csrf_field() }} pentru a include un camp cu codul CSRF in fiecare formular pentru ca middleware-ul pentru protectie CSRF sa poata valida request-ul.
3. Adauga urmatorul cod in fisierul "
routes/web.php":
//shows the register form
Route::get('/register',function(){
return view('register_form');
});
//when the register form is submited
Route::post('/user/register', 'TestController@userRegister');
4. Viziteaza urmatorul URL si adauga date in campurile formularului:
//localhost:8000/register
- Va afisa o pagina ca aceasta:
5. Apasa butonul Register, va deschide o pagina cu detaliile de inregistrare a utilizatorului, cum se vede in imaginea urmatoare:
- Documentatie:
Laravel - Requests