控制器

编辑该页面

警告:你浏览的文档欧宝官网下载appob娱乐下载Symfony 5.2,不再维护。

这个页面的更新版本Symfob娱乐下载ony 6.2(当前的稳定版本)。

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

AbstractController。它可以扩展到获得辅助方法。

添加使用声明在控制器类,然后修改LuckyController扩展:

1 2 3 4 5 6 7 8 9 10
/ / src /控制器/ LuckyController.php名称空间应用程序\控制器;+使用控制器ob娱乐下载Symfony \包\ FrameworkBundle \ \ AbstractController;——类LuckyController+类LuckyController AbstractController延伸{/ /……}

就是这样!你现在可以访问方法$ this - >渲染()和许多其他人,你会了解下。

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

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

服务。这些是用于呈现模板,发送邮件,查询数据库和其他任何你能想到的“工作”。

如果你需要一个服务在一个控制器,type-hint论证类(或接口)名称。ob娱乐下载Symfony将自动通过你所需要的服务:

1 2 3 4 5 6 7 8 9 10 11 12
使用Psr\日志\LoggerInterface;使用ob娱乐下载\组件\HttpFoundation\响应;/ /……/ * * *@Route(“/幸运/数量/{马克斯}")* /公共函数数量(int美元马克斯,LoggerInterface美元日志记录器):响应{美元日志记录器- >信息(“我们是日志!”);/ /……}

太棒了!

其他服务可以type-hint什么?看到它们,使用调试:自动装配控制台命令:

1
美元php bin /控制台调试:自动装配

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

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

像所有的服务,您还可以使用常规构造函数注入在你的控制器。

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

ob娱乐下载Symfony制造商并告诉Symfonob娱乐下载y生成一个新的控制器类:

1 2 3 4
美元创建php bin /控制台:控制器BrandNewController: src /控制器/ BrandNewController。php创建:模板/全新/ index.html.twig

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

1 2 3 4 5 6 7 8 9 10
美元php bin /控制台:crud产品创建:src /控制器/ ProductController。php创建:src /形式/ ProductType。/产品/ _delete_form.html php创建:模板。/产品/ _form.html树枝:创建模板。/产品/ edit.html树枝:创建模板。枝:创建模板/产品/ index . html。/产品/ new.html树枝:创建模板。/产品/ show.html.twig树枝:创建模板

1.2

:crud命令是在MakerBundle 1.2中引入的。

createNotFoundException ()只是一个快捷方式创建一个特殊的方法NotFoundHttpException对象,最终引发了404年在Symfony HTTP响应。ob娱乐下载

如果抛出一个异常,或者是一个实例textbox,Sob娱乐下载ymfony将使用适当的HTTP状态代码。否则,响应HTTP状态代码:500

1 2
/ /这个异常最终生成一个500状态错误\异常(“事情错了!”);

在每一个案例中,一个错误页面显示给最终用户和一个完整的调试错误页面显示开发人员(例如,当你在“debug”模式下,明白了Symfony的配置ob娱乐下载)。

自定义的错误页面显示给用户,查看如何自定义错误页面吗篇文章。

框架。会话configuration< /a>在配置/包/ framework.yaml

会话,添加一个参数,type-hintSessionInterface:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
使用ob娱乐下载\组件\HttpFoundation\响应;使用ob娱乐下载\组件\HttpFoundation\会话\SessionInterface;/ /……公共函数指数(SessionInterface美元会话):响应{/ /存储一个属性在后面的用户请求重用美元会话- >集(“foo”,“酒吧”);/ /得到另一个控制器在另一个请求的属性设置美元foobar=美元会话- >get (“foobar”);/ /使用默认值,如果属性不存在美元过滤器=美元会话- >get (“过滤器”[]);/ /……}

存储属性保留在会话用户会话的其余部分。

更多信息,请参阅会话

形式提交:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
使用ob娱乐下载\组件\HttpFoundation\请求;使用ob娱乐下载\组件\HttpFoundation\响应;/ /……公共函数更新(请求美元请求):响应{/ /……如果(美元形式- >isSubmitted () & &美元形式- >isValid ()) {/ /做一些处理美元- >addFlash (“通知”,“您的更改得救了!”);/ / $ this - > addFlash()相当于$请求- > getSession () - > getFlashBag() - >添加()返回美元- >redirectToRoute (…);}返回美元- >呈现(…);}

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

模板的下一个页面(或者更好的是,在你的基地布局模板),读会话使用flash的任何信息闪光()提供的方法树枝全局应用程序变量:

1 2 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.flashes(“通知”)%}<div=“flash-notice”>{{消息}}< /div>{%endfor%}{#读取和显示几种类型的flash消息#}{%标签,消息app.flashes(['成功','警告'])%}{%消息在消息%}<div=“闪电,{{标签}}>{{消息}}< /div>{%endfor%}{%endfor%}{#读取和显示所有flash消息#}{%标签,消息app.flashes %}{%消息在消息%}<div=“闪电,{{标签}}>{{消息}}< /div>{%endfor%}{%endfor%}

这是共同使用请注意,警告错误键的不同类型的flash消息,但是您可以使用任何关键符合您的需求。

提示

您可以使用peek ()方法来检索消息同时保持袋。

早些时候,Sob娱乐下载ymfony会通过请求反对任何type-hinted与控制器参数请求类:

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

请求类有几个公共属性和方法,你需要返回任何信息的请求。

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

在Syob娱乐下载mfony中,控制器需要返回响应对象:

1 2 3 4 5 6 7 8
使用ob娱乐下载\组件\HttpFoundation\响应;/ /创建了一个简单的响应与一个200状态码(默认)美元响应=响应(“你好”美元的名字、响应::并);/ /创建一个CSS-response 200状态码美元响应=响应(“<时尚>…< / >风格”);美元响应- >- >集(“内容类型”,“文本/ css”);

为了促进这一点,不同的响应对象包括地址不同的反应类型。其中的一些在下面提到。学习更多有关请求响应(和不同的响应类),请参阅HttpFoundation组件文档欧宝官网下载app

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

1 2 3 4 5 6
/ /……公共函数指数():响应{美元contentsDir=美元- >getParameter (“kernel.project_dir”)。' /内容';/ /……}

文件()辅助服务一个文件从一个控制器:

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

文件()助手提供了一些参数来配置其行为:

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

这项工作,包括代码示例,许可下Creative Commons冲锋队3.0许可证。
< /article>