如何使用Akeneo \ Pim \ AkeneoPimClientInterface在Symfony中扩展生成的命令?
我使用php app / console generate:命令生成了一个命令,我得到了这个类:
class AppTriggerBuildCommand extends ContainerAwareCommand
然后将其发展到我需要API中的所有类别时。无缝地这是一个简单的问题,如何在命令中使用AkeneoPimClientInterface。
我想用它这样的东西。
$categories = $this->apiClient->getCategoryApi()->all();
这里的apiClient来自_contruct metod
public function __construct(AkeneoPimClient $apiClient, AkeneoLocaleMapper $mapper) {
$this->apiClient = $apiClient;
$this->mapper = $mapper;
}
并在使用中
use Akeneo\Pim\AkeneoPimClientInterface as AkeneoPimClient;
但是当我试图将它放在命令中的_construct方法中时,它想要使用父_construct,它只是看不到生成的命令。
有人能帮帮我吗?
php app / console触发器构建-vvv
[Symfony\Component\Console\Exception\CommandNotFoundException]
Command "trigger" is not defined.
Exception trace:
() at /var/www/html/iclei/vendor/symfony/symfony/src/Symfony/Component/Console/Application.php:526
Symfony\Component\Console\Application->find() at /var/www/html/iclei/vendor/symfony/symfony/src/Symfony/Bundle/FrameworkBundle/Console/Application.php:94
Symfony\Bundle\FrameworkBundle\Console\Application->find() at /var/www/html/iclei/vendor/symfony/symfony/src/Symfony/Component/Console/Application.php:190
Symfony\Component\Console\Application->doRun() at /var/www/html/iclei/vendor/symfony/symfony/src/Symfony/Bundle/FrameworkBundle/Console/Application.php:84
Symfony\Bundle\FrameworkBundle\Console\Application->doRun() at /var/www/html/iclei/vendor/symfony/symfony/src/Symfony/Component/Console/Application.php:117
Symfony\Component\Console\Application->run() at /var/www/html/iclei/app/console:27
答案 0 :(得分:1)
由于您扩展了ContainerAwareCommand
您可以访问Symfony的服务容器来获取这样的客户端(您可能必须用服务ID替换完全限定的类名,我不是100%肯定):
$this->container->get('Akeneo\Pim\AkeneoPimClientInterface');
如果你想使用构造函数(我鼓励你这样做),你几乎就在那里。您还必须同时调用父构造函数:
public function __construct(AkeneoPimClient $apiClient, AkeneoLocaleMapper $mapper)
{
parent::__construct();
$this->apiClient = $apiClient;
$this->mapper = $mapper;
}
两种方式都应该有效,但后者允许你从ContainerAwareCommand转移到更通用的ContainerCommand,这将帮助你使用Symfony 4,默认情况下容器中的服务将是私有的,因此你不能只是简单地得到它们来自容器,就像第一个版本一样。
关于命令名称的编辑:您可以将命令的名称指定为parent::__construct()
的参数,并通过configure()
方法设置它,您需要覆盖。在那里你可以打电话,例如$this->setName('trigger-build');
。注意不要使用空格,因为Symfony会将它们视为单独的参数。因此trigger
是命令的名称,build
是您“命令”命令的第一个参数。