gpt4 book ai didi

symfony - 使用 YAML 配置带有 Symfony2 的 Translatable Doctrine2 扩展

转载 作者:行者123 更新时间:2023-12-04 08:27:25 25 4
gpt4 key购买 nike

简而言之

我正在编写一个 Symfony2/Doctrine2 应用程序,并使用 YAML 安装和配置了 StofDoctrineExtensionsBundle 提供的 Translatable 扩展,但是没有生成额外的转换表,并且在尝试使用具有可翻译属性的实体时会抛出以下异常:

No mapping file found named '/var/www/my-project/vendor/gedmo/doctrine-extensions/lib/Gedmo/Translatable/Entity/Translation.orm.yml' for class 'Gedmo\Translatable\Entity\Translation'.



更详细

我正在尝试让 Translatable 扩展在我的 Symfony2/Doctrine2 应用程序中工作,该应用程序由 StofDoctrineExtensionsBundle 提供。 ,但是我可以找到的大多数可用文档主要针对配置注释的使用,但我将使用 YAML,因为这是我配置其他所有内容的方式。

我的配置

我已将以下内容添加到我的 composer.json 中文件并运行了 composer update命令: "stof/doctrine-extensions-bundle": "dev-master"并且该捆绑包已在我的 app/AppKernel.php 中注册文件。

我的 app/config/config.yml文件有如下配置:
doctrine:
orm:
auto_generate_proxy_classes: %kernel.debug%
auto_mapping: true
mappings:
gedmo_translatable:
type: yml
prefix: Gedmo\Translatable\Entity
dir: "%kernel.root_dir%/../vendor/gedmo/doctrine-extensions/lib/Gedmo/Translatable/Entity"
alias: GedmoTranslatable
is_bundle: false

stof_doctrine_extensions:
default_locale: en_GB
translation_fallback: true
orm:
default:
timestampable: true
translatable: true

然后我在 YAML 中定义了一个实体:
Foo\ContentBundle\Entity\Article:
type: entity
repositoryClass: Foo\ContentBundle\Repository\ArticleRepository
table: article
gedmo:
translation:
locale: locale
id:
id:
type: integer
generator: { strategy: AUTO }
fields:
name:
type: string
length: 64
gedmo:
- translatable
content:
type: text
gedmo:
- translatable
# ... #
oneToMany:
# ... #

然后我运行了控制台命令 php app/console doctrine:generate:entities FooContentBundle生成实体类,并手动添加了语言环境属性和 setter :
class Article
{
/* ... */
private $locale;

public function setTranslatableLocale($locale)
{
$this->locale = $locale;
}
/* ... */
}

运行后 php app/console doctrine:schema:update --force ,我的文章表是与其关联一起创建的,但与翻译无关(我假设应该为此创建一个表......)

然后,在使用可翻译的实体时,出现异常:

No mapping file found named '/var/www/my-project/vendor/gedmo/doctrine-extensions/lib/Gedmo/Translatable/Entity/Translation.orm.yml' for class 'Gedmo\Translatable\Entity\Translation'.



异常引用的 YAML 文件在它正在查找的路径中不存在,我也无法在其他任何地方找到它。

有没有人对我哪里出错有任何想法?

更新:经过进一步调查......

运行 php app/console doctrine:mapping:info但是,如果我更新 gedmo_translatable:,则显示我的所有实体,而没有任何与翻译相关的内容。我的一部分 app/config/config.yml文件和更改 type: ymltype: annotation然后再次运行命令,我得到以下列出:
[OK]   Gedmo\Translatable\Entity\MappedSuperclass\AbstractTranslation
[OK] Gedmo\Translatable\Entity\Translation
[OK] Gedmo\Translatable\Entity\MappedSuperclass\AbstractPersonalTranslation

此时,我可以更新我的架构,并且我有一个新的 ext_translations table 。但是,在处理我的实体时没有插入任何内容,大概是因为它现在期望通过注释而不是 YAML 进行配置,将我的配置改回 type: yml正如预期的那样,再次开始抛出异常。

最佳答案

在尝试了文档建议不起作用的事情后,即将注释和 YAML 配置混合在同一个包中,看起来我有工作。整个事情感觉像是一个错误或一个不完整的实现,但是我可能做错了一些事情。这是什么工作...

app/config/config.yml 中设置以下内容:doctrine.orm.mappings.gedmo_translatable.type: annotation
如我的原始问题 中所述,在我的 YAML 架构定义中设置可翻译配置以及 作为我的类文件中的注释:

/* ... */
use Gedmo\Mapping\Annotation as Gedmo;
/* ... */
class Article
{
/* ... */

/**
* @Gedmo\Translatable
* @var string $name
*/
private $name;

/**
* @Gedmo\Locale
*/
private $locale;

public function setTranslatableLocale($locale)
{
$this->locale = $locale;
}
/* ... */
}

执行此操作后,将创建附加表,并在持久化实体时将翻译插入其中。

关于symfony - 使用 YAML 配置带有 Symfony2 的 Translatable Doctrine2 扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12935829/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com