Sök…
Returnera ett 404 svar
404 svar returneras när en resurs inte hittas på servern, i Symfony kan denna status skapas genom att kasta ett NotFoundHttpException
undantag. createNotFoundException()
tillhandahålls av klassen Controller
att undvika ett uttalande om extra use
i en kontroller
<?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));
}
}
Flera rutter
I Symfony är det möjligt att definiera flera rutter för en åtgärd. Detta kan vara till stor hjälp om du har funktioner som gör samma sak men har olika parametrar.
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-begäran omdirigering
När du befinner dig i en controllerAction Och har en POST-förfrågan som kommer in , men vill omdirigera den till en annan rutt , medan du fortfarande behåller POST-metoden och förfrågningsobjektet , kan du använda följande:
return $this->redirectToRoute('route', array(
'request' => $request,
), 307);
Kod 307 bevarar här begärningsmetoden.
Subdomänbaserad routing
Domän Baserad routing kan hanteras i Symfony använda host
parameter. Till exempel kan _locale
parameter användas som underdomänsvärde.
Förutsatt
locale: en
domain: somedomain.com
parametrar definieras i parameters.yml
konfigurationsfil, rutten skulle vara:
/**
* @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%"}
* )
*/
Från denna punkt kan routern hantera URI: s som http://de.somedomain.com
. Den andra @Route
kommentaren kan användas som ett fallback för standarddistrikt och ogiltigt underdomän, http://somedomain.com
.
Symfony-rutter med Routing.yml
profile_user_profile:
path: /profile/{id}
defaults: { _controller: ProfileBundle:Profile:profile }
requirements:
id: \d+
methods: [get, delete]
Om du bestämmer dig för att använda Routing.yml istället för kommentarer Du kan få en bättre bild av alla rutter och lättare att söka och hitta en.
Det är upp till dig att välja mellan Routing.yml och Annotations . Du kan använda båda för olika rutter men detta är inte den bästa lösningen.
Annotation @Route()
ekvivalent är:
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));
}
}