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

时间:2018-06-20 12:37:57

标签: symfony3.x akeneo pim

我想在我的捆绑包中创建一个命令akeneo,以查询诸如this之类的产品。

因此,经过多次测试,我总是遇到此错误:

  

在ProductQueryBuilderFactory.php第68行中:
  产品查询实例化时令牌不能为空   生成器。

这是我的代码:

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

2 个答案:

答案 0 :(得分:2)

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);

答案 1 :(得分:2)

要完成Julien的回答,请注意仅当您使用企业版时,才会出现此错误。实际上,在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