微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

实现 TranslationInterface 时找不到映射文件

如何解决实现 TranslationInterface 时找不到映射文件

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

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

<?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。我做错了什么?

编辑:这是我的学说.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)。只有在您的应用映射中(即在您的目录 dir: '%kernel.project_dir%/src/Entity' 中)的映射才会使用您指定的注释。

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。