Curs Php-mysql

- 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 atribut specifica adresa unde sunt trimise datele din formular?
method action name
<form action="script.php" method="post"> ... </form>
Ce proprietate CSS desparte cuvinte lungi, adaugand pe rand nou?
word-wrap line-height font-size
#id {
  width: 100px;
  word-wrap: break-word;
}
Ce functie aranjeaza elementele din array in ordine alfabetica, bazat pe valorile lor?
pop() sort() shift()
var tutorials = ["php", "html", "css", "flash"];
tutorials.sort();
alert(tutorials[0]);          // css
Indicati functia care returneaza valoarea ultimului element din array.
current() next() end()
$code =[10=>"Perl", 20=>"PHP", 21=>"Python", 30=>"JavaScript");
$last = end($code);
echo $last;      // JavaScript
Alegeti verbul auxiliar corect care trebuie in propozitia: "Her plane ... just arrived".
have has does
Her plane has just arrived.
- Avionul ei tocmai a sosit.
Indicati forma corecta a verbului SER (a fi) in propozitia: "Vosotros ... muy simpáticos".
son soy sois
Vosotros sois muy simpáticos.
- Sunteti foarte simpatici.
Laravel Controller

Last accessed pages

  1. Jokes - Glume, Bancuri, Humor (2) (14699)
  2. Forma Inima cu CSS (323)
  3. Trecutul nedefinit 2 (1285)
  4. Cursuri si Tutoriale: Engleza, Spaniola, HTML, CSS, Php-Mysql, JavaScript, Ajax (256249)
  5. Prefixele dis-, mis-, un-. The DIS, MIS and UN prefixes (11152)

Popular pages this month

  1. Exercitii engleza - English Tests and exercises - Grammar (205)
  2. Cursuri si Tutoriale: Engleza, Spaniola, HTML, CSS, Php-Mysql, JavaScript, Ajax (164)
  3. Conditional IF in Limba Engleza - Fraze Conditionale (161)
  4. Pronumele in limba engleza - Pronouns (122)
  5. Prezentul simplu si continuu - Present Tense Simple and Continuous (98)