Symfony 请求
最后修改于 2020 年 7 月 12 日
Symfony 请求教程展示了如何在 Symfony 中处理请求对象。我们展示了几种在 Symfony 中创建请求对象的方法。
Symfony
Symfony 是一套可重用的 PHP 组件和一个用于 Web 项目的 PHP 框架。Symfony 于 2005 年发布为自由软件。Symfony 的最初作者是 Fabien Potencier。该框架的开发由法国公司 Sensio Labs 赞助。
Symfony HttpFoundation 组件
Symfony HttpFoundation 组件定义了一个面向对象的 HTTP 规范层。该组件以面向对象的方式表示请求/响应过程。在最低级别,我们有 PHP 全局变量,如 $_GET、$_POST 或 $_FILES。这些由 Request 对象表示。响应则由 Response 对象表示。
Symfony 请求示例
在下面的示例中,我们通过链接创建了三个不同的请求。
$ symfony new symreq
使用 composer,我们创建一个新的 Symfony 骨架项目。
$ cd symreq
我们进入项目目录。
$ composer req annot twig
我们安装 annotations 和 twig 模块。
$ composer req maker --dev
我们安装 maker 组件。
$ php bin/console make:controller HomeController
创建了一个 HomeController。
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Annotation\Route;
class HomeController extends AbstractController
{
/**
* @Route("/", name="home")
*/
public function index()
{
return $this->render('home/index.html.twig');
}
}
HomeController 返回一个包含锚点标签的主页。
{% extends 'base.html.twig' %}
{% block title %}Home page{% endblock %}
{% block body %}
<ul>
<li><a href="/myapp?colour=yellow&day=Saturday">First request</a></li>
<li><a href="/myapp2?colour=green&day=Sunday">Second request</a></li>
<li><a href="/myapp3?colour=red&day=Monday">Third request</a></li>
</ul>
{% endblock %}
HomeController 返回一个包含三个链接的主页。每个链接都有两个查询参数。它们指向不同的控制器方法。
{% extends 'base.html.twig' %}
该模板继承自 base.html.twig 文件,该文件包含将共享的基础标记。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>{% block title %}Welcome!{% endblock %}</title>
{% block stylesheets %}{% endblock %}
</head>
<body>
{% block body %}{% endblock %}
</body>
</html>
base.html.twig 模板包含其他模板文件共享的代码。它定义了将在子模板中替换的块。
$ php bin/console make:controller MyappController
创建了一个 MyappController。
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
class MyappController extends AbstractController
{
/**
* @Route("/myapp", name="myapp")
*/
public function process()
{
$request = Request::createFromGlobals();
$col = $request->query->get("colour");
$day = $request->query->get("day");
$content = "Colour: $col, day: $day";
return new Response($content);
}
/**
* @Route("/myapp2", name="myapp2")
*/
public function process2()
{
$request = new Request(
$_GET,
$_POST,
array(),
$_COOKIE,
$_FILES,
$_SERVER
);
$col = $request->query->get("colour");
$day = $request->query->get("day");
$content = "Colour: $col, day: $day";
return new Response($content);
}
/**
* @Route("/myapp3", name="myapp3")
*/
public function process3(Request $request)
{
$data = $request->query->all();
$col = $data["colour"];
$day = $data["day"];
$content = "Colour: $col, day: $day";
return new Response($content);
}
}
MyappController 处理由链接创建的三个 GET 请求。
$request = Request::createFromGlobals();
$col = $request->query->get("colour");
$day = $request->query->get("day");
请求对象使用 Request::createFromGlobals() 创建。GET 参数使用 get() 方法检索。
$request = new Request(
$_GET,
$_POST,
array(),
$_COOKIE,
$_FILES,
$_SERVER
);
在第二种情况下,请求是使用 new 关键字创建的。它传递了 PHP 全局变量。
public function process3(Request $request)
{
$data = $request->query->all();
...
在第三种情况下,请求对象是通过 Symfony 的依赖注入注入的。我们使用 all() 方法从请求中获取所有参数。
$col = $data["colour"]; $day = $data["day"];
我们从数组中获取值。
$content = "Colour: $col, day: $day"; return new Response($content);
我们构建内容并返回一个 Response 对象。
$ symfony serve
我们启动 Web 服务器并访问 https://:8000。
在本教程中,我们处理了 Symfony 中的请求。
列出 所有 Symfony 教程。