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));
    }
}


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow