Symfony-controllers
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()*関数は、特定の値の配列を検索します。