如何使命令延迟加载
编辑该页面如何使命令延迟加载
请注意
如果您正在使用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 ();美元容器- >注册(FooCommand::类,FooCommand::类);美元容器- >编译();美元commandLoader=新ContainerCommandLoader (美元容器,(“应用程序:foo”= > FooCommand::类,]);
像这样,执行应用:foo
命令将加载FooCommand
服务通过调用$容器- > get (FooCommand::类)
。
这项工作,包括代码示例,许可下Creative Commons冲锋队3.0许可证。