控制器

编辑本页

警告:您正在浏览的文档欧宝体育电话欧宝娱乐app下载地址Symfony 5.1,现已不再维护。

本页的更新版本用于Sy欧宝娱乐app下载地址mfony 6.2(当前稳定版本)。

请求对象创建并返回响应对象。响应可以是HTML页面、JSON、XML、文件下载、重定向、404错误或其他任何东西。控制器运行任意逻辑您的应用程序需要呈现页面的内容。

AbstractController.可以扩展它以获得对helper方法的访问权。

添加使用语句,然后修改LuckyController引申为:

1 2 3 4 5 6 7 8 9 10
// src/Controller/LuckyController.php命名空间App\Controller使用Symf欧宝娱乐app下载地址ony\Bundle\FrameworkBundle\Controller\AbstractController;-类LuckyControllerLuckyController扩展了AbstractController{//…}

就是这样!您现在可以访问像$ this - >渲染()还有很多你接下来会学到的。

generateUrl ()方法只是一个辅助方法,为给定的路由生成URL:

1
url->generateUrl (“app_lucky_number”, (“马克斯”= >10]);

服务.它们被用于渲染模板、发送电子邮件、查询数据库和任何你能想到的“工作”。

如果你需要一个控制器中的服务,输入一个带有它的类(或接口)名称的参数。欧宝娱乐app下载地址Symfony将自动传递您需要的服务:

12 3 4 5 6 7 8 9 10 11 12
使用Psr日志LoggerInterface使用欧宝娱乐app下载地址组件HttpFoundation响应/ /……/ * * *@Route(“/幸运/数量/{马克斯}")* /公共函数数量(int马克斯, LoggerInterface日志记录器响应日志记录器->信息(“我们在伐木!”);/ /……

太棒了!

还有哪些服务可以输入提示?要查看它们,请使用调试:自动装配控制台命令:

1
PHP bin/控制台调试:自动装配

如果你需要控制确切的参数的值,你可以绑定参数的名称:

  • YAML
  • XML
  • PHP
12 3 4 5 6 7 8 9 10 11 12
#配置/ services.yaml服务:#……#显式配置服务应用程序控制器\ \ LuckyController:标签:(controller.service_arguments)绑定:#对于任何$logger参数,传递这个特定的服务日志:美元“@monolog.logger.doctrine”#对于任何$projectDir参数,传递此参数值美元管理扫描:“% kernel.project_dir %”

像所有服务一样,你也可以使用普通服务构造函数注入在你的控制器中。

有关服务的更多信息,请参见服务容器篇文章。

欧宝娱乐app下载地址Symfony制造商并告诉Symfon欧宝娱乐app下载地址y生成一个新的控制器类:

1 2 3 4
src/ controller /BrandNewController.php创建:templates/brandnew/index.html.twig .php bin/console make:controller

如果你想从一个教义生成一个完整的CRUD实体使用:

1 2 3 4 5 6 7 8 9 10
产品创建:src/Controller/ProductController.php创建:src/Form/ProductType.php创建:templates/ Product /_delete_form.html创建枝条:templates/product/_form.html。创建枝条:templates/product/edit.html。创建枝条:templates/product/index.html。创建枝条:templates/product/new.html。Twig创建:templates/product/show.html.twig

1.2

: crud命令在MakerBundle 1.2中引入。

createNotFoundException ()方法只是一个创建特殊的快捷方式NotFoundHttpException对象,最终在Symfony内部触发404 HTTP响应。欧宝娱乐app下载地址

的实例扩展或抛出的异常textbox, 欧宝娱乐app下载地址Symfony将使用适当的HTTP状态代码。否则,响应将有一个500 HTTP状态代码:

1 2
//该异常最终生成一个500状态错误异常“出事了!”);

在每种情况下,错误页面会显示给最终用户,而完整的调试错误页面会显示给开发人员(即当您处于“调试”模式时)Symfony的配置欧宝娱乐app下载地址).

要自定义显示给用户的错误页面,请参见如何自定义错误页面篇文章。

框架。会话configuration配置/包/ framework.yaml

要获取会话,请添加一个参数并键入提示SessionInterface

