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