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 教程。