实现 TranslationInterface 时找不到映射文件

No mapping file found when implementing TranslationInterface

我正在使用 Ez-Extends 扩展 Sonata Classification Bundle 的类别实体。

现在我想使用 Knp\DoctrineBehaviors\Model\Translatable\TranslatableTrait 使我的类别可翻译。我在我的类别 class 中应用了特征,并让它实现了 TranslatableInterface。然后我创建一个新的 CategoryTranslation class:

<?php

namespace App\Application\Sonata\ClassificationBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Knp\DoctrineBehaviors\Contract\Entity\TranslationInterface;
use Knp\DoctrineBehaviors\Model\Translatable\TranslationTrait;
use Symfony\Component\Serializer\Annotation\Groups;

/**
 * @ORM\Entity
 */
class CategoryTranslation implements TranslationInterface
{
    use TranslationTrait;

    /**
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     * @ORM\Column(type="integer")
     */
    private $id;

    /**
     * @var string | null
     * @ORM\Column(type="string")
     * @Groups("filter")
     */
    private $name;

    private $trans;

    /**
     * @return mixed
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * @param mixed $id
     * @return CategoryTranslation
     */
    public function setId($id)
    {
        $this->id = $id;
        return $this;
    }

    /**
     * @return string|null
     */
    public function getName(): ?string
    {
        return $this->name;
    }

    /**
     * @param string|null $name
     * @return CategoryTranslation
     */
    public function setName(?string $name): CategoryTranslation
    {
        $this->name = $name;
        return $this;
    }

    /**
     * @return mixed
     */
    public function getTrans()
    {
        return $this->trans;
    }

    /**
     * @param mixed $trans
     * @return CategoryTranslation
     */
    public function setTrans($trans)
    {
        $this->trans = $trans;
        return $this;
    }



}

但是,当我尝试在应用程序中执行任何操作时,我现在收到此消息:

In MappingException.php line 65:

  No mapping file found named 'CategoryTranslation.orm.xml' for class 'App\Application\Sonata\ClassificationBundle\E
  ntity\CategoryTranslation'.

据我所知,这个新实体应该是使用注解进行映射,而不是XML。我做错了什么?

编辑:这是我的 doctrine.yaml 文件的内容:

parameters:
    # Adds a fallback DATABASE_URL if the env var is not set.
    # This allows you to run cache:warmup even if your
    # environment variables are not available yet.
    # You should not need to change this value.
    env(DATABASE_URL): ''

doctrine:
    dbal:
        # configure these for your database server
        driver: 'pdo_mysql'
        server_version: '5.6'
        charset: utf8

        # With Symfony 3.3, remove the `resolve:` prefix
        url: '%env(resolve:DATABASE_URL)%'

        types:
            json: Sonata\Doctrine\Types\JsonType
    orm:
        auto_generate_proxy_classes: '%kernel.debug%'
        naming_strategy: doctrine.orm.naming_strategy.underscore
        auto_mapping: true
        mappings:
            App:
                is_bundle: false
                type: annotation
                dir: '%kernel.project_dir%/src/Entity'
                prefix: 'App\Entity'
                alias: App
            SonataMediaBundle: ~
            ApplicationSonataMediaBundle: ~
        metadata_cache_driver: array
        result_cache_driver: array
        query_cache_driver: array

我猜实体的奏鸣曲映射配置是xml。 通过在您的目录 App\Application\Sonata\ClassificationBundle\Entity\CategoryTranslation 中创建一个新的奏鸣曲实体,它将使用您的 doctrine.yaml:

中定义的映射配置

SonataMediaBundle: ~

ApplicationSonataMediaBundle: ~

其中使用默认的 (xml)。只有您的 App 映射中的映射(即在您的目录 dir: '%kernel.project_dir%/src/Entity' 中)才会使用您指定的注释。

您可以为您的奏鸣曲包指定 type: annotation(但它可能会使包中的现有实体失败,因此不推荐,但要测试)或为此特定生成 xml 映射文件实体。