0

我想在我的捆绑包中创建一个命令 akeneo,像这样查询我的产品。

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

在 ProductQueryBuilderFactory.php 第 68 行中:
在 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
4

2 回答 2

2

PQB 需要有一个经过身份验证的用户才能对结果应用正确的过滤器。要在您的命令中验证用户身份,您可以从get product 命令中获得灵感。我们只需接受一个--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);
于 2018-06-20T16:06:03.507 回答
2

要完成 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
于 2018-06-21T08:09:42.380 回答