如何定义控制器作为服务吗

编辑该页面

警告:你浏览的文档欧宝体育电话欧宝娱乐app下载地址Symfony 5.0,不再维护。

这个页面的更新版本Symf欧宝娱乐app下载地址ony 6.2(当前的稳定版本)。

如何定义控制器作为服务吗

在Sy欧宝娱乐app下载地址mfony中,控制器需要注册为一个服务。但是如果你使用默认的服务。yaml的配置,你的控制器已经注册为服务。这意味着您可以使用依赖注入像其他正常的服务。

引用你的服务路由

注册你的控制器作为服务是第一步,但你也需要更新自己的路由配置参考服务得当,这样Symfony知道使用它。欧宝娱乐app下载地址

使用service_id: method_name语法参考控制器方法。如果服务id的完全限定类名(FQCN)控制器,Symfony建议,然后语法是一样的,如果控制器并不是一个服务:欧宝娱乐app下载地址控制器应用\ \ HelloController:索引:

  • 注释
  • YAML
  • XML
  • PHP
1 2 3 4 5 6 7 8 9 10 11 12 13
/ / src /控制器/ HelloController.php使用欧宝娱乐app下载地址\组件\路由\注释\路线;HelloController{/ * * *@Route(name = " /你好”“你好”,方法={“获得”})* /公共函数指数(){/ /……}}

调用控制器

控制器还可以定义一个操作使用__invoke ()方法,该方法是一种常见的实践后ADR模式(Action-Domain-Responder):

  • 注释
  • YAML
  • XML
  • PHP
1 2 3 4 5 6 7 8 9 10 11 12 13 14
/ / src /控制器/ Hello.php使用欧宝娱乐app下载地址\组件\HttpFoundation\响应;使用欧宝娱乐app下载地址\组件\路由\注释\路线;/ * * *@Route(“/ hello /{名称}”,name = "你好")* /你好{公共函数__invoke(美元的名字=“世界”){返回响应(sprintf (“你好% s !”,美元的名字));}}

替代基础控制器方法

当使用一个控制器定义为一种服务,你仍然可以延长AbstractController基地控制器并使用它的快捷方式。但是,你不需要!你可以选择扩展没有什么,使用依赖注入来访问不同的服务。

基地控制器类的源代码是一个伟大的方式看到如何完成常见任务。例如,$ this - >渲染()通常是用于呈现树枝模板并返回一个响应。但是,你也可以直接这样做:

控制器的定义为一种服务,你可以注入嫩枝服务和直接使用它:

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
/ / src /控制器/ HelloController.php名称空间应用程序\控制器;使用欧宝娱乐app下载地址\组件\HttpFoundation\响应;使用嫩枝\环境;HelloController{私人美元嫩枝;公共函数__construct(环境美元嫩枝){美元- >树枝=美元嫩枝;}公共函数指数(美元的名字){美元内容=美元- >嫩枝- >呈现(“你好/ index.html.twig”,(“名字”= >美元的名字]);返回响应(美元内容);}}

您还可以使用一个特殊的基于动作的依赖注入接收服务作为您的控制器动作方法的参数。

基本控制器方法和他们的服务替代品

看到如何取代基的最佳途径控制器是看的方便的方法AbstractController类,它的逻辑。

如果你想知道使用什么类型提示为每个服务,看到getSubscribedServices ()方法AbstractController

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