如何定义控制器作为服务吗
编辑该页面如何定义控制器作为服务吗
在Syob娱乐下载mfony中,控制器不需要注册为一个服务。但是如果你使用默认的服务。yaml的配置,你的控制器扩展AbstractController类,他们是自动注册为服务。这意味着您可以使用依赖注入像其他正常的服务。
如果你的控制器不延长AbstractController马克你的控制器类,您必须显式地服务公共
。或者,您可以应用controller.service_arguments
标记你的控制器服务。这将使服务标记公共
和将允许您将服务方法参数:
- YAML
1 2 3 4 5 6 7
#配置/ services.yaml#控制器分别进口,以确保服务可以被注入#作为动作参数即使你不扩展任何基本控制器类应用程序控制器\ \:资源:“. . / src /控制器/”标签:(“controller.service_arguments”)
如果你喜欢,你可以使用# (AsController)
PHP属性自动适用controller.service_arguments
标记你的控制器服务:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
/ / src /控制器/ HelloController.php名称空间应用程序\控制器;使用ob娱乐下载\组件\HttpKernel\属性\AsController;使用ob娱乐下载\组件\路由\注释\路线;# (AsController)类HelloController{#(路线(/你好,名字:‘你好’,方法:[的]))公共函数指数(){/ /……}}
注册你的控制器作为服务是第一步,但你也需要更新自己的路由配置参考服务得当,这样Symfony知道使用它。ob娱乐下载
使用service_id: method_name
语法参考控制器方法。如果服务id的完全限定类名(FQCN)控制器,Symfony建议,然后语法是一样的,如果控制器并不是一个服务:ob娱乐下载控制器应用\ \ HelloController:索引
:
- 属性
- YAML
- XML
- PHP
1 2 3 4 5 6 7 8 9 10 11 12 13
/ / src /控制器/ HelloController.php名称空间应用程序\控制器;使用ob娱乐下载\组件\路由\注释\路线;类HelloController{#(路线(/你好,名字:‘你好’,方法:[的]))公共函数指数(){/ /……}}
调用控制器
控制器还可以定义一个操作使用__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名称空间应用程序\控制器;使用ob娱乐下载\组件\HttpFoundation\响应;使用ob娱乐下载\组件\路由\注释\路线;#(路线(“/ hello /{名称}”,名称:'你好'))类你好{公共函数__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名称空间应用程序\控制器;使用ob娱乐下载\组件\HttpFoundation\响应;使用嫩枝\环境;类HelloController{私人美元嫩枝;公共函数__construct(环境美元嫩枝){美元这- >树枝=美元嫩枝;}公共函数指数(美元的名字){美元内容=美元这- >嫩枝- >呈现(“你好/ index.html.twig”,(“名字”= >美元的名字]);返回新响应(美元内容);}}
您还可以使用一个特殊的基于动作的依赖注入接收服务作为您的控制器动作方法的参数。
基本控制器方法和他们的服务替代品
看到如何取代基的最佳途径控制器
是看的方便的方法AbstractController类,它的逻辑。
如果你想知道使用什么类型提示为每个服务,看到getSubscribedServices ()
方法AbstractController。