【问题标题】:KnpDoctrineBehaviors, how to use Sluggable with TranslatableKnpDoctrineBehaviors,如何使用 Sluggable 和 Translatable
【发布时间】:2013-07-23 15:26:15
【问题描述】:

我使用 KnpDoctrineBehaviors(Sluggable、Translatable 等)。我用于 slug 的字段,我只有在 MyClassTranslations 中。因此,当我为我的翻译类添加 Sluggable 时,我为每个 i18n 条目都有不同的 slug。如何解决这个问题?谢谢!

【问题讨论】:

  • 您想为每个实体使用一个 slug 还是为不同的翻译使用不同的 slug?
  • @nifr 我希望每个实体都有一个 slug。
  • 然后只需将 slug 属性添加到您的基础 Entity 类...而不是您的 EntityTranslation 类。
  • @nifr 是的,但是在我的实体中我没有字段标题,例如,我在我的 EntityTranslation 中有它。对于蛞蝓,我需要向实体 getSluggableFields 添加方法。
  • 您找到解决方案了吗?

标签: symfony doctrine-orm behavior symfony-2.3


【解决方案1】:

您可以在您的实体中覆盖标题的 getter,并且只需从您的实体上的 KnpDoctrineBehaviors 调用 translate 方法。它将尝试在您当前的语言环境中获取标题翻译,或回退到默认语言环境翻译。

<?php

namespace AppBundle\Entity;

use Knp\DoctrineBehaviors\Model as ORMBehaviors;
use AppBundle\Entity\AppTrait\TranslatableEntity;

class SomeEntity
{
    use ORMBehaviors\Translatable\Translatable;
    use ORMBehaviors\Sluggable\Sluggable;

    public function getSluggableFields()
    {
        return ['title'];
    }

    public function getTitle()
    {
        return $this->translate(null,true)->getTitle();
    }

这意味着如果您使用不同的语言环境更新标题,则可能会经常更新 slug,您可能希望避免这种情况,而只使用英文标题生成 slug:

    public function getTitle()
    {
        return $this->translate('en')->getTitle();
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-04
    • 1970-01-01
    • 2019-11-19
    • 2018-11-11
    • 1970-01-01
    • 2018-05-25
    • 2019-01-30
    • 2014-06-12
    相关资源
    最近更新 更多