サーチ…


前書き

Symfonyのコントローラは、HTTPリクエストを受け取り、HTTPレスポンスを返すPHP呼び出し可能関数(関数、オブジェクトのメソッド、またはクロージャ)です。 HTTPレスポンスには、HTMLページ、JSON文字列、ファイルのダウンロードなど、何でも含めることができます。

symfonyにどのコントローラが特定の要求を処理するかを伝えるためには、ルート設定する必要があります

構文

  • $ this-> generateUrl( 'route_name'、['プレースホルダ' => '値']); //プレースホルダをroute_nameしてroute_name URLを生成します
  • $ this-> render( 'template.html.twig'); // Twigテンプレートをレンダリングし、Responseオブジェクトを返します
  • $ this-> render( 'template.html.twig'、['parameter' => $ value]); //パラメータ付きのTwigテンプレートをレンダリングする
  • $ this-> createNotFoundException( 'Message');をスローします。 // NotFoundHttpExceptionをスローし、Symfonyが404応答を返すようにする

備考

コントローラは小さく、HTTPリクエストの処理に重点を置くべきです。アプリケーションの実際のビジネスロジックは、アプリケーションのさまざまな部分(たとえば、ドメインモデル)に委任される必要があります。

シンプルなコントローラクラス

// src/AppBundle/Controller/HelloWorldController.php
namespace AppBundle\Controller;

use Symfony\Component\HttpFoundation\Response;

class HelloWorldController
{
    public function helloWorldAction()
    {
        return new Response(
            '<html><body>Hello World!</body></html>'
        );
    }
}

Twigテンプレートのレンダリング

ほとんどの場合、コントローラのHTMLをハードコードする代わりに、テンプレートからHTMLレスポンスをレンダリングする必要があります。また、テンプレートは静的ではなく、アプリケーションデータのプレースホルダを含みます。デフォルトでは、強力なテンプレート言語であるTwigがSymfonyに付属しています。

あなたのコントローラーでTwigを使用するには、Symfonyの基本Controllerクラスを拡張します:

// src/AppBundle/Controller/HelloWorldController.php
namespace AppBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Response;

class HelloWorldController extends Controller
{
    public function helloWorldAction()
    {
        $text = 'Hello World!';

        return $this->render('hello-world.html.twig', ['text' => $text]);
    }
}

Twigテンプレートを作成します( app/Resources/views/hello-world.html.twig ):

<html><body>{{ text }}</body></html>

Twigは自動的に{{ text }}プレースホルダーをコントローラーが渡すtextパラメーターの値に置き換えます。これにより、次のHTML出力がレンダリングされます。

<html><body>Hello World!</body></html>

404(見つからなかった)ページを返す

リクエストされたリソースが存在しないため、404(Not Found)レスポンスを返すことがあります。 symfonyでは、 NotFoundHttpExceptionスローすることでそうすることができます。

Symfonyベースコントローラーは、例外を作成するcreateNotFoundExceptionメソッドを公開します:

public function indexAction()
{
    // retrieve the object from database
    $product = ...;

    if (!$product) {
        throw $this->createNotFoundException('The product does not exist');
    }

    // continue with the normal flow if no exception is thrown
    return $this->render(...);
}

Requestオブジェクトからのデータの使用

Requestオブジェクトにアクセスする必要がある場合(たとえば、クエリパラメータを読み取る、HTTPヘッダーを読み取る、アップロードされたファイルを処理するなど)、タイプヒント引数を追加して、リクエスト引数をメソッド引数として受け取ることができます。

use Symfony\Component\HttpFoundation\Request;

public function indexAction(Request $request)
{
    $queryParam = $request->query->get('param');

    // ...
}

symfonyはタイプヒントを認識し、コントローラの呼び出しにリクエスト引数を追加します。



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow