Symfony DoctrineExtensions-如何翻译slug?

Symfony DoctrineExtensions-如何翻译slug?,symfony,doctrine,doctrine-extensions,Symfony,Doctrine,Doctrine Extensions,在过去的两个小时里,我一直在翻译我的鼻涕虫,但没有取得多大成功。首先,让我们来看看我的实体: /** * BlogPost * * @ORM\Entity */ class BlogPost implements Translatable { /** * @var integer * * @ORM\Column(name="id", type="integer") * @ORM\Id * @ORM\GeneratedValue(s

在过去的两个小时里,我一直在翻译我的鼻涕虫,但没有取得多大成功。首先,让我们来看看我的实体:

/**
 * BlogPost
 *
 * @ORM\Entity
 */
class BlogPost implements Translatable
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @Gedmo\Translatable
     * @ORM\Column(name="title", type="string", length=128)
     */
    private $title;

    /**
     * @Gedmo\Slug(fields={"title"})
     * @Gedmo\Translatable
     * @ORM\Column(length=128)
     */
    private $slug;
这很简单。现在,当我这样做的时候:

$em = $this->getDoctrine()->getManager();

$blogPost = new BlogPost();
$blogPost->setTitle('my title in FRANCAIS');
$blogPost->setTranslatableLocale('fr_ca');
$em->persist($blogPost);
$em->flush();

$blogPost->setTitle('my title in ENGLISH');
$blogPost->setTranslatableLocale('en_us');
$em->persist($blogPost);
$em->flush();
只有我的标题被翻译,但我的鼻涕虫只有法语。。。但是没有TranslationListener(该文件不存在)。文件中只有一个注释对我意义不大:

注意:这些转换不会作为对象的普通字段进行处理,如果您转换段塞,则附加转换将不知道如何生成段塞,因此在创建段塞时,应将值作为附加转换进行处理

我必须承认,我觉得自己陷入了绝境。有人能分享一些关于这件事的知识吗

我建议您使用。这使得转换实体的任何属性变得非常简单:

class BlogPost
{
    use ORMBehaviors\Translatable\Translation;

    // anything that should not be translated
    // follows in this class
}
并添加一个翻译实体:

class BlogPostTranslation
{
    /**
     * @Gedmo\Slug(fields={"title"})
     * @ORM\Column(length=128)
     */
    private $slug;

    // ...
}
现在,您可以访问以下任何翻译:

$blogPost->getSlug(); // default language slug
$blogPost->translate('en')->getSlug(); // English slug
$blogPost->translate('fr')->getSlug(); // French slug
不要忘记调用
$entity->mergeNewTranslations()
$em->persist($entity)之后以更新翻译表

编辑:
请注意,DoctrineBehaviours捆绑包也支持更好的
slaggable
。像中所示那样使用它。

我会看一看,明天再回来给你!谢谢你花时间来帮助我。好吧,我试过使用DoctrineBehaviours包,它确实非常好。然而,我无法让翻译行为正常工作!我总是犯一个奇怪的错误。它正在寻找一个不存在的实体。消息是:在MyProject\MyBundle\entity\BlogPost\translateable中找不到目标实体MyProject\MyBundle\entity。有什么想法吗?听起来像是打字错误。您注册了吗?是的,已注册侦听器。大多数代码是直接从文档复制/粘贴的。嗯,我会关闭这个,因为这是另一个主题。谢谢你的帮助,我将在评论中发布新问题的链接。