Ricerca…


introduzione

Un controller in Symfony è un PHP callable (una funzione, un metodo su un oggetto o una chiusura) che riceve una richiesta HTTP e restituisce una risposta HTTP. Una risposta HTTP può contenere qualsiasi cosa: una pagina HTML, una stringa JSON, un download di file, ecc.

Per comunicare a Symfony quale controller deve gestire una determinata richiesta, è necessario configurare una rotta .

Sintassi

  • $ this-> generateUrl ('route_name', ['placeholder' => 'value']); // genera un URL per la route route_name con un segnaposto
  • $ This-> render ( 'template.html.twig'); // esegue il rendering di un modello Twig e restituisce un oggetto Response
  • $ this-> render ('template.html.twig', ['parameter' => $ value]); // esegue il rendering di un modello Twig con un parametro
  • buttare $ this-> createNotFoundException ('Message'); // lancia una NotFoundHttpException che farà sì che Symfony restituisca una risposta 404

Osservazioni

I controllori dovrebbero essere piccoli e concentrarsi sulla gestione delle richieste HTTP: la logica di business effettiva della tua applicazione dovrebbe essere delegata a diverse parti della tua applicazione, ad esempio il tuo modello di dominio.

Una semplice classe di controller

// src/AppBundle/Controller/HelloWorldController.php
namespace AppBundle\Controller;

use Symfony\Component\HttpFoundation\Response;

class HelloWorldController
{
    public function helloWorldAction()
    {
        return new Response(
            '<html><body>Hello World!</body></html>'
        );
    }
}

Rendering di un modello Twig

Nella maggior parte dei casi, si desidera eseguire il rendering di risposte HTML da un modello invece di codificare l'HTML nel controller. Inoltre, i tuoi modelli non saranno statici ma conterranno segnaposto per i dati dell'applicazione. Per impostazione predefinita, Symfony viene fornito con Twig, un potente linguaggio di template.

Per utilizzare Twig nel controller, estendere la classe Controller base di Symfony:

// src/AppBundle/Controller/HelloWorldController.php
namespace AppBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Response;

class HelloWorldController extends Controller
{
    public function helloWorldAction()
    {
        $text = 'Hello World!';

        return $this->render('hello-world.html.twig', ['text' => $text]);
    }
}

Crea il template Twig (che si trova in app/Resources/views/hello-world.html.twig ):

<html><body>{{ text }}</body></html>

Twig sostituirà automaticamente il segnaposto {{ text }} con il valore del parametro text , passato dal controller. Questo renderà il seguente output HTML:

<html><body>Hello World!</body></html>

Restituzione di una pagina 404 (non trovata)

A volte si desidera restituire una risposta 404 (non trovata), poiché la risorsa richiesta non esiste. Symfony ti consente di lanciare NotFoundHttpException .

Il controller di base di Symfony espone un metodo createNotFoundException che crea l'eccezione per te:

public function indexAction()
{
    // retrieve the object from database
    $product = ...;

    if (!$product) {
        throw $this->createNotFoundException('The product does not exist');
    }

    // continue with the normal flow if no exception is thrown
    return $this->render(...);
}

Utilizzo dei dati dall'oggetto Richiesta

Se è necessario accedere all'oggetto Request (ad esempio per leggere i parametri della query, leggere un'intestazione HTTP o elaborare un file caricato), è possibile ricevere la richiesta come argomento del metodo aggiungendo un argomento type-hinted:

use Symfony\Component\HttpFoundation\Request;

public function indexAction(Request $request)
{
    $queryParam = $request->query->get('param');

    // ...
}

Symfony riconoscerà il suggerimento sul tipo e aggiungerà l'argomento della richiesta alla chiamata del controller.



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow