我尝试覆盖akeneo项目的category
实体。我按照文档但总是有一个我无法解决的错误。
在config.yml
-
original: Pim\Bundle\CatalogBundle\Entity\Category
override: MyBundle\CatalogBundle\Entity\Category
entities.yml
中的
parameters:
pim_catalog.entity.category.class: MyBundle\CatalogBundle\Entity\Category
覆盖,category.php
<?php
namespace MyBundle\CatalogBundle\Entity;
use Pim\Bundle\CatalogBundle\Entity\Category as BaseCategory;
class Category extends BaseCategory
{
protected $test;
public function getTest()
{
return $this->test;
}
public function setTest($test)
{
$this->test = $test;
return $this;
}
}
category.orm.yml
MyBundle\CatalogBundle\Entity\Category:
type: entity
table: pim_catalog_category
changeTrackingPolicy: DEFERRED_EXPLICIT
repositoryClass: Akeneo\Bundle\ClassificationBundle\Doctrine\ORM\Repository\CategoryRepository
uniqueConstraints:
pim_category_code_uc:
columns:
- code
gedmo:
tree:
type: nested
fields:
test:
type: string
length: 255
nullable: true
然后在浏览器上出现以下错误:
UnexpectedValueException in TreeListener.php line 74: Tree object class: Pim\Bundle\CatalogBundle\Entity\Category must have tree metadata at this point
这是抛出异常的函数,它是gedmo教义扩展的一部分
public function getStrategy(ObjectManager $om, $class)
{
if (!isset($this->strategies[$class])) {
$config = $this->getConfiguration($om, $class);
if (!$config) {
throw new \Gedmo\Exception\UnexpectedValueException("Tree object class: {$class} must have tree metadata at this point");
}
$managerName = 'UnsupportedManager';
if ($om instanceof \Doctrine\ORM\EntityManager) {
$managerName = 'ORM';
} elseif ($om instanceof \Doctrine\ODM\MongoDB\DocumentManager) {
$managerName = 'ODM\\MongoDB';
}
if (!isset($this->strategyInstances[$config['strategy']])) {
$strategyClass = $this->getNamespace().'\\Strategy\\'.$managerName.'\\'.ucfirst($config['strategy']);
if (!class_exists($strategyClass)) {
throw new \Gedmo\Exception\InvalidArgumentException($managerName." TreeListener does not support tree type: {$config['strategy']}");
}
$this->strategyInstances[$config['strategy']] = new $strategyClass($this);
}
$this->strategies[$class] = $config['strategy'];
}
return $this->strategyInstances[$this->strategies[$class]];
}
答案 0 :(得分:0)
确保您正在加载父项。
在文件/src/Acme/Bundle/CatalogBundle/AcmeCatalogBundle.php中添加
public function getParent()
{
return 'PimCatalogBundle';
}
答案 1 :(得分:0)
由于DependencyInjection,发生了上述问题。为了解决此问题,请按照以下说明进行操作:
1) It has to live in the DependencyInjection namespace of the bundle;
2) It has to implement the ExtensionInterface, which is usually achieved by extending the Extension class;
3) The name is equal to the bundle name with the Bundle suffix replaced by Extension (e.g. the Extension class of the AcmeBundle would be called AcmeExtension and the one for AcmeCatalogBundle would be called AcmeCatalogExtension).
#/src/Acme/Bundle/CatalogBundle/DependencyInjection/AcmeCatalogExtension.php
<?php
namespace Acme\Bundle\CatalogBundle\DependencyInjection;
use Symfony\Component\Config\FileLocator;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Loader;
use Symfony\Component\HttpKernel\DependencyInjection\Extension;
class AcmeCatalogExtension extends Extension
{
public function load(array $configs, ContainerBuilder $container)
{
$loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
$loader->load('entities.yml');
}
}
让我知道您是否有任何疑问