【问题标题】:error on override akeneo entity覆盖 akeneo 实体时出错
【发布时间】:2017-08-17 08:38:05
【问题描述】:

我尝试覆盖 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]];
}

【问题讨论】:

    标签: php symfony doctrine-extensions akeneo


    【解决方案1】:

    确保您正在加载父级。

    在文件/src/Acme/Bundle/CatalogBu​​ndle/AcmeCatalogBu​​ndle.php 中添加

    public function getParent()
    {
        return 'PimCatalogBundle';
    }
    

    【讨论】:

      【解决方案2】:

      解决方案:

      上述问题是由于 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/CatalogBu​​ndle/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');
          }
      }
      

      如果您有任何问题,请告诉我

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-06-05
        • 2017-01-10
        • 1970-01-01
        • 2013-07-26
        • 1970-01-01
        • 2021-10-24
        • 1970-01-01
        • 2012-09-19
        相关资源
        最近更新 更多