繁体   English   中英

通过sonata_type_collection字段将sonata_media_type用作1:N时出现500错误

[英]500 error when using sonata_media_type as a 1:N via a sonata_type_collection field

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

SRC /我/包/实体/ 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 /我/包/实体/ 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中的NULL变量(“”)上调用方法(“trans”):第30行的CRUD:edit_orm_one_to_many.html.twig

我不确定从哪里开始。 我对SonataAdminBundle没有多少经验,特别是这种类型的内联编辑/创建其他实体。

版本信息:

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

这个问题似乎与sonata-users google group中的这个问题有关。

问题似乎是媒体类型的标签没有传递给模板,这导致在调用模板中的翻译器/调用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

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

{% 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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM