2

我正在寻找将 KnplabsDoctrineBehaviors 与 SonataAdmin 一起使用的好方法。

在这个包的帮助下,我已经在奏鸣曲管理包中呈现了一个表单:https ://github.com/a2lix/TranslationFormBundle 它工作正常并正确添加了一个实体及其翻译。

要在奏鸣曲中列出实体,我从中找到了破解方法,但是当我在 Sonata-admin 的 listMapper 中将可排序属性添加到 Nom 时,它不起作用。

class Sport
{

     use \Knp\DoctrineBehaviors\Model\Translatable\Translatable;

     public function __call($method, $arguments)
    {
        return $this->proxyCurrentLocaleTranslation($method, $arguments);
    }   

    /**
     * @ORM\Column(type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
     private $id;

    // Need this method for the admin list template
    public function getNom(){
        return $this->translate()->getNom();
    }

    // Work even the precedent method not here, the proxy call work fine.
    public function __toString(){
        return $this->getNom();
    }
}

class SportTranslation
{
    use ORMBehaviors\Translatable\Translation;

    /**
     * @ORM\Column(type="string", length=255)
     */
    protected $nom;

    /**
     * @return string
     */
    public function getNom()
    {
        return $this->nom;
    }

    /**
     * @param  string
     * @return null
     */
     public function setNom($nom)
     {
         $this->nom = $nom;
     }
}

当我尝试按 Nom 排序时,出现此错误:

Catchable Fatal Error: Argument 1 passed to
Sonata\DoctrineORMAdminBundle\Datagrid\ProxyQuery::entityJoin()
must be of the type array, null given, called in
.../vendor/sonata-project/doctrine-orm-admin-bundle/Sonata/DoctrineORMAdminBundle/Datagrid/ProxyQuery.php
on line 140
and defined in
.../vendor/sonata-project/doctrine-orm-admin-bundle/Sonata/DoctrineORMAdminBundle/Datagrid/ProxyQuery.php
line 245

我想这是因为 Nom 不在 Sport 中,我不知道如何处理这个问题。

4

2 回答 2

1

响应有点慢,因为我自己刚刚遇到这个问题。我发现这个问题的解决方案实际上相当简单。就我而言,我希望能够按文章状态和标题进行过滤,其中标题是可翻译的字段。我设法让它工作的方法是显式使用翻译关系并在这个子实体上指定字段,如下所示:

protected function configureDatagridFilters(DatagridMapper $datagridMapper)
{
    $datagridMapper
        ->add('translations.title', null, array('label' => 'Title'))
        ->add('status');
}

我希望这可以帮助其他人在这种情况下......

于 2013-08-16T10:30:13.510 回答
0

我终于切换到https://github.com/symfony2admingenerator/AdmingeneratorGeneratorBundle从我的角度来看更灵活。不知道您的解决方案是否有效,但是在大多数情况下进行排序时,它会考虑所有翻译。

例如:

  • Nom1:fr:test1
  • Nom1 : en : test1
  • Nom2:fr:test2
  • Nom2 : en : test0

当您想按 nom 排序时,结果如下:

  • Nom2 : en : test0
  • Nom1:fr:test1
  • Nom1 : en : test1
  • Nom2:fr:test2

或者

这个:

  • Nom2 : en : test2
  • Nom1:fr:test1
  • Nom1 : en : test1
  • Nom2:fr:test0

因此它将始终在 Nom1 之前显示 Nom2,因为它不考虑语言。我可以用 symfony2admingenerator 轻松解决这个问题,所以我切换了:-)

于 2013-08-16T19:32:38.843 回答