控制器
编辑本页警告:您正在浏览的文档欧宝体育电话欧宝娱乐app下载地址Symfony 3.2,现已不再维护。
读本页的更新版本用于Sy欧宝娱乐app下载地址mfony 6.2(当前稳定版本)。
请求对象创建并返回响应
对象。响应可以是HTML页面、JSON、XML、文件下载、重定向、404错误或任何你能想到的东西。控制器执行任意逻辑您的应用程序需要呈现页面的内容。
通过观察实际运行中的Symfony控制器,可以了解这有多简单。欧宝娱乐app下载地址这将呈现一个打印幸运(随机)数字的页面:
12 3 4 5 6 7 8 9 10 11 12 13 14 16 17 18 19 20
/ / src / AppBundle /控制器/ LuckyController.php名称空间AppBundle\控制器;使用Sensio赞助\包\FrameworkExtraBundle\配置\路线;使用欧宝娱乐app下载地址\组件\HttpFoundation\响应;类LuckyController{/ * * *@Route(“/幸运数字”)* /公共函数numberAction(){$数量= mt_rand (0,One hundred.);返回新响应(' '.$数量.' < /身体> < / html >”);}}
但是在现实世界中,为了创建响应,您的控制器可能会做很多工作。它可以从请求中读取信息、加载数据库资源、发送电子邮件或设置用户会话上的信息。但在所有情况下,控制器最终都会返回响应
将被传递回客户端的对象。
提示
如果您还没有创建第一个工作页面,请检查在Symfony中创建您的第一页欧宝娱乐app下载地址然后再回来!
关闭),控制器通常是控制器类中的一个方法:
12 3 4 5 6 7 8 9 10 11 12 13 14 16 17 18 19 20
/ / src / AppBundle /控制器/ LuckyController.php名称空间AppBundle\控制器;使用欧宝娱乐app下载地址\组件\HttpFoundation\响应;使用Sensio赞助\包\FrameworkExtraBundle\配置\路线;类LuckyController{/ * * *@Route(“/幸运/数量/{马克斯}")* /公共函数numberAction($马克斯){$数量= mt_rand (0,$马克斯);返回新响应(' '.$数量.' < /身体> < / html >”);}}
控制器是numberAction ()
方法,它位于控制器类中LuckyController
.
这个控制器非常简单:
- 第2行: 欧宝娱乐app下载地址Symfony利用PHP的命名空间功能来命名整个控制器类。
- 4号线Sy欧宝娱乐app下载地址mfony再次利用了PHP的命名空间功能
使用
关键字导入响应
类,控制器必须返回该类。
- 第7行:从技术上讲,这个类可以被称为任何东西——但应该以单词结尾
控制器
(这不是要求,但一些捷径依赖于此)。
- 第12行:控制器类中的每个动作方法都以
行动
(再说一次,这不是要求,但一些捷径依赖于此)。这个方法允许有美元最大
参数,因为{马克斯}
路由中的通配符.
- 线16:控制器创建并返回
响应
对象。
控制器类。如果你扩展它,这不会改变你的控制器的工作方式,但你可以访问一些辅助方法和服务容器(见控制器):一个类似数组的对象,让你访问系统中所有有用的对象。这些有用的对象被调用服务, Symf欧宝娱乐app下载地址ony附带了一个可以呈现Twig模板的服务对象,另一个可以记录消息的服务对象等等。
添加使用
声明在控制器
类,然后修改LuckyController
引申为:
1 2 3 4 5 6 7 8 9
/ / src / AppBundle /控制器/ LuckyController.php名称空间AppBundle\控制器;使用欧宝娱乐app下载地址\包\FrameworkBundle\控制器\控制器;类LuckyController扩展控制器{/ /……}
助手方法只是使用核心Symfony功能的快捷方式,无论您是否使用基本功能欧宝娱乐app下载地址控制器
类。查看运行中的核心功能的一个好方法是查看控制器类。
generateUrl ()方法只是一个辅助方法,为给定的路由生成URL:
1
$url=$这->generateUrl (“blog_show”,数组(“鼻涕虫”= >“slug-value”));
redirectToRoute ()而且重定向()
方法:
12 3 4 5 6 7 8 9 10 11 12 13 14
公共函数indexAction(){//重定向到“主页”路由返回$这->redirectToRoute (“主页”);//做一个永久- 301重定向返回$这->redirectToRoute (“主页”,数组(),301);//重定向到带参数的路由返回$这->redirectToRoute (“blog_show”,数组(“鼻涕虫”= >“页面”));//从外部重定向返回$这->重定向(“http://欧宝娱乐app下载地址www.oldmanjams.com/doc”);}
有关更多信息,请参见路由的文章.
谨慎
的重定向()
方法不以任何方式检查其目标。如果重定向到最终用户提供的某个URL,则应用程序可能对未验证重定向安全漏洞.
提示
的redirectToRoute ()
方法只是一个创建响应
对象,它专门用于重定向用户。它相当于:
1 2 3 4 5 6
使用欧宝娱乐app下载地址\组件\HttpFoundation\RedirectResponse;公共函数indexAction(){返回新RedirectResponse ($这->generateUrl (“主页”));}
呈现()方法呈现模板。而且将该内容放入响应
对象为您:
1 2
//渲染app/Resources/views/lucky/number.html.twig返回$这->呈现(“幸运/ number.html.twig”,数组(“名字”= >$的名字));
模板也可以位于更深的子目录中。只是尽量避免创造不必要的深层结构:
1 2 3 4
//渲染app/Resources/views/lottery/lucky/number.html.twig返回$这->呈现(“彩票/幸运/ number.html.twig”,数组(“名字”= >$的名字));
Symf欧宝娱乐app下载地址ony模板系统和Twig将在创建和使用模板文章.
控制器类,执行以下操作:
1 2 3 4 5 6 7 8 9 10
公共函数indexAction(){//从数据库中检索对象$产品=……;如果(!$产品) {扔$这->createNotFoundException (“产品不存在”);}返回$这->呈现(…);}
的createNotFoundException ()方法只是一个创建特殊的快捷方式NotFoundHttpException对象,最终在Symfony内部触发404 HTTP响应。欧宝娱乐app下载地址
当然,你可以随便扔异常
类,Symfony将自动返回一个500的HTTP响应代欧宝娱乐app下载地址码。
1
扔新\异常(“出事了!”);
在每种情况下,一个错误页面显示给最终用户,一个完整的调试错误页面显示给开发人员(即当你使用app_dev.php
前控制器-参见配置Symfony(和环欧宝娱乐app下载地址境)).
您需要自定义用户看到的错误页面。要做到这一点,请参阅如何自定义错误页面篇文章。
请求对象。要在控制器中添加它,只需将其作为参数和用Request类输入提示:
1 2 3 4 5 6 7 8
使用欧宝娱乐app下载地址\组件\HttpFoundation\请求;公共函数indexAction(请求$请求,$firstName,$姓){$页面=$请求->查询->get (“页面”,1);/ /……}
继续阅读获取有关使用Request对象的更多信息。
getSession ()方法。请求
对象。此方法返回一个SessionInterface使用简单的方法从会话中存储和获取东西:
12 3 4 5 6 7 8 9 10 11 12 13 14 15
使用欧宝娱乐app下载地址\组件\HttpFoundation\请求;公共函数indexAction(请求$请求){$会话=$请求->getSession ();//存储一个属性以便在以后的用户请求中重用$会话->集(“foo”,“酒吧”);//在另一个请求中获取由另一个控制器设置的属性$foobar=$会话->get (“foobar”);如果该属性不存在,则使用默认值$过滤器=$会话->get (“过滤器”,数组());}
存储的属性在该用户会话的剩余时间内保留在会话中。
形式提交:
12 3 4 5 6 7 8 9 10 11 12 13 14 16 17 18 19 20
使用欧宝娱乐app下载地址\组件\HttpFoundation\请求;公共函数updateAction(请求$请求){/ /……如果($形式->isSubmitted () & &$形式->isValid ()) {//执行某种处理$这->addFlash (“通知”,“您的更改被保存了!”);// $this->addFlash()等价于$request->getSession()->getFlashBag()->add()返回$这->redirectToRoute(…);}返回$这->呈现(…);}
处理请求后,控制器在会话中设置一个flash消息,然后重定向。消息键(请注意
在本例中)可以是任何东西:您将使用此键检索消息。
在下一页的模板中(或者更好的是,在你的基本布局模板中),从会话中读取任何flash消息:
- 嫩枝
- PHP
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
{# app /资源/视图/ base.html。树枝#}{#你可以读取和显示一个flash消息类型…#}{%为在app.session.flashBag.get('notice') %}<div类=“flash-notice”>{{flash_message}}div>{%endfor%}{#……或者您可以读取和显示每个flash消息可用#}{%为在app.session.flashBag.all %}{%为flash_messages %}中的Flash_message<div类=“闪电,{{type}}">{{flash_message}}div>{%endfor%}{%endfor%}
请注意
它很常用请注意
,警告
而且错误
作为不同类型的flash消息的键,但您可以使用任何适合您需要的键。
提示
您可以使用peek ()方法来检索消息,同时将其保存在包中。
早些时候,框架将通过请求
对象的类型提示的任何控制器参数请求
类:
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
使用欧宝娱乐app下载地址\组件\HttpFoundation\请求;公共函数indexAction(请求$请求){$请求->isXmlHttpRequest ();//它是一个Ajax请求吗?$请求->getPreferredLanguage (数组(“en”,“fr”));//分别获取GET和POST变量$请求->查询->get (“页面”);$请求->请求->get (“页面”);//检索SERVER变量$请求->服务器->get (“HTTP_HOST”);//获取一个由foo标识的UploadedFile实例$请求->文件->get (“foo”);//获取COOKIE值$请求->饼干->get (“PHPSESSID”);//检索一个HTTP请求头,带有规范化的小写键$请求->头->get (“主机”);$请求->头->get (“content_type”);}
的请求
类有几个公共属性和方法,它们返回关于请求所需的任何信息。
就像请求
,响应
对象也有一个公共对象头
财产。这是一个ResponseHeaderBag它有一些很好的方法来获取和设置响应头。标头名称是规范化的,以便使用内容类型
等于内容类型
甚至content_type
.
控制器的唯一要求是返回响应
对象。的响应类是围绕HTTP响应的抽象——基于文本的消息,充满了发送回客户端的头和内容:
1 2 3 4 5 6 7 8
使用欧宝娱乐app下载地址\组件\HttpFoundation\响应;//创建一个简单的响应,状态码为200(默认)$响应=新响应(“你好”.$的名字、响应::并);//创建一个状态码为200的CSS-response$响应=新响应(' <时尚>…> < /风格的);$响应->头->集(“内容类型”,“文本/ css”);
有一些特殊的类可以让某些类型的回答更容易:
- 对于文件,有BinaryFileResponse.看到HttpFoundation组件.
- 对于流响应,有StreamedResponse.看到HttpFoundation组件.
另请参阅
现在您已经了解了基本知识,可以继续研究Symfony欧宝娱乐app下载地址请求
而且响应
对象中的HttpFoundation组件文档欧宝体育电话.
控件可从控制器返回JSONjson ()
基本控制器上的辅助方法。这返回一个特殊的JsonResponse
对象,自动对数据进行编码:
1 2 3 4 5 6 7 8 9
/ /……公共函数indexAction(){//返回'{"用户名":"简。并设置正确的Content-Type头返回$这->json (数组(“用户名”= >“jane.doe”));//该快捷方式定义了三个可选参数//返回$this->json($data, $status = 200, $headers = array(), $context = array());}
如果序列化器服务在您的应用程序中启用,内容传递到json ()
用它编码。否则,json_encode函数被使用。
您可以使用文件()从控制器内部提供文件的Helper:
1 2 3 4 5
公共函数fileAction(){//发送文件内容并强制浏览器下载它返回$这->文件(“/道路/ / some_file.pdf”);}
的文件()
Helper提供了一些参数来配置它的行为:
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16
使用欧宝娱乐app下载地址\组件\HttpFoundation\文件\文件;使用欧宝娱乐app下载地址\组件\HttpFoundation\ResponseHeaderBag;公共函数fileAction(){//从文件系统中加载文件$文件=新文件(“/道路/ / some_file.pdf”);返回$这->文件($文件);//重命名下载的文件返回$这->文件($文件,“custom_name.pdf”);//在浏览器中显示文件内容而不是下载它返回$这->文件(“invoice_3241.pdf”,“my_invoice.pdf”, ResponseHeaderBag::DISPOSITION_INLINE);}
12 3 4 5 6 7 8 9 10 11 12 13 14 16 17 18 19 20
/ / src / AppBundle /控制器/ LuckyController.php名称空间AppBundle\控制器;使用Sensio赞助\包\FrameworkExtraBundle\配置\路线;使用欧宝娱乐app下载地址\组件\HttpFoundation\响应;类LuckyController{/ * * *@Route(“/幸运数字”)* /公共函数numberAction(){$数量= mt_rand (0,One hundred.);返回新响应(' '.$数量.' < /身体> < / html >”);}}
响应
将被传递回客户端的对象。提示
如果您还没有创建第一个工作页面,请检查在Symfony中创建您的第一页欧宝娱乐app下载地址然后再回来!
关闭),控制器通常是控制器类中的一个方法:
12 3 4 5 6 7 8 9 10 11 12 13 14 16 17 18 19 20
/ / src / AppBundle /控制器/ LuckyController.php名称空间AppBundle\控制器;使用欧宝娱乐app下载地址\组件\HttpFoundation\响应;使用Sensio赞助\包\FrameworkExtraBundle\配置\路线;类LuckyController{/ * * *@Route(“/幸运/数量/{马克斯}")* /公共函数numberAction($马克斯){$数量= mt_rand (0,$马克斯);返回新响应(' '.$数量.' < /身体> < / html >”);}}
控制器是numberAction ()
方法,它位于控制器类中LuckyController
.
这个控制器非常简单:
- 第2行: 欧宝娱乐app下载地址Symfony利用PHP的命名空间功能来命名整个控制器类。
- 4号线Sy欧宝娱乐app下载地址mfony再次利用了PHP的命名空间功能
使用
关键字导入响应
类,控制器必须返回该类。
- 第7行:从技术上讲,这个类可以被称为任何东西——但应该以单词结尾
控制器
(这不是要求,但一些捷径依赖于此)。
- 第12行:控制器类中的每个动作方法都以
行动
(再说一次,这不是要求,但一些捷径依赖于此)。这个方法允许有美元最大
参数,因为{马克斯}
路由中的通配符.
- 线16:控制器创建并返回
响应
对象。
12 3 4 5 6 7 8 9 10 11 12 13 14 16 17 18 19 20
/ / src / AppBundle /控制器/ LuckyController.php名称空间AppBundle\控制器;使用欧宝娱乐app下载地址\组件\HttpFoundation\响应;使用Sensio赞助\包\FrameworkExtraBundle\配置\路线;类LuckyController{/ * * *@Route(“/幸运/数量/{马克斯}")* /公共函数numberAction($马克斯){$数量= mt_rand (0,$马克斯);返回新响应(' '.$数量.' < /身体> < / html >”);}}
numberAction ()
方法,它位于控制器类中LuckyController
.使用
关键字导入响应
类,控制器必须返回该类。控制器
(这不是要求,但一些捷径依赖于此)。行动
(再说一次,这不是要求,但一些捷径依赖于此)。这个方法允许有美元最大
参数,因为{马克斯}
路由中的通配符.响应
对象。控制器类。如果你扩展它,这不会改变你的控制器的工作方式,但你可以访问一些辅助方法和服务容器(见控制器):一个类似数组的对象,让你访问系统中所有有用的对象。这些有用的对象被调用服务, Symf欧宝娱乐app下载地址ony附带了一个可以呈现Twig模板的服务对象,另一个可以记录消息的服务对象等等。
添加使用
声明在控制器
类,然后修改LuckyController
引申为:
1 2 3 4 5 6 7 8 9
/ / src / AppBundle /控制器/ LuckyController.php名称空间AppBundle\控制器;使用欧宝娱乐app下载地址\包\FrameworkBundle\控制器\控制器;类LuckyController扩展控制器{/ /……}
助手方法只是使用核心Symfony功能的快捷方式,无论您是否使用基本功能欧宝娱乐app下载地址控制器
类。查看运行中的核心功能的一个好方法是查看控制器类。
generateUrl ()方法只是一个辅助方法,为给定的路由生成URL:
1
$url=$这->generateUrl (“blog_show”,数组(“鼻涕虫”= >“slug-value”));
1
$url=$这->generateUrl (“blog_show”,数组(“鼻涕虫”= >“slug-value”));
redirectToRoute ()而且重定向()
方法:
12 3 4 5 6 7 8 9 10 11 12 13 14
公共函数indexAction(){//重定向到“主页”路由返回$这->redirectToRoute (“主页”);//做一个永久- 301重定向返回$这->redirectToRoute (“主页”,数组(),301);//重定向到带参数的路由返回$这->redirectToRoute (“blog_show”,数组(“鼻涕虫”= >“页面”));//从外部重定向返回$这->重定向(“http://欧宝娱乐app下载地址www.oldmanjams.com/doc”);}
有关更多信息,请参见路由的文章.
谨慎
的重定向()
方法不以任何方式检查其目标。如果重定向到最终用户提供的某个URL,则应用程序可能对未验证重定向安全漏洞.
提示
的redirectToRoute ()
方法只是一个创建响应
对象,它专门用于重定向用户。它相当于:
1 2 3 4 5 6
使用欧宝娱乐app下载地址\组件\HttpFoundation\RedirectResponse;公共函数indexAction(){返回新RedirectResponse ($这->generateUrl (“主页”));}
12 3 4 5 6 7 8 9 10 11 12 13 14
公共函数indexAction(){//重定向到“主页”路由返回$这->redirectToRoute (“主页”);//做一个永久- 301重定向返回$这->redirectToRoute (“主页”,数组(),301);//重定向到带参数的路由返回$这->redirectToRoute (“blog_show”,数组(“鼻涕虫”= >“页面”));//从外部重定向返回$这->重定向(“http://欧宝娱乐app下载地址www.oldmanjams.com/doc”);}
谨慎
的重定向()
方法不以任何方式检查其目标。如果重定向到最终用户提供的某个URL,则应用程序可能对未验证重定向安全漏洞.
提示
的redirectToRoute ()
方法只是一个创建响应
对象,它专门用于重定向用户。它相当于:
1 2 3 4 5 6
使用欧宝娱乐app下载地址\组件\HttpFoundation\RedirectResponse;公共函数indexAction(){返回新RedirectResponse ($这->generateUrl (“主页”));}
呈现()方法呈现模板。而且将该内容放入响应
对象为您:
1 2
//渲染app/Resources/views/lucky/number.html.twig返回$这->呈现(“幸运/ number.html.twig”,数组(“名字”= >$的名字));
模板也可以位于更深的子目录中。只是尽量避免创造不必要的深层结构:
1 2 3 4
//渲染app/Resources/views/lottery/lucky/number.html.twig返回$这->呈现(“彩票/幸运/ number.html.twig”,数组(“名字”= >$的名字));
Symf欧宝娱乐app下载地址ony模板系统和Twig将在创建和使用模板文章.
1 2
//渲染app/Resources/views/lucky/number.html.twig返回$这->呈现(“幸运/ number.html.twig”,数组(“名字”= >$的名字));
1 2 3 4
//渲染app/Resources/views/lottery/lucky/number.html.twig返回$这->呈现(“彩票/幸运/ number.html.twig”,数组(“名字”= >$的名字));
控制器类,执行以下操作:
1 2 3 4 5 6 7 8 9 10
公共函数indexAction(){//从数据库中检索对象$产品=……;如果(!$产品) {扔$这->createNotFoundException (“产品不存在”);}返回$这->呈现(…);}
的createNotFoundException ()方法只是一个创建特殊的快捷方式NotFoundHttpException对象,最终在Symfony内部触发404 HTTP响应。欧宝娱乐app下载地址
当然,你可以随便扔异常
类,Symfony将自动返回一个500的HTTP响应代欧宝娱乐app下载地址码。
1
扔新\异常(“出事了!”);
在每种情况下,一个错误页面显示给最终用户,一个完整的调试错误页面显示给开发人员(即当你使用app_dev.php
前控制器-参见配置Symfony(和环欧宝娱乐app下载地址境)).
您需要自定义用户看到的错误页面。要做到这一点,请参阅如何自定义错误页面篇文章。
1 2 3 4 5 6 7 8 9 10
公共函数indexAction(){//从数据库中检索对象$产品=……;如果(!$产品) {扔$这->createNotFoundException (“产品不存在”);}返回$这->呈现(…);}
异常
类,Symfony将自动返回一个500的HTTP响应代欧宝娱乐app下载地址码。1
扔新\异常(“出事了!”);
app_dev.php
前控制器-参见配置Symfony(和环欧宝娱乐app下载地址境)).请求对象。要在控制器中添加它,只需将其作为参数和用Request类输入提示:
1 2 3 4 5 6 7 8
使用欧宝娱乐app下载地址\组件\HttpFoundation\请求;公共函数indexAction(请求$请求,$firstName,$姓){$页面=$请求->查询->get (“页面”,1);/ /……}
继续阅读获取有关使用Request对象的更多信息。
1 2 3 4 5 6 7 8
使用欧宝娱乐app下载地址\组件\HttpFoundation\请求;公共函数indexAction(请求$请求,$firstName,$姓){$页面=$请求->查询->get (“页面”,1);/ /……}
getSession ()方法。请求
对象。此方法返回一个SessionInterface使用简单的方法从会话中存储和获取东西:
12 3 4 5 6 7 8 9 10 11 12 13 14 15
使用欧宝娱乐app下载地址\组件\HttpFoundation\请求;公共函数indexAction(请求$请求){$会话=$请求->getSession ();//存储一个属性以便在以后的用户请求中重用$会话->集(“foo”,“酒吧”);//在另一个请求中获取由另一个控制器设置的属性$foobar=$会话->get (“foobar”);如果该属性不存在,则使用默认值$过滤器=$会话->get (“过滤器”,数组());}
12 3 4 5 6 7 8 9 10 11 12 13 14 15
使用欧宝娱乐app下载地址\组件\HttpFoundation\请求;公共函数indexAction(请求$请求){$会话=$请求->getSession ();//存储一个属性以便在以后的用户请求中重用$会话->集(“foo”,“酒吧”);//在另一个请求中获取由另一个控制器设置的属性$foobar=$会话->get (“foobar”);如果该属性不存在,则使用默认值$过滤器=$会话->get (“过滤器”,数组());}
存储的属性在该用户会话的剩余时间内保留在会话中。
形式提交:
12 3 4 5 6 7 8 9 10 11 12 13 14 16 17 18 19 20
使用欧宝娱乐app下载地址\组件\HttpFoundation\请求;公共函数updateAction(请求$请求){/ /……如果($形式->isSubmitted () & &$形式->isValid ()) {//执行某种处理$这->addFlash (“通知”,“您的更改被保存了!”);// $this->addFlash()等价于$request->getSession()->getFlashBag()->add()返回$这->redirectToRoute(…);}返回$这->呈现(…);}
12 3 4 5 6 7 8 9 10 11 12 13 14 16 17 18 19 20
使用欧宝娱乐app下载地址\组件\HttpFoundation\请求;公共函数updateAction(请求$请求){/ /……如果($形式->isSubmitted () & &$形式->isValid ()) {//执行某种处理$这->addFlash (“通知”,“您的更改被保存了!”);// $this->addFlash()等价于$request->getSession()->getFlashBag()->add()返回$这->redirectToRoute(…);}返回$这->呈现(…);}
处理请求后,控制器在会话中设置一个flash消息,然后重定向。消息键(请注意
在本例中)可以是任何东西:您将使用此键检索消息。
在下一页的模板中(或者更好的是,在你的基本布局模板中),从会话中读取任何flash消息:
- 嫩枝
- PHP
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
{# app /资源/视图/ base.html。树枝#}{#你可以读取和显示一个flash消息类型…#}{%为在app.session.flashBag.get('notice') %}<div类=“flash-notice”>{{flash_message}}div>{%endfor%}{#……或者您可以读取和显示每个flash消息可用#}{%为在app.session.flashBag.all %}{%为flash_messages %}中的Flash_message<div类=“闪电,{{type}}">{{flash_message}}div>{%endfor%}{%endfor%}
请注意
它很常用请注意
,警告
而且错误
作为不同类型的flash消息的键,但您可以使用任何适合您需要的键。
提示
您可以使用peek ()方法来检索消息,同时将其保存在包中。
早些时候,框架将通过请求
对象的类型提示的任何控制器参数请求
类:
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
使用欧宝娱乐app下载地址\组件\HttpFoundation\请求;公共函数indexAction(请求$请求){$请求->isXmlHttpRequest ();//它是一个Ajax请求吗?$请求->getPreferredLanguage (数组(“en”,“fr”));//分别获取GET和POST变量$请求->查询->get (“页面”);$请求->请求->get (“页面”);//检索SERVER变量$请求->服务器->get (“HTTP_HOST”);//获取一个由foo标识的UploadedFile实例$请求->文件->get (“foo”);//获取COOKIE值$请求->饼干->get (“PHPSESSID”);//检索一个HTTP请求头,带有规范化的小写键$请求->头->get (“主机”);$请求->头->get (“content_type”);}
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
使用欧宝娱乐app下载地址\组件\HttpFoundation\请求;公共函数indexAction(请求$请求){$请求->isXmlHttpRequest ();//它是一个Ajax请求吗?$请求->getPreferredLanguage (数组(“en”,“fr”));//分别获取GET和POST变量$请求->查询->get (“页面”);$请求->请求->get (“页面”);//检索SERVER变量$请求->服务器->get (“HTTP_HOST”);//获取一个由foo标识的UploadedFile实例$请求->文件->get (“foo”);//获取COOKIE值$请求->饼干->get (“PHPSESSID”);//检索一个HTTP请求头,带有规范化的小写键$请求->头->get (“主机”);$请求->头->get (“content_type”);}
的请求
类有几个公共属性和方法,它们返回关于请求所需的任何信息。
就像请求
,响应
对象也有一个公共对象头
财产。这是一个ResponseHeaderBag它有一些很好的方法来获取和设置响应头。标头名称是规范化的,以便使用内容类型
等于内容类型
甚至content_type
.
控制器的唯一要求是返回响应
对象。的响应类是围绕HTTP响应的抽象——基于文本的消息,充满了发送回客户端的头和内容:
1 2 3 4 5 6 7 8
使用欧宝娱乐app下载地址\组件\HttpFoundation\响应;//创建一个简单的响应,状态码为200(默认)$响应=新响应(“你好”.$的名字、响应::并);//创建一个状态码为200的CSS-response$响应=新响应(' <时尚>…> < /风格的);$响应->头->集(“内容类型”,“文本/ css”);
有一些特殊的类可以让某些类型的回答更容易:
- 对于文件,有BinaryFileResponse.看到HttpFoundation组件.
- 对于流响应,有StreamedResponse.看到HttpFoundation组件.
另请参阅
现在您已经了解了基本知识,可以继续研究Symfony欧宝娱乐app下载地址请求
而且响应
对象中的HttpFoundation组件文档欧宝体育电话.
控件可从控制器返回JSONjson ()
基本控制器上的辅助方法。这返回一个特殊的JsonResponse
对象,自动对数据进行编码:
1 2 3 4 5 6 7 8 9
/ /……公共函数indexAction(){//返回'{"用户名":"简。并设置正确的Content-Type头返回$这->json (数组(“用户名”= >“jane.doe”));//该快捷方式定义了三个可选参数//返回$this->json($data, $status = 200, $headers = array(), $context = array());}
如果序列化器服务在您的应用程序中启用,内容传递到json ()
用它编码。否则,json_encode函数被使用。
1 2 3 4 5
公共函数fileAction(){//发送文件内容并强制浏览器下载它返回$这->文件(“/道路/ / some_file.pdf”);}
文件()
Helper提供了一些参数来配置它的行为:12 3 4 5 6 7 8 9 10 11 12 13 14 15 16
使用欧宝娱乐app下载地址\组件\HttpFoundation\文件\文件;使用欧宝娱乐app下载地址\组件\HttpFoundation\ResponseHeaderBag;公共函数fileAction(){//从文件系统中加载文件$文件=新文件(“/道路/ / some_file.pdf”);返回$这->文件($文件);//重命名下载的文件返回$这->文件($文件,“custom_name.pdf”);//在浏览器中显示文件内容而不是下载它返回$这->文件(“invoice_3241.pdf”,“my_invoice.pdf”, ResponseHeaderBag::DISPOSITION_INLINE);}