Zoeken…


Invoering

Een controller in Symfony is een PHP-opvraagbaar (een functie, een methode op een object of een afsluiting) die een HTTP-verzoek ontvangt en een HTTP-antwoord retourneert. Een HTTP-reactie kan alles bevatten: een HTML-pagina, een JSON-string, een bestandsdownload, enz.

Om Symfony te vertellen welke controller een bepaald verzoek moet verwerken, moet u een route configureren .

Syntaxis

  • $ this-> genererenUrl ('route_name', ['placeholder' => 'value']); // genereert een URL voor de route route_name met een tijdelijke aanduiding
  • $ This-> render ( 'template.html.twig'); // geeft een Twig-sjabloon weer en retourneert een Response-object
  • $ this-> render ('template.html.twig', ['parameter' => $ value]); // geeft een Twig-sjabloon met een parameter weer
  • gooi $ this-> createNotFoundException ('Message'); // gooit een NotFoundHttpException waardoor Symfony een 404-reactie retourneert

Opmerkingen

Controllers moeten klein zijn en zich richten op het afhandelen van HTTP-aanvragen: de werkelijke bedrijfslogica van uw applicatie moet worden gedelegeerd naar verschillende delen van uw applicatie, bijvoorbeeld uw domeinmodel.

Een eenvoudige controllerklasse

// 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>'
        );
    }
}

Een Twig-sjabloon renderen

Meestal wilt u HTML-reacties van een sjabloon weergeven in plaats van de HTML in uw controller hard te coderen. Uw sjablonen zijn ook niet statisch, maar bevatten tijdelijke aanduidingen voor applicatiegegevens. Standaard wordt Symfony geleverd met Twig, een krachtige sjabloontaal.

Met het oog op Twig gebruiken in je controller, het uitbreiden van Symfony's base Controller class:

// 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]);
    }
}

Maak de Twig-sjabloon (in app/Resources/views/hello-world.html.twig ):

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

Twig zal de {{ text }} tijdelijke aanduiding automatisch vervangen door de waarde van de parameter text , doorgegeven door de controller. Dit levert de volgende HTML-uitvoer op:

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

Retourneren van een 404-pagina (niet gevonden)

Soms wilt u een 404-reactie (niet gevonden) retourneren, omdat de gevraagde bron niet bestaat. Met Symfony kunt u dit doen door een NotFoundHttpException gooien.

De Symfony-basiscontroller onthult een methode createNotFoundException die de uitzondering voor u creëert:

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(...);
}

Gegevens uit het Request-object gebruiken

Als u toegang moet krijgen tot het object Request (bijvoorbeeld om de queryparameters te lezen, een HTTP-header te lezen of een geüpload bestand te verwerken), kunt u de aanvraag ontvangen als methodeargument door een argument met typetips toe te voegen:

use Symfony\Component\HttpFoundation\Request;

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

    // ...
}

Symfony herkent de typetip en voegt het verzoekargument toe aan de controlleraanroep.



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow