如何解决实现 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。我做错了什么?
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 举报,一经查实,本站将立刻删除。