如何使命令延迟加载
编辑本页警告:您正在浏览的文档欧宝官网下载appob娱乐下载Symfony 5.2,现已不再维护。
读本页的更新版本用于Syob娱乐下载mfony 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::类)
.
此工作,包括代码示例,是根据创作共用BY-SA 3.0许可证。