Symfony-controllers

提供:Dev Guides
移動先:案内検索

Symfony-コントローラー

コントローラーは、Symfonyアプリケーションに入ってくる各リクエストを処理する責任があります。 コントローラーは要求から情報を読み取ります。 次に、応答オブジェクトを作成してクライアントに返します。

Symfonyによると、 DefaultController クラスは*“ src/AppBundle/Controller” *にあります。 次のように定義されています。

DefaultController.php

<?php
namespace AppBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Response;

class DefaultController extends Controller {
}

ここで、 HttpFoundation コンポーネントはHTTP仕様のオブジェクト指向レイヤーを定義し、 FrameworkBundle にはほとんどの「ベース」フレームワーク機能が含まれています。

リクエストオブジェクト

Requestクラスは、HTTP要求メッセージのオブジェクト指向表現です。

リクエストオブジェクトの作成

要求は、* createFromGlobals()*メソッドを使用して作成できます。

use Symfony\Component\HttpFoundation\Request;
$request = Request::createFromGlobals();

グローバルを使用してリクエストをシミュレートできます。 PHPグローバルに基づいてリクエストを作成する代わりに、リクエストをシミュレートすることもできます。

$request = Request::create(
   '/student',
   'GET',
   array('name' => 'student1')
);

ここで、* create()*メソッドは、URI、メソッド、およびいくつかのパラメーターに基づいてリクエストを作成します。

リクエストオブジェクトのオーバーライド

  • overrideGlobals()*メソッドを使用して、PHPグローバル変数をオーバーライドできます。 次のように定義されています。
$request->overrideGlobals();

リクエストオブジェクトへのアクセス

Webページのリクエストには、ベースコントローラーの* getRequest()*メソッドを使用して、コントローラー(アクションメソッド)でアクセスできます。

$request = $this->getRequest();

リクエストオブジェクトの特定

アプリケーションでリクエストを識別する場合、*“ PathInfo” *メソッドはリクエストURLの一意のIDを返します。 次のように定義されています。

$request->getPathInfo();

応答オブジェクト

コントローラーの唯一の要件は、Responseオブジェクトを返すことです。 Responseオブジェクトは、指定されたリクエストからのすべての情報を保持し、クライアントに送り返します。

以下は簡単な例です。

use Symfony\Component\HttpFoundation\Response;
$response = new Response(‘Default'.$name, 10);

次のように、JSONでResponseオブジェクトを定義できます。

$response = new Response(json_encode(array('name' => $name)));
$response->headers->set('Content-Type', 'application/json');

応答コンストラクター

コンストラクタには3つの引数が含まれています-

  • 応答内容
  • 状態コード
  • HTTPヘッダーの配列

基本的な構文は次のとおりです。

use Symfony\Component\HttpFoundation\Response;
$response = new Response(
   'Content',
   Response::HTTP_OK,
   array('content-type' => 'text/html')
);

たとえば、コンテンツ引数を次のように渡すことができます。

$response->setContent(’Student details’);

同様に、他の引数も渡すことができます。

応答を送信する

  • send()*メソッドを使用して、クライアントに応答を送信できます。 次のように定義されています。
$response->send();

クライアントを別のURLにリダイレクトするには、 RedirectResponse クラスを使用できます。

次のように定義されています。

use Symfony\Component\HttpFoundation\RedirectResponse;
$response = new RedirectResponse('http://finddevguides.com/');

FrontController

アプリケーションに着信するすべてのリクエストを処理する単一のPHPファイル。 FrontControllerは、アプリケーションの内部的に異なる部分への異なるURLのルーティングを実行します。

以下は、FrontControllerの基本的な構文です。

use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;

$request = Request::createFromGlobals();
$path = $request->getPathInfo();//the URI path being requested

if (in_array($path, array('', '/')))  {
   $response = new Response(’Student home page.');
} elseif (‘/about’ === $path) {
   $response = new Response(’Student details page’);
} else {
   $response = new Response('Page not found.', Response::HTTP_NOT_FOUND);
}
$response->send();

ここで、* in_array()*関数は、特定の値の配列を検索します。