Symfony - Controllori

Il controller è responsabile della gestione di ogni richiesta che arriva nell'applicazione Symfony. Il controller legge un'informativa dalla richiesta. Quindi, crea e restituisce un oggetto risposta al client.

Secondo Symfony, DefaultController class si trova in “src/AppBundle/Controller”. È definito come segue.

DefaultController.php

<?php 
namespace AppBundle\Controller; 
use Symfony\Bundle\FrameworkBundle\Controller\Controller; 
use Symfony\Component\HttpFoundation\Response;  

class DefaultController extends Controller {  
}

Qui, il HttpFoundation Il componente definisce un livello orientato agli oggetti per la specifica HTTP e il FrameworkBundle contiene la maggior parte delle funzionalità del framework "base".

Richiedi oggetto

La classe Request è una rappresentazione orientata agli oggetti del messaggio di richiesta HTTP.

Creazione di un oggetto richiesta

La richiesta può essere creata utilizzando createFromGlobals() metodo.

use Symfony\Component\HttpFoundation\Request; 
$request = Request::createFromGlobals();

Puoi simulare una richiesta utilizzando Globals. Invece di creare una richiesta basata sui globali PHP, puoi anche simulare una richiesta.

$request = Request::create( 
   '/student', 
   'GET', 
   array('name' => 'student1') 
);

Qui, il create() metodo crea una richiesta basata su un URI, un metodo e alcuni parametri.

Sostituzione di un oggetto richiesta

Puoi sovrascrivere le variabili globali PHP usando il overrideGlobals()metodo. È definito come segue.

$request->overrideGlobals();

Accesso a un oggetto richiesta

È possibile accedere alla richiesta di una pagina Web in un controller (metodo di azione) utilizzando getRequest() metodo del controller di base.

$request = $this->getRequest();

Identificazione di un oggetto richiesta

Se desideri identificare una richiesta nella tua applicazione, “PathInfo"restituirà l'identità univoca dell'URL della richiesta. È definito come segue.

$request->getPathInfo();

Oggetto risposta

L'unico requisito per un controller è restituire un oggetto Response. Un oggetto Response contiene tutte le informazioni di una determinata richiesta e le invia al client.

Di seguito è riportato un semplice esempio.

Esempio

use Symfony\Component\HttpFoundation\Response; 
$response = new Response(‘Default'.$name, 10);

È possibile definire l'oggetto Response in JSON come segue.

$response = new Response(json_encode(array('name' => $name))); 
$response->headers->set('Content-Type', 'application/json');

Costruttore di risposta

Il costruttore contiene tre argomenti:

  • Il contenuto della risposta
  • Il codice di stato
  • Un array di intestazioni HTTP

Di seguito è riportata la sintassi di base.

use Symfony\Component\HttpFoundation\Response;  
$response = new Response( 
   'Content', 
   Response::HTTP_OK, 
   array('content-type' => 'text/html') 
);

Ad esempio, puoi passare l'argomento contenuto come,

$response->setContent(’Student details’);

Allo stesso modo, puoi passare anche altri argomenti.

Invio della risposta

Puoi inviare una risposta al client utilizzando il send()metodo. È definito come segue.

$response->send();

Per reindirizzare il client a un altro URL, puoi utilizzare il RedirectResponse classe.

È definito come segue.

use Symfony\Component\HttpFoundation\RedirectResponse;  
$response = new RedirectResponse('http://tutorialspoint.com/');

FrontController

Un singolo file PHP che gestisce ogni richiesta in arrivo nella tua applicazione. FrontController esegue il routing di URL diversi verso parti diverse internamente dell'applicazione.

Di seguito è riportata la sintassi di base per FrontController.

use Symfony\Component\HttpFoundation\Request; 
use Symfony\Component\HttpFoundation\Response;  

$request = Request::createFromGlobals();  
$path = $request->getPathInfo(); // the URI path being requested 

if (in_array($path, array('', '/'))) { $response = new Response(’Student home page.'); 
} elseif (‘/about’ === $path) { $response = new Response(’Student details page’); 
} else { 
   $response = new Response('Page not found.', Response::HTTP_NOT_FOUND); } $response->send();

Qui, il in_array() la funzione cerca un array per un valore specifico.