在产品查询生成器的实例化中,令牌不能为空。 / 查询 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
我想在我的包中创建一个命令 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