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();

您可以使用Globals模拟请求。您可以模拟请求,而不是创建基于PHP全局变量的请求。

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

这里, create() 方法根据URI,方法和一些参数创建一个请求。

覆盖请求对象

您可以使用 overrideGlobals() 方法覆盖PHP全局变量。它被定义如下。

$request->overrideGlobals();

访问请求对象

可以使用基本控制器的 getRequest() 方法在控制器(操作方法)中访问网页的请求。

$request = $this->getRequest();

识别请求对象

如果您想在应用程序中标识请求, “PathInfo” 方法将返回请求url的唯一标识,定义如下。

$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');

响应构造函数

构造函数包含三个参数 -

  • 响应内容
  • 状态码
  • 一个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://CodingDict.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() 函数在数组中搜索特定的值。