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。有什么想法吗?听起来像是打字错误。您注册了吗?是的,已注册侦听器。大多数代码是直接从文档复制/粘贴的。嗯,我会关闭这个,因为这是另一个主题。谢谢你的帮助,我将在评论中发布新问题的链接。