{% raw %}
Symfony 请求教程
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 请求示例
在下面的示例中,我们使用链接创建三个不同的请求。
$ composer create-project symfony/skeleton symreq
使用composer,我们创建一个新的 Symfony 骨架项目。
$ cd symreq
我们转到项目目录。
$ composer req annotations twig
我们安装模块annotations和twig。
$ composer req maker server --dev
我们安装制造商组件和开发 Web 服务器。
$ php bin/console make:controller HomeController
创建了HomeController。
src/Controller/HomeController.php
<?phpnamespace 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
{% 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文件,该文件具有要共享的基本标记。
templates/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。
src/Controller/MyappController.php
<?phpnamespace 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 中的请求。
您可能也对以下相关教程感兴趣: Symfony 简介, Symfony 邮件教程, Symfony 创建路由, Symfony 表单教程 , PHP 教程。
{% endraw %}
