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.