Szukaj…
Zwraca odpowiedź 404
404 odpowiedzi są zwracane, gdy zasób nie zostanie znaleziony na serwerze, w Symfony status ten można utworzyć, NotFoundHttpException
wyjątek NotFoundHttpException
. Aby uniknąć dodatkowej instrukcji use
wewnątrz kontrolera, użyj createNotFoundException()
udostępnionego przez klasę Controller
<?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));
}
}
Wiele tras
W Symfony można zdefiniować wiele tras dla jednej akcji. Może to być bardzo pomocne, jeśli masz funkcje, które robią to samo, ale mają różne parametry.
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));
}
}
Przekierowanie żądania POST
Gdy jesteś w kontrolerAkcji I nadchodzi żądanie POST , ale chcesz go przekierować na inną trasę , zachowując jednocześnie metodę POST i obiekt żądania , możesz użyć:
return $this->redirectToRoute('route', array(
'request' => $request,
), 307);
Kod 307 tutaj zachowuje metodę żądania.
Routing oparty na subdomenach
Routing oparty na subdomenach może być obsługiwany w Symfony za pomocą parametru host
. Na przykład parametr _locale
może być użyty jako wartość subdomeny.
Zarozumiały
locale: en
domain: somedomain.com
parametry są zdefiniowane w pliku konfiguracyjnym parameters.yml
, trasa wyglądałaby następująco:
/**
* @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%"}
* )
*/
Od tego momentu router może obsługiwać identyfikatory URI, takie jak http://de.somedomain.com
. Druga adnotacja @Route
może zostać wykorzystana jako @Route
domyślnych ustawień regionalnych i nieważnych subdomen, http://somedomain.com
.
Trasy Symfony przy użyciu Routing.yml
profile_user_profile:
path: /profile/{id}
defaults: { _controller: ProfileBundle:Profile:profile }
requirements:
id: \d+
methods: [get, delete]
Jeśli zdecydujesz się użyć Routing.yml zamiast Adnotacji, możesz uzyskać lepszy widok wszystkich tras i łatwiej je wyszukać i znaleźć.
Od Ciebie zależy, czy wybierzesz pomiędzy Routing.yml i Adnotacje . Możesz używać obu na różnych trasach, ale nie jest to najlepsze rozwiązanie.
Odpowiednik adnotacji @Route()
to:
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));
}
}