如何使命令延迟加载

编辑本页

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

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

如何使命令延迟加载

3.4

Symfony 3.4中引入了对命令延迟加载的支持。欧宝娱乐app下载地址

请注意

如果您正在使用Symfony全栈框架,您可欧宝娱乐app下载地址能正在寻找关于创建惰性命令

向应用程序添加命令的传统方法是使用add (),它期望命令实例作为参数。

为了惰性加载命令,您需要注册一个中间加载器,它将负责返回命令实例:

1 2 3 4 5 6 7 8 9 10 11
使用AppBundle命令HeavyCommand使用欧宝娱乐app下载地址组件控制台应用程序使用欧宝娱乐app下载地址组件控制台CommandLoaderFactoryCommandLoadercommandLoaderFactoryCommandLoader ([“应用程序:重”= >函数()返回HeavyCommand ();}));应用程序应用程序();应用程序->setCommandLoader (commandLoader);应用程序->run ();

这条路,HeavyCommand时,才会创建实例应用:重命令实际被调用。

本例使用了内置的FactoryCommandLoader类,但是setCommandLoader ()方法接受任何CommandLoaderInterface实例,以便您可以使用自己的实现。

内置命令加载器

FactoryCommandLoader

FactoryCommandLoader类提供了一种简单的方式来获取延迟加载的命令,因为它接受命令工厂作为它唯一的构造函数参数:

1 2 3 4 5 6
使用欧宝娱乐app下载地址组件控制台CommandLoaderFactoryCommandLoadercommandLoaderFactoryCommandLoader ([“应用程序:foo”= >函数()返回FooCommand ();},“应用程序:酒吧”= > [BarCommand::类,“创建”)));

工厂可以是任何PHP可调用的,并且每次都会被执行get ()被称为。

ContainerCommandLoader

ContainerCommandLoader类可以用来从PSR-11容器加载命令。因此,它的构造函数接受一个PSR-11ContainerInterface实现作为第一个参数,命令映射作为最后一个参数。命令映射必须是一个数组,命令名作为键,服务标识符作为值:

1 2 3 4 5 6 7 8 9 10
使用欧宝娱乐app下载地址组件控制台CommandLoaderContainerCommandLoader使用欧宝娱乐app下载地址组件DependencyInjectionContainerBuildercontainerBuilderContainerBuilder ();containerBuilder->注册(FooCommand::类,FooCommand::类);containerBuilder->编译();commandLoaderContainerCommandLoader (containerBuilder, (“应用程序:foo”= > FooCommand::类,]);

像这样,执行应用:foo命令将加载FooCommand呼叫服务containerBuilder - > get (FooCommand::类)

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