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.