Sök…
Introduktion
En styrenhet i Symfony är en PHP-konverterbar (en funktion, en metod på ett objekt eller en stängning) som får en HTTP-begäran och returnerar ett HTTP-svar. Ett HTTP-svar kan innehålla allt: en HTML-sida, en JSON-sträng, en filnedladdning, etc.
För att berätta för Symfony vilken styrenhet som ska hantera en viss begäran måste du konfigurera en rutt .
Syntax
- $ this-> genereraUrl ('route_name', ['placeholder' => 'värde']); // genererar en URL för ruttens
route_name
med en platshållare - $ This-> render (template.html.twig '); // ger en Twig-mall och returnerar ett svar-objekt
- $ this-> render ('template.html.twig', ['parameter' => $ värde]); // ger en Twig-mall med en parameter
- kasta $ this-> createNotFoundException ('Meddelande'); // kastar en NotFoundHttpException som får Symfony att ge ett 404 svar
Anmärkningar
Controllers bör vara små och fokusera på att hantera HTTP-förfrågningar: den faktiska affärslogiken för din ansökan bör delegeras till olika delar av din ansökan, till exempel din domänmodell.
En enkel kontrollklasse
// 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 en kvist mall
För det mesta vill du göra HTML-svar från en mall istället för att koda HTML-koden i din controller. Dessutom kommer dina mallar inte att vara statiska utan kommer att innehålla platshållare för applikationsdata. Som standard kommer Symfony med Twig, ett kraftfullt mallspråk.
För att använda Twig i din styrenhet, utöka Symfonys Controller
:
// 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]);
}
}
Skapa Twig-mallen (finns i app/Resources/views/hello-world.html.twig
):
<html><body>{{ text }}</body></html>
Twig kommer automatiskt ersätta {{ text }}
platshållare med värdet för text
passerade av styrenheten. Detta ger följande HTML-output:
<html><body>Hello World!</body></html>
Återvända en 404-sida (hittades inte)
Ibland vill du returnera ett 404 (Not Found) svar, eftersom den begärda resursen inte finns. Med Symfony kan du göra det genom att kasta en NotFoundHttpException
.
Symfony-baskontrollen exponerar en createNotFoundException
metod som skapar undantaget för dig:
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(...);
}
Använda data från Request-objektet
Om du behöver Request
objektet Request
(till exempel för att läsa frågeparametrarna, läsa en HTTP-rubrik eller för att bearbeta en uppladdad fil) kan du få begäran som ett metodargument genom att lägga till ett typ-antyddat argument:
use Symfony\Component\HttpFoundation\Request;
public function indexAction(Request $request)
{
$queryParam = $request->query->get('param');
// ...
}
Symfony kommer att känna igen typtippet och lägga till förfrågningsargumentet i controller-samtalet.