3

我正在使用 SonataAdminBundle 来管理我正在处理的项目的后端。在这种情况下,我想将一个或多个图像添加到“项目”。这是实体的相关位

src/My/Bundle/Entity/Item.php

/**
 * Item
 *
 * @ORM\Table(name="item")
 * @ORM\Entity()
 */
class Item
{
  /**
   * @var Media
   *
   * @ORM\OneToMany(targetEntity="\Application\Sonata\MediaBundle\Entity\Media", mappedBy="item")
   * ORM\JoinTable(name="item_media",
   *     joinColumns={@ORM\JoinColumn(name="item_id", referencedColumnName="id")}
   *   , inverseJoinColumns={@ORM\JoinColumn(name="media_id", referencedColumnName="id", unique=true)}
   * )
   */
  protected $media;
}

现在管理类的相关位:

src/My/Bundle/Entity/Item.php

class ItemAdmin extends Admin
{
  protected function configureFormFields(FormMapper $formMapper)
  {
    $formMapper
        ->add('media', 'sonata_type_collection'
        , array(
              'required' => false
            , 'type' => 'sonata_media_type'
            , 'by_reference' => false
            , 'type_options' => array(
                  'provider' => 'sonata.media.provider.image'
                , 'context'  => 'default'
                , 'auto_initialize' => false
              )
          )
        , array(
              'edit' => 'inline'
            , 'inline' => 'table'
            , 'allow_delete' => true
            , 'sortable' => 'position'
        ))
    ;
  }
}

现在在 UI 本身中,当我单击+ Add New按钮时,AJAX 响应是 500 错误,并显示以下消息:

无法在 SonataDoctrineORMAdminBundle:CRUD:edit_orm_one_to_many.html.twig 第 30 行的 NULL 变量 ("") 上调用方法 ("trans")

我真的不知道从这里去哪里。我对 SonataAdminBundle 没有太多经验,尤其是这种类型的内联编辑/创建其他实体。

版本信息:

  • PHP 5.4.19
  • Symfony 2.3.4
  • SonataAdminBundle 2.2.3
  • SonataMediaBundle 2.2.3
4

1 回答 1

4

这个问题似乎与奏鸣曲用户谷歌组中的这个问题有关。

问题似乎是媒体类型的标签没有传递给模板,这在调用翻译器/调用trans模板中的方法时导致错误:

{{ nested_field.vars['sonata_admin'].admin.trans(nested_field.vars.label) }}

SonataDoctrineORMAdminBundle/Resources/views/CRUD/edit_orm_one_to_many.html.twig中。

我建议您首先尝试为您的表单类型添加标签。

'label' => 'Media' 

如果这不起作用,您可以分叉存储库并在之后克隆它:

git clone https://github.com/yourusername/SonataDoctrineORMAdminBundle.git

然后使用 2.2.3 标签创建一个新分支:

git branch bugfix-2.2.3 2.2.3
git checkout bugfix-2.2.3

现在更改line 30edit_orm_one_to_many.html.twig(或完全删除它,这将导致标签根本不被呈现)

{% if nested_field.vars.label %}
    {{ nested_field.vars['sonata_admin'].admin.trans(nested_field.vars.label) }}
{% endif %}

然后提交您的更改并...

...要么覆盖标签(请注意标签通常不应该被覆盖)

git commit
git tag -f 2.2.3

...或(更好)在您的composer.json

"require": {
    "sonata/doctrine-orm-admin-bundle" : "bugfix-2.2.3#<commit-sha> as 2.2.3"

然后将此添加到您的composer.json

"repositories": [
    { "type": "vcs", "url": "http://github.com/yourusername/doctrine-orm-admin-bundle"}
],

之后跑

composer update sonata/doctrine-orm-admin-bundle

我不确定它是否有帮助,但在这个提交中添加了对内联编辑的多对多支持。您可以尝试将关联更改为多对多并测试异常是否消失。

如果这也不起作用,请报告回来,我会更深入地研究这一点。

于 2013-11-25T03:55:12.123 回答