先进的容器配置

编辑该页面

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

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

先进的容器配置

服务作为公共/私有

在定义服务时,您通常会希望能够访问这些定义在你的应用程序代码。这些服务被称为公共。例如,学说服务注册的容器在使用DoctrineBundle是公共服务可以通过访问它:

1
美元学说=美元容器- >get (“原则”);

然而,有些用例当你不想让一个服务是公开的。这是常见的定义当一个服务只是因为它可以作为参数用于另一个服务。

请注意

如果你使用一个私人服务作为参数只有一个服务,这将导致一个内联实例化(如。新的PrivateFooBar ())在其他服务,使其在运行时公开不可用。

简单的说:一个服务将是私有的,当你不想直接从代码访问它。

这是一个例子:

  • YAML
  • XML
  • PHP
1 2 3 4
服务:foo:类:例子\ Foo公众:

现在服务是私人的,你不能电话:

1
美元容器- >get (“foo”);

然而,如果一个服务被标记为私有的,你仍然可以别名(见下文)来访问这个服务(通过别名)。

请注意

默认服务公众。

合成服务

综合服务服务注入容器,而不是创建的容器。

例如,如果您正在使用HttpKernel组件与DependencyInjection组件,然后请求服务是注射的ContainerAwareHttpKernel:处理()当进入请求方法范围。类不存在当没有要求,所以它不能包含在容器的配置。同时,服务应该为应用程序中的每个subrequest不同。

创建一个合成服务,集合成真正的:

  • YAML
  • XML
  • PHP
1 2 3
服务:要求:合成:真正的

如你所见,只有合成选项设置。所有其他选项只用于配置服务是如何创建的容器。作为服务不是由容器,这些选项是省略。

现在,您可以将类通过使用容器::设置:

1 2
/ /……美元容器- >集(“请求”,MyRequest (…));

混叠

有时你可能想使用快捷键访问一些服务。可以通过混叠,此外,你甚至可以别名非公开的服务。

  • YAML
  • XML
  • PHP
1 2 3 4 5
服务:foo:类:例子\ Foo栏:别名:喷火

这意味着当直接使用容器,你可以访问喷火服务要求酒吧服务是这样的:

1
美元容器- >get (“酒吧”);/ /将返回foo服务

提示

在YAML中,您还可以使用别名服务的快捷方式:

1 2 3 4
服务:foo:类:例子\ Foo栏:“@foo”

要求的文件

会用例之前当你需要包含另一个文件服务本身被加载。为此,您可以使用文件指令。

  • YAML
  • XML
  • PHP
1 2 3 4
服务:foo:类:例子\ Foo \酒吧文件:“% kernel.root_dir % / src /道路/ /文件/直接给”

注意,Symfony会在ob娱乐下载内部调用PHP语句require_once,这意味着每个请求的文件只包含一次。

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