- Folosire Rute cu Controller
- Controller Resursa
- Constructor Injection
- Injection in Metode

Controller e o clasa care organizeaa logica unuia sau mai multor Rute intr-un loc.
Treaba principala a unui controller este sa preia cererea HTTP si sa prelucreze datele pentru restul aplicatiei. Astfel, se poate crea logica pentru route-urile tuturor paginilor intr-o singura clasa.

Crearea unui Controller

Pentru a crea un controller poti folosi comanda 'artisan' in CLI. In interfata Command Line navigheaza catre directorul cu proiectul Laravel si executa aceasta comanda:
php artisan make:controller MyController
Aceasta va crea un nou fisier numit "MyController.php" in directorul app/Http/Controllers/ cu un cod de baza (care extinde clasa Controller de baza inclusa cu Laravel):
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;

class MyController extends Controller {
  //
}
- De asemenea, poti crea manual fisierul "MyController.php" (in directorul app/Http/Controllers/) cu codul de mai sus.
Pentru a vedea o lista de comenzi "artisan" valabile, scrieti in interfata Command Line:
php artisan –list

Folosire Rute cu Controller

In clasa MyController putem crea metode care pot fi folosite in rute (in "web.php").

1. Creaza o metoda publica numita index() care primeste obiectul Request si returneaza o pagina 'view' cu date pentru template.
namespace App\Http\Controllers;
use Illuminate\Http\Request;

class MyController extends Controller {

  //receives the request objet; returns a simple page using view
  public function index(Request $req){
    //set array with keys to be passed to view() for template
    $data =[
      'uri'=>$req->path(),
      'url'=>$req->url(),
      'method'=>$req->method()
    ];

    return view('index', $data);
  }
}
2. In directorul "resources/views/" creaza un fisier "index.blade.php" cu ceva continut, de exemplu:
<!doctype html>
<html lang="{{app()->getLocale()}}">
<head>
<meta charset="utf-8">
<title>Home Page</title>
</head>
<body>
<h1>Home page</h1>
URI: {{$uri}}<br>
URL: {{$url}}<br>
METHOD: {{$method}}
</body>
</html>
3. Foloseste metoda MyController index() in route-ul pentru pagina principala "/" (in "routes/web.php" sterge route-ul get() existent pentru '/'), adauga:
Route::name('home')->get('/', 'MyController@index');
4. Deschide serverul inclus php (In CLI navigheaza catre directorul cu proiectul Laravel si initiaza "php artisan serve") si acceseaza in browser: "//localhost:8000/".
- Va afisa continutul creat in "index.blade.php", o pagina precum in aceasta imagine:

homepage, controller route

Controller Resursa

Controller-ul Resursa (Resource Controller) este o clasa Controller care contine toate metodele pentru a efectua operatiuni CRUD (Create, Read, Update, Delete).
Pentru a crea un "resource controller" foloseste aceasta comanda in CLI:
php artisan make:controller ControllerName --resource
De exemplu, sa cream un controller care se ocupa de toate cererile HTTP pentru "photos" stocate de o aplicatie Laravel.
1. Scrie aceasta comanda in CLI:
php artisan make:controller PhotoController --resource
Va crea un fisier "PhotoController.php" in directorul app/Http/Controllers/, cu o clasa care extinde Controller de baza, si cate o metoda pentru fiecare din operatiunile CRUD valabile.
Poti crea manual fisierul PhotoController cu codul clasei presentat mai jos.

2. Sa adaugam un sir simplu la 'return' in fiecare metoda a clasei PhotoController pentru a face teste.
Copiaza acest cod in fisierul "PhotoController.php":
namespace App\Http\Controllers;
use Illuminate\Http\Request;

class PhotoController extends Controller {
  //Display a listing of the resource.
  //@return \Illuminate\Http\Response
  public function index(){
    return 'index';
  }

  //Show the form for creating a new resource.
  //@return \Illuminate\Http\Response
  public function create(){
    return 'create';
  }

  //Store a newly created resource in storage.
  //@param \Illuminate\Http\Request $request
  //@return \Illuminate\Http\Response
  public function store(Request $request){
    return 'store, uri: '. $request->path();
  }

  //Display the specified resource.
  //@param int $id
  //@return \Illuminate\Http\Response
  public function show($id){
    return 'show, id: '. $id;
  }

  //Show the form for editing the specified resource.
  //@param int $id
  //@return \Illuminate\Http\Response
  public function edit($id){
    return 'edit, id: '. $id;
  }

  //Update the specified resource in storage.
  //@param \Illuminate\Http\Request  $request
  //@param int $id
  //@return \Illuminate\Http\Response
  public function update(Request $request, $id){
    return 'update, uri: '. $request->path() .' - id: '. $id;
  }

  //Remove the specified resource from storage.
  //@param int $id
  //@return \Illuminate\Http\Response
  public function destroy($id){
    return 'destroy, id: '. $id;
  }
}
3. Acum, adauga urmatoare linie de cod in fisierul routes/web.php.
Route::resource('photo', 'PhotoController');
- Aceasta singura instructiune creaza multiple "Route" pentru a se ocupa de mai multe tipuri apelari.
Tip-Apel URI Actiune Nume Route
GET /photo index photo.index
GET /photo/create create photo.create
POST /photo store photo.store
GET /photo/{photo} show photo.show
GET /photo/{photo}/edit edit photo.edit
PUT/PATCH /photo/{photo} update photo.update
DELETE /photo/{photo} destroy photo.destroy
4. Incearca sa executi URL-urile aratate in urmatorul tabel.
URL Descriere Output
http://localhost:8000/photo Executa metoda index() din PhotoController.php index
http://localhost:8000/photo/create Executa metoda create() din PhotoController.php create
http://localhost:8000/photo/1 Executa metoda show() din PhotoController.php show
http://localhost:8000/photo/1/edit Executa metoda edit() din PhotoController.php edit

