我想在我的捆绑包中创建一个命令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
答案 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