2. Adaugarea de inregistrari in tabela
Editati fisierul /app/Http/routes.php astfel:
<?php
use AppFlower;
Route::get('flowers', 'FlowersController@index');
Route::get('flowers/add', 'FlowersController@add');
Route::get('flowers/{nume}', 'FlowersController@show');
?>
3. Atentie!!!
• Daca veti edita fisierul routes.php astfel:
<?php
use AppFlower;
Route::get('flowers', 'FlowersController@index');
Route::get('flowers/{nume}', 'FlowersController@show');
Route::get('flowers/add', 'FlowersController@add');
?>
veti obtine o eroare deoarece framework-ul va astepta un {nume} de
inregistrare existent, dupa “flowers” in adresa.
Este foarte importata ordinea regulilor de rutare in routes.php!
6. • Adaugati metoda FlowersController::add
public function add(){
return view('flowers.addflower');
}
7. Se observa ca forma va trimite implicit datele in pagina /flowers/add. Pentru a
modifica aceasta adresa, vom scrie:
echo Form::open(['url'=>'flowers']) ;
Pentru a trimite datele direct in metoda unui controller, vom modifica forma
addflower astfel:
echo Form::open(array('action' => 'FlowersController@store'))
;
In acest caz trebuie adaugata si ruta in routes.php astfel:
Route::any('flowers/store', 'FlowersController@store');
si deasemenea vom defini metoda store in FlowersController:
public function store(){
return 'Datele nu au fost inserate inca :)';
}
8. • Pentru a putea gestiona datele trimise de forma in metoda controller-
ului, va trebui sa modificam codul controller-ului astfel:
Inlocuiti linia
use IlluminateHttpRequest;
cu linia:
use Request;
apoi va trebui sa editam metoda store astfel:
10. • Pentru a salva datele in tabela, vom edita metoda store in controller
astfel:
public function store(){
$flower=new Flower;
$flower->nume=Request::input('nume');
$flower->marime=Request::input('marime');
$flower->culoare=Request::input('culoare');
$flower->pret=Request::input('pret');
$flower->save();
return redirect('/flowers');
}
11. Validarea datelor (metoda1– validarea in
controller)
• Info: http://laravel.com/docs/5.0/validation
Editati metoda store din /app/Http/Controllers/FlowersController astfel:
public function store(){
$validator=Validator::make(Request::all(), [
'nume'=>'required',
'culoare'=>'required',
'marime'=>'required',
'pret'=>'required'
]);
if($validator->fails()) return 'failed validation';
$flower=new Flower;
$flower->nume=Request::input('nume');
$flower->marime=Request::input('marime');
$flower->culoare=Request::input('culoare');
$flower->pret=Request::input('pret');
$flower->save();
return redirect('/flowers');
}
12. • Daca veti incerca sa vizualizati
• http://localhost/paravelproj/public/flowers/add si apoi incercati sa inserati o
inregistrare vida, veti obtine o eroare deoarece nu va fi “vazuta” clasa
Validator.
• Pentru a elimina eroarea puteti utiliza metodele:
METODA1: Adaugati linia: use Validator; in controllerul FlowersController sau
METODA2: Scrieti codul validatorului asttfel:
$validator=Validator::make(Request::all(), [
'nume'=>'required',
'culoare'=>'required',
'marime'=>'required',
'pret'=>'required'
]);
Apoi veti obtine output-ul:
13. • Pentru a verifica fiecare camp separat si a afisa mesaje de eroare specifice, vom edita validarea din metoda
store astfel:
public function store(){
$validation=Validator::make(Request::all(), [
'nume'=>'required',
'culoare'=>'required',
'marime'=>'required',
'pret'=>'required'
]);
if($validation->fails()){
return redirect()->back()->withInput()->withErrors($validation->messages());
}
$flower=new Flower;
$flower->nume=Request::input('nume');
$flower->marime=Request::input('marime');
$flower->culoare=Request::input('culoare');
$flower->pret=Request::input('pret');
$flower->save();
return redirect('/flowers');
}
15. Eliminarea erorii: No supported encrypter found.
The cipher and / or key length are invalid.
In fereastra de comanda scrieti:
php artisan key:generate
16. Validarea datelor (metoda2– validarea in
model)
• In acest caz, editati fisierul model /app/Flower.php astfel:
<?php namespace App;
use IlluminateDatabaseEloquentModel;
class Flower extends Model {
protected $fillable=['nume','marime','culoare','pret'];
public $timestamps=false;
protected $table = 'flowers';
public static $rules=[
'nume'=>'required',
'culoare'=>'required',
'marime'=>'required',
'pret'=>'required'
];
}
17. • Deasemenea editati metoda store din controllerul FlowersController astfel:
public function store(){
$validation=Validator::make(Request::all(),Flower::$rules);
if($validation->fails()){
return redirect()->back()->withInput()->withErrors($validation->messages());
}
$flower=new Flower;
$flower->nume=Request::input('nume');
$flower->marime=Request::input('marime');
$flower->culoare=Request::input('culoare');
$flower->pret=Request::input('pret');
$flower->save();
return redirect('/flowers');
}
Daca veti incerca sa adaugati o interistrare vida
http://localhost/paravelproj/public/flowers/add , veti obtine:
18. • Pentru a face validarea numai in model, editati modelul Flower.php:
<?php namespace App;
use IlluminateDatabaseEloquentModel;
use Validator;
class Flower extends Model {
public static $errors;
protected $fillable=['nume','marime','culoare','pret'];
public $timestamps=false;
protected $table = 'flowers';
public static $rules=[
'nume'=>'required',
'culoare'=>'required',
'marime'=>'required',
'pret'=>'required'
];
public static function isValid($data){
$validation=Validator::make($data,static::$rules);
if($validation->passes()) return true;
static::$errors=$validation->messages();
return false;
}
}
?>
19. • In acest caz metoda store din controller devine:
public function store(){
if(!Flower::isValid(Request::all())){
return redirect()->back()->withInput()->withErrors(Flower::$errors);
}
$flower=new Flower;
$flower->nume=Request::input('nume');
$flower->marime=Request::input('marime');
$flower->culoare=Request::input('culoare');
$flower->pret=Request::input('pret');
$flower->save();
return redirect('/flowers');
}