- 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 se foloseste in <table> pentru a crea celula de tip "header"?
<thead> <th> <td>
<table><tr>
  <th>Title 1</th>
  <th>Title 2</th>
</tr></table>
Ce proprietate CSS seteaza distanta dintre randuri?
line-height word-spacing margin
.some_class {
  line-height: 150%;
}
Care functie deschide o noua fereastra.
alert() confirm() open()
document.getElementById("id_button").onclick = function(){
  window.open("http://coursesweb.net/");
}
Indicati functia PHP care returneaza un array cu numele fisierelor si directoarelor dintr-un director.
mkdir() scandir() readdir()
$ar_dir = scandir("dir_name");
var_export($ar_dir);
Care din urmatoarele forme a verbului "sleep" (a dormi) se foloseste pentru viitor?
sleeping slept will sleep
He will sleep there.
- El va dormi acolo.
Care din urmatoarele forme a verbului "dormir" (a dormi) se foloseste pentru viitor?
dormido dormirá durmiendo
Él dormirá allí.
- El va dormi acolo.
Laravel Controller

Last accessed pages

  1. Incarcare imagini pe server si afisare cu Ajax (6)
  2. Curs si Tutoriale Ajax (66)
  3. Bubbles3 (3489)
  4. Prezentul simplu - Exercitii si teste incepatori (758)
  5. Butterfly Kyodai (2204)

Popular pages this month

  1. Bubbles3 (3489)
  2. Gramatica limbii engleze - Prezentare Generala (2797)
  3. Prezentul simplu si continuu - Present Tense Simple and Continuous (2526)
  4. Butterfly Kyodai (2204)
  5. Zuma Deluxe (2083)