12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
使用欧宝娱乐app下载地址组件HttpFoundation响应使用欧宝娱乐app下载地址组件HttpFoundation会话SessionInterface/ /……公共函数指数(SessionInterface会话响应//存储一个属性,以便在以后的用户请求中重用会话->集(“foo”“酒吧”);//在另一个请求中获取由另一个控制器设置的属性foobar会话->get (“foobar”);如果属性不存在,//使用默认值过滤器会话->get (“过滤器”[]);/ /……

存储的属性在该用户会话的剩余时间内保留在会话中。

有关更多信息,请参见会话

形式提交:

12 3 4 5 6 7 8 9 10 11 12 13 14 16 17 18 19 20 21 22
使用欧宝娱乐app下载地址组件HttpFoundation请求使用欧宝娱乐app下载地址组件HttpFoundation响应/ /……公共函数更新(请求请求响应/ /……如果形式->isSubmitted () & &形式->isValid ()) {//执行某种处理->addFlash (“通知”“您的更改被保存了!”);// $this->addFlash()等价于$request->getSession()->getFlashBag()->add()返回->redirectToRoute(…);}返回->呈现(…);}

处理请求后,控制器在会话中设置一个flash消息,然后重定向。消息键(请注意在本例中)可以是任何东西:您将使用此键检索消息。

在下一页的模板中(或者更好的是在基本布局模板中),使用闪光()方法。枝全局应用程序变量

12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
{/ base.html #模板。树枝#}{#读取并显示一个flash消息类型#}{%app.flash ('notice') %}中的消息<div“flash-notice”>{{message}}div>{%endfor%}{#读取和显示几种类型的flash消息#}{%app.flash (['success', 'warning']) %}{%messages %}中的消息<div“闪电,{{label}}>{{message}}div>{%endfor%}{%endfor%}{#读取并显示所有flash消息#}{%标签,app.flash %}中的消息{%messages %}中的消息<div“闪电,{{label}}>{{message}}div>{%endfor%}{%endfor%}

它很常用请注意警告而且错误作为不同类型的flash消息的键,但您可以使用任何适合您需要的键。

提示

您可以使用peek ()方法来检索消息,同时将其保存在包中。

早些时候, 欧宝娱乐app下载地址Symfony将通过请求对象的类型提示的任何控制器参数请求类:

12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
使用欧宝娱乐app下载地址组件HttpFoundation请求使用欧宝娱乐app下载地址组件HttpFoundation响应公共函数指数(请求请求响应请求->isXmlHttpRequest ();//它是一个Ajax请求吗?请求->getPreferredLanguage ([“en”“fr”]);//分别获取GET和POST变量请求->查询->get (“页面”);请求->请求->get (“页面”);//检索SERVER变量请求->服务器->get (“HTTP_HOST”);//获取一个由foo标识的UploadedFile实例请求->文件->get (“foo”);//检索COOKIE值请求->饼干->get (“PHPSESSID”);//检索一个HTTP请求头,带有规范化的小写键请求->->get (“主机”);请求->->get (“内容类型”);}

请求类有几个公共属性和方法,它们返回关于请求所需的任何信息。

就像请求,响应对象具有一个公共财产。该对象的类型为ResponseHeaderBag并提供获取和设置响应标头的方法。标头名称是规范化的。因此,名字内容类型是等价的名字吗内容类型content_type

在Sy欧宝娱乐app下载地址mfony中,需要一个控制器返回响应对象:

1 2 3 4 5 6 7 8
使用欧宝娱乐app下载地址组件HttpFoundation响应//创建一个简单的响应,状态码为200(默认值)响应响应(“你好”的名字、响应::并);//创建一个状态码为200的css响应响应响应(' <时尚>…> < /风格的);响应->->集(“内容类型”“文本/ css”);

为了方便,包含了不同的响应对象来处理不同的响应类型。下面将提到其中一些。了解更多关于请求而且响应(和不同的响应类),请参见HttpFoundation组件文档欧宝体育电话

配置参数从控制器中使用getParameter ()辅助方法:

1 2 3 4 5 6
/ /……公共函数指数()响应contentsDir->getParameter (“kernel.project_dir”).' /内容'/ /……

文件()从控制器内部提供文件的Helper:

1 2 3 4 5 6 7 8
使用欧宝娱乐app下载地址组件HttpFoundation响应/ /……公共函数下载()响应//发送文件内容并强制浏览器下载它返回->文件(“/道路/ / some_file.pdf”);}

文件()Helper提供了一些参数来配置它的行为:

12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
使用欧宝娱乐app下载地址组件HttpFoundation文件文件使用欧宝娱乐app下载地址组件HttpFoundationResponseHeaderBag/ /……公共函数下载()响应//从文件系统中加载文件文件文件(“/道路/ / some_file.pdf”);返回->文件(文件);//重命名下载的文件返回->文件(文件“custom_name.pdf”);//在浏览器中显示文件内容而不是下载它返回->文件(“invoice_3241.pdf”“my_invoice.pdf”, ResponseHeaderBag::DISPOSITION_INLINE);}

此工作,包括代码示例,是根据创作共用BY-SA 3.0许可证。