サーチ…


404応答を返す

サーバ上でリソースが見つからなかった場合、404のレスポンスが返されますNotFoundHttpExceptionでは、このステータスは、 NotFoundHttpException例外をスローすることによって生成されます。コントローラ内の余分なuse文を避けるには、 Controllerクラスが提供するcreateNotFoundException()使用し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));
    }

}

複数のルート

Symfonyでは、1つのアクションに対して複数のルートを定義することができます。これは、同じ機能を持ちながら異なるパラメータを持つ関数を持つ場合に非常に役立ちます。

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リクエストのリダイレクト

あなたがcontrollerActionにいるときPOSTメソッドとリクエストオブジェクトを維持しながら、別のルートリダイレクトしたいPOSTリクエストが入ってきたら、次のコマンドを使用できます:

return $this->redirectToRoute('route', array(
    'request' => $request,
), 307);

ここでコード307は要求メソッドを保存します。

サブドメインベースのルーティング

サブドメインベースのルーティングは、symfonyでhostパラメータを使用して処理できます。たとえば、 _localeパラメータをサブドメイン値として使用できます。

想定する

locale: en
domain: somedomain.com

パラメータはparameters.yml configファイルで定義されていますが、routeは次のようになります:

/**
 * @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%"}
 * )
 */

この時点から、ルータはhttp://de.somedomain.comなどのURIを処理できhttp://de.somedomain.com 。 2番目の@Routeアノテーションは、デフォルトのロケールとvoidサブドメインのフォールバックとして使用できます( http://somedomain.com

Routing.ymlを使ったsymfonyのルート

    profile_user_profile:
        path:    /profile/{id}
        defaults: { _controller: ProfileBundle:Profile:profile }
        requirements:
            id: \d+
        methods: [get, delete]

注釈の代わりにRouting.ymlを使用することに決めた場合は、 すべてのルートをよりよく表示し、検索して見つけやすくなります。

Routing.yml注釈の間で選択するのはあなた次第です。両方を異なるルートに使用できますが、これは最善の解決策ではありません。

@Route()アノテーションは次のようになります。

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
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow