多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
{% raw %} # Symfony 请求教程 > 原文: [http://zetcode.com/symfony/request/](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 请求示例 在下面的示例中,我们使用链接创建三个不同的请求。 ```php $ composer create-project symfony/skeleton symreq ``` 使用`composer`,我们创建一个新的 Symfony 骨架项目。 ```php $ cd symreq ``` 我们转到项目目录。 ```php $ composer req annotations twig ``` 我们安装模块`annotations`和`twig`。 ```php $ composer req maker server --dev ``` 我们安装制造商组件和开发 Web 服务器。 ```php $ php bin/console make:controller HomeController ``` 创建了`HomeController`。 `src/Controller/HomeController.php` ```php <?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`返回一个包含锚标记的主页。 `templates/home/index.html.twig` ```php {% 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`返回一个包含三个链接的主页。 每个链接都有两个查询参数。 它们指向不同的控制器方法。 ```php {% extends 'base.html.twig' %} ``` 该模板继承自`base.html.twig`文件,该文件具有要共享的基本标记。 `templates/base.html.twig` ```php <!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 $ php bin/console make:controller MyappController ``` 创建了`MyappController`。 `src/Controller/MyappController.php` ```php <?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 请求。 ```php $request = Request::createFromGlobals(); $col = $request->query->get("colour"); $day = $request->query->get("day"); ``` 使用`Request::createFromGlobals()`创建请求对象。 使用`get()`方法检索 GET 参数。 ```php $request = new Request( $_GET, $_POST, array(), $_COOKIE, $_FILES, $_SERVER ); ``` 在第二种情况下,使用`new`关键字创建请求。 它通过 PHP 全局变量传递。 ```php public function process3(Request $request) { $data = $request->query->all(); ... ``` 在第三种情况下,使用 Symfony 的依赖项注入来注入请求对象。 我们使用`all()`方法从请求中获取所有参数。 ```php $col = $data["colour"]; $day = $data["day"]; ``` 从数组中,我们得到值。 ```php $content = "Colour: $col, day: $day"; return new Response($content); ``` 我们构建内容并返回`Response`对象。 在本教程中,我们处理了 Symfony 中的请求。 您可能也对以下相关教程感兴趣: [Symfony 简介](/symfony/intro/), [Symfony 邮件教程](/symfony/main/), [Symfony 创建路由](/symfony/createroutes/), [Symfony 表单教程](/symfony/form/) , [PHP 教程](/lang/php/)。 {% endraw %}