如何使命令延迟加载

编辑该页面

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

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

如何使命令延迟加载

请注意

如果您正在使用Symfony的完整框架,你ob娱乐下载可能寻找细节创建懒惰的命令

将命令添加到您的应用程序的传统方法是使用add (),预计命令实例作为一个参数。

为了延迟加载命令,你需要注册一个中间加载程序将负责返回命令实例:

1 2 3 4 5 6 7 8 9 10 11
使用应用程序\命令\HeavyCommand;使用ob娱乐下载\组件\控制台\应用程序;使用ob娱乐下载\组件\控制台\CommandLoader\FactoryCommandLoader;美元commandLoader=FactoryCommandLoader ([“应用程序:重”= >函数(){返回HeavyCommand ();}));美元应用程序=应用程序();美元应用程序- >setCommandLoader (美元commandLoader);美元应用程序- >run ();

这种方式,HeavyCommand只有当创建实例应用:重命令实际上是调用。

这个例子使用了内置的FactoryCommandLoader类,但setCommandLoader ()方法接受任何CommandLoaderInterface所以你可以用你自己的实现实例。

内置命令加载器

FactoryCommandLoader

FactoryCommandLoader类提供了一个命令延迟加载的方法,因为它需要一个数组命令工厂只作为构造函数参数:

1 2 3 4 5 6
使用ob娱乐下载\组件\控制台\CommandLoader\FactoryCommandLoader;美元commandLoader=FactoryCommandLoader ([“应用程序:foo”= >函数(){返回FooCommand ();},“应用程序:酒吧”= > [BarCommand::类,“创建”)));

工厂可以是任何PHP调用,将每一次执行get ()被称为。

ContainerCommandLoader

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

1 2 3 4 5 6 7 8 9 10
使用ob娱乐下载\组件\控制台\CommandLoader\ContainerCommandLoader;使用ob娱乐下载\组件\DependencyInjection\ContainerBuilder;美元containerBuilder=ContainerBuilder ();美元containerBuilder- >注册(FooCommand::类,FooCommand::类);美元containerBuilder- >编译();美元commandLoader=ContainerCommandLoader (美元containerBuilder,(“应用程序:foo”= > FooCommand::类,]);

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

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