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、メソッド、およびいくつかのパラメーターに基づいてリクエストを作成します。
リクエストオブジェクトのオーバーライド
PHPグローバル変数を使用してオーバーライドできます overrideGlobals()方法。それは次のように定義されます。
$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')
);
たとえば、content引数を次のように渡すことができます。
$response->setContent(’Student details’);
同様に、他の引数を渡すこともできます。
応答の送信
を使用してクライアントに応答を送信できます send()方法。それは次のように定義されます。
$response->send();
クライアントを別のURLにリダイレクトするには、 RedirectResponse クラス。
それは次のように定義されます。
use Symfony\Component\HttpFoundation\RedirectResponse;
$response = new RedirectResponse('http://tutorialspoint.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() 関数は、配列で特定の値を検索します。