在产品查询生成器的实例化中,令牌不能为空。 / 查询 Akeneo 2

Token cannot be null on the instantiation of the Product Query Builder. / Query Akeneo 2

我想在我的包中创建一个命令 akeneo 来查询我的产品,例如 this

所以,经过多次测试,我总是出现这个错误:

In ProductQueryBuilderFactory.php line 68:
Token cannot be null on the instantiation of the Product Query Builder.

这是我的代码:

$pqbFactory =  $this->getApplication()->getKernel()->getContainer()->get('pim_catalog.query.product_query_builder_factory');
$pqb = $pqbFactory->create(['default_locale' => 'fr_FR', 'default_scope' => 'ecommerce']);  // error

PQB 需要经过身份验证的用户才能对结果应用正确的过滤器。要在您的命令中对用户进行身份验证,您可以从 get product command 中获得灵感。我们只需要一个 --username 参数并手动将其添加到令牌存储中。

$userManager = $this->getContainer()->get('pim_user.manager');
$user = $userManager->findUserByUsername($username);

if (null === $user) {
    $output->writeln(sprintf('<error>Username "%s" is unknown<error>', $username));

   return false;
}

$token = new UsernamePasswordToken($user, null, 'main', $user->getRoles());
$this->getTokenStorage()->setToken($token);

要完成 Julien 的回答,请注意 仅当您使用企业版 (EE) 时才会出现此错误。的确,在EE中,我们装饰了普通的product_query_builder_factory来申请权限。

如果您不想申请权限(并且不使用任何令牌),您可以使用pim_catalog.query.product_query_builder_factory_without_permission:

<?php

require __DIR__.'/vendor/autoload.php';

$kernel = new AppKernel('dev', true);
$kernel->boot();

$pqbFactory =  $kernel->getContainer()->get('pim_catalog.query.product_query_builder_factory_without_permission');
$pqb = $pqbFactory->create(['default_locale' => 'fr_FR', 'default_scope' => 'ecommerce']);  // you won't have any error