📜  Symfony-控制器

📅  最后修改于: 2020-10-19 03:15:30             🧑  作者: Mango


控制器负责处理Symfony应用程序中的每个请求。控制器从请求中读取信息。然后,创建一个响应对象并将其返回给客户端。

根据Symfony的说法, DefaultController类位于“ src / AppBundle / Controller”中。定义如下。

DefaultController.php

在这里, 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();

访问请求对象

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

$request = $this->getRequest();

识别请求对象

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

$request->getPathInfo();

响应对象

控制器的唯一要求是返回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') 
); 

例如,您可以将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()函数在数组中搜索特定值。