{% raw %}

Symfony 请求教程

原文: http://zetcode.com/symfony/request/

Symfony 请求教程展示了如何在 Symfony 中使用请求对象。 我们展示了几种在 Symfony 中创建请求对象的方法。

Symfony

Symfony 是一组可重用的 PHP 组件和一个用于 Web 项目的 PHP 框架。 Symfony 于 2005 年发布为免费软件。Symfony 的原始作者是 Fabien Potencier。 该框架的开发由 Frech 公司 Sensio Labs 赞助。

Symfony HttpFoundation组件

Symfony HttpFoundation组件为 HTTP 规范定义了一个面向对象的层。 该组件以面向对象的方式表示请求/响应过程。 在最低级别上,我们具有 PHP 全局变量,例如$_GET$_POST$_FILES。 这些由Request对象表示。 响应由Response对象表示。

Symfony 请求示例

在下面的示例中,我们使用链接创建三个不同的请求。

  1. $ composer create-project symfony/skeleton symreq

使用composer,我们创建一个新的 Symfony 骨架项目。

  1. $ cd symreq

我们转到项目目录。

  1. $ composer req annotations twig

我们安装模块annotationstwig

  1. $ composer req maker server --dev

我们安装制造商组件和开发 Web 服务器。

  1. $ php bin/console make:controller HomeController

创建了HomeController

src/Controller/HomeController.php

  1. <?php
  2. namespace App\Controller;
  3. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  4. use Symfony\Component\Routing\Annotation\Route;
  5. class HomeController extends AbstractController
  6. {
  7. /**
  8. * @Route("/", name="home")
  9. */
  10. public function index()
  11. {
  12. return $this->render('home/index.html.twig');
  13. }
  14. }

HomeController返回一个包含锚标记的主页。

templates/home/index.html.twig

  1. {% extends 'base.html.twig' %}
  2. {% block title %}Home page{% endblock %}
  3. {% block body %}
  4. <ul>
  5. <li><a href="/myapp?colour=yellow&day=Saturday">First request</a></li>
  6. <li><a href="/myapp2?colour=green&day=Sunday">Second request</a></li>
  7. <li><a href="/myapp3?colour=red&day=Monday">Third request</a></li>
  8. </ul>
  9. {% endblock %}

HomeController返回一个包含三个链接的主页。 每个链接都有两个查询参数。 它们指向不同的控制器方法。

  1. {% extends 'base.html.twig' %}

该模板继承自base.html.twig文件,该文件具有要共享的基本标记。

templates/base.html.twig

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>{% block title %}Welcome!{% endblock %}</title>
  6. {% block stylesheets %}{% endblock %}
  7. </head>
  8. <body>
  9. {% block body %}{% endblock %}
  10. </body>
  11. </html>

base.html.twig模板包含其他模板文件共享的代码。 它定义了将在子模板中替换的块。

  1. $ php bin/console make:controller MyappController

创建了MyappController

src/Controller/MyappController.php

  1. <?php
  2. namespace App\Controller;
  3. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  4. use Symfony\Component\Routing\Annotation\Route;
  5. use Symfony\Component\HttpFoundation\Request;
  6. use Symfony\Component\HttpFoundation\Response;
  7. class MyappController extends AbstractController
  8. {
  9. /**
  10. * @Route("/myapp", name="myapp")
  11. */
  12. public function process()
  13. {
  14. $request = Request::createFromGlobals();
  15. $col = $request->query->get("colour");
  16. $day = $request->query->get("day");
  17. $content = "Colour: $col, day: $day";
  18. return new Response($content);
  19. }
  20. /**
  21. * @Route("/myapp2", name="myapp2")
  22. */
  23. public function process2()
  24. {
  25. $request = new Request(
  26. $_GET,
  27. $_POST,
  28. array(),
  29. $_COOKIE,
  30. $_FILES,
  31. $_SERVER
  32. );
  33. $col = $request->query->get("colour");
  34. $day = $request->query->get("day");
  35. $content = "Colour: $col, day: $day";
  36. return new Response($content);
  37. }
  38. /**
  39. * @Route("/myapp3", name="myapp3")
  40. */
  41. public function process3(Request $request)
  42. {
  43. $data = $request->query->all();
  44. $col = $data["colour"];
  45. $day = $data["day"];
  46. $content = "Colour: $col, day: $day";
  47. return new Response($content);
  48. }
  49. }

MyappController处理由链接创建的三个 GET 请求。

  1. $request = Request::createFromGlobals();
  2. $col = $request->query->get("colour");
  3. $day = $request->query->get("day");

使用Request::createFromGlobals()创建请求对象。 使用get()方法检索 GET 参数。

  1. $request = new Request(
  2. $_GET,
  3. $_POST,
  4. array(),
  5. $_COOKIE,
  6. $_FILES,
  7. $_SERVER
  8. );

在第二种情况下,使用new关键字创建请求。 它通过 PHP 全局变量传递。

  1. public function process3(Request $request)
  2. {
  3. $data = $request->query->all();
  4. ...

在第三种情况下,使用 Symfony 的依赖项注入来注入请求对象。 我们使用all()方法从请求中获取所有参数。

  1. $col = $data["colour"];
  2. $day = $data["day"];

从数组中,我们得到值。

  1. $content = "Colour: $col, day: $day";
  2. return new Response($content);

我们构建内容并返回Response对象。

在本教程中,我们处理了 Symfony 中的请求。

您可能也对以下相关教程感兴趣: Symfony 简介Symfony 邮件教程Symfony 创建路由Symfony 表单教程PHP 教程

{% endraw %}