Zoeken…
Retourneer een 404-reactie
404 antwoorden worden geretourneerd wanneer een bron niet op de server wordt gevonden. In Symfony kan deze status worden gemaakt door een uitzondering NotFoundHttpException
. Gebruik de createNotFoundException()
van de klasse Controller
om een extra use
in een controller te voorkomen
<?php
namespace Bundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
class TestController extends Controller
{
/**
* @Route("/{id}", name="test")
* Recommended to avoid template() as it has a lot of background processing.
* Query database for 'test' record with 'id' using param converters.
*/
public function testAction(Test $test)
{
if (!$test) {
throw $this->createNotFoundException('Test record not found.');
}
return $this->render('::Test/test.html.twig', array('test' => $test));
}
}
Meerdere routes
In Symfony is het mogelijk om meerdere routes voor één actie te definiëren. Dit kan erg handig zijn als u functies hebt die hetzelfde doen, maar verschillende parameters hebben.
class TestController extends Controller
{
/**
* @Route("/test1/{id}", name="test")
* @Route("/test2/{id}", name="test2")
* Here you can define multiple routes with multiple names
*/
public function testAction(Test $test)
{
if (!$test) {
throw $this->createNotFoundException('Test record not found.');
}
return $this->render('::Test/test.html.twig', array('test' => $test));
}
}
POST-verzoek omleiden
Wanneer u zich in een controllerActie bevindt en een POST-aanvraag binnenkomt , maar deze wilt omleiden naar een andere route , met behoud van de POST-methode en het aanvraagobject , kunt u het volgende gebruiken:
return $this->redirectToRoute('route', array(
'request' => $request,
), 307);
Code 307 behoudt hier de aanvraagmethode.
Op subdomein gebaseerde routing
Op subdomein gebaseerde routing kan in Symfony worden afgehandeld met behulp van host
hostparameter. De parameter _locale
kan bijvoorbeeld worden gebruikt als waarde voor het subdomein.
Ervan uitgaand
locale: en
domain: somedomain.com
parameters zijn gedefinieerd in parameters.yml
configuratiebestand, route zou zijn:
/**
* @Route(
* "/",
* name="homepage",
* host="{_locale}.{domain}",
* defaults={"_locale" = "%locale%", "domain" = "%domain%"},
* requirements={"_locale" = "%locale%|de|fr", "domain" = "%domain%"}
* )
* @Route(
* "/",
* name="homepage_default",
* defaults={"_locale" = "%locale%"}
* )
*/
Vanaf dit punt kan de router URI's zoals http://de.somedomain.com
verwerken. Tweede @Route
annotatie kan worden gebruikt als reserve voor standaardlocale en ongeldig subdomein, http://somedomain.com
.
Symfony-routes met behulp van Routing.yml
profile_user_profile:
path: /profile/{id}
defaults: { _controller: ProfileBundle:Profile:profile }
requirements:
id: \d+
methods: [get, delete]
Als u besluit Routing.yml te gebruiken in plaats van Annotaties, kunt u alle routes beter bekijken en gemakkelijker zoeken en vinden.
Het is aan jou om te kiezen tussen Routing.yml en Annotaties . Je kunt beide voor verschillende routes gebruiken, maar dit is niet de beste oplossing.
Annotatie @Route()
equivalent is:
class ProfileController extends Controller
{
/**
* @Route("/profile/{id}", name="profile_user_profile", requirements={"id": "\d+"})
* @Method("GET", "DELETE")
*/
public function profileAction($id)
{
if (!$id) {
throw $this->createNotFoundException('User not found.');
}
return $this->render('::Profile/profile.html.twig', array('id' => $id));
}
}