Deoarece formularele HTML nu pot face cereri PUT, PATCH (pentru update) sau DELETE (pentru stergere), va trebui sa adaugi un camp ascuns, cu name='method_' pentru a indica aceste tipuri de cereri HTTP. Functia method_field() poate crea automat acest camp:
{{method_field('PUT')}}
Daca vrei sa stii ce route-uri sunt valabile in aplicatia curenta, ruleaza in command line:
php artisan route:list
- vei primi o lista cu toate route-urile valabile.
In mod implicit, toate actiunile unui resource controller au un nume de route.
Pentru a prelua numele route-ului curent, foloseste:
$request->route()->getName()
Sau cu Route facade:
use Illuminate\Support\Facades\Route;

$route = Route::current();

$name = Route::currentRouteName();

$action = Route::currentRouteAction();

Constructor Injection

Constructor Injection se refera la trimiterea de dependente (instante de clase) la metoda __construct() din controller. Aceste dependente vor putea fi folosite in controller.
- Sa testam un exemplu.

1. Creaza un fisier "TestController.php" in "app/Http/Controllers/", si adauga acest cod:
namespace App\Http\Controllers;
use Illuminate\Http\Request;

class TestController extends Controller {
   private $myclass;

   //automatically inject instance of MyClass
   public function __construct(\MyClass $myclass){
    $this->myclass = $myclass;
   }

   //Responds to requests to /test
   public function index(){
     echo $this->myclass->prop1;
     dd($this->myclass); //to see properties of myclass instance
   }
}
2. Adauga urmatorul cod in fisierulroutes/web.php, pentru a directiona cererea '/test' catre un controller specific:
class MyClass{
  public $prop1 ='value 1';
  public $prop_2 ='value 2';
}

Route::get('test', 'TestController@index');
3. Acum daca accesezi in browser: //localhost:8000/test/, va afisa o pagina ca in imaginea urmatoare:

controller class injection

Injection in Metode

De asemenea, se pot trimite dependente (instante de clase) si in metodele controller-ului.
- Exemplu.

1. Creaza un fisier "TestController.php" in "app/Http/Controllers/" si adauga acest cod:
namespace App\Http\Controllers;
use Illuminate\Http\Request;

class TestController extends Controller {

   //Responds to requests to /test
   //automatically inject instance of MyClass
   public function index(\MyClass $myclass){
     echo $myclass->prop1;
     dd($myclass); //to see properties of myclass instance
   }
}
2. In fisierul routes/web.php lasa codul folosit in exemplu anterior pentru constructor-injection.
3. Acum, daca accesezi acest URL in browser://localhost:8000/test/, va afisa o pagina ca in urmatoarea imagine:

controller class injection

- Documentatie: Laravel - Controllers

Un Test simplu in fiecare zi

HTML
CSS
JavaScript
PHP-MySQL
Engleza
Spaniola
Care tag HTML5 defineste un text marcat, evidentiat?
<mark> <embed> <span>
<p>Cursuri graruite: <mark>MarPlo.net</mark> , jocuri, anime.</p>
Ce pseudo-clasa CSS defineste un stil la element cand mouse-ul e deasupra lui?
:focus :hover :active
a:hover {
  font-weight: bold;
  color: #00da01;
}
Clic pe functia ce returneaza un sir cu un numar rotunjit la x decimale.
toPrecision(x) toFixed(x) floor(x)
var num = 12.34567;
num = num.toFixed(2);
alert(num);       // 12.35
Indicati functia PHP care adauga continutul unui fisier intr-un array.
[) file() readfile()
$arr = file("a_file.txt", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
var_export($arr);
Clic pe raspunsul potrivit la intrebarea: "What time is it?"
On the 7th of July 1996 It is a quarter to 5. Nice weather.
What time is it? It is a quarter to 5.
- Cat este ora? E 5 fara un sfert.
Indicati raspunsul potrivit la intrebarea: "¿Qué hora es?"
Hace buen tiempo. En el 7 de julio de 1996 Son las tres menos cuarto.
¿Qué hora es? Son las tres menos cuarto.
- Cat este ora? E 3 fara un sfert.
Laravel Controller

Last accessed pages

  1. Scriere scripturi PHP elementare (1576)
  2. Conditional IF in Limba Engleza - Fraze Conditionale (20736)
  3. Curs PHP MySQL, Tutoriale si Scripturi PHP (6659)
  4. Espanol Chistes - Glume, Bancuri (877)
  5. Sintaxa JavaScript (2435)

Popular pages this month

  1. Gramatica limbii engleze - Prezentare Generala (2144)
  2. Prezentul simplu si continuu - Present Tense Simple and Continuous (1480)
  3. Cursuri si Tutoriale: Spaniola, Engleza, HTML, CSS, Php-Mysql, JavaScript, Ajax (1072)
  4. Trecutul simplu si continuu - Past Tense Simple and Continuous (1025)
  5. Prezent perfect si Prezent perfect continuu - Present perfect and Continuous (981)