3

SonataAdminBundle を使用して、現在取り組んでいるプロジェクトのバックエンドを管理しています。この場合、1 つ以上の画像を「アイテム」に追加したいと考えています。エンティティの関連ビットは次のとおりです

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 エラーで、次のメッセージが表示されます。

30 行目の SonataDoctrineORMAdminBundle:CRUD:edit_orm_one_to_many.html.twig の NULL 変数 ("") でメソッド ("trans") を呼び出すことはできません

ここからどこへ行けばいいのかよくわかりません。SonataAdminBundle、特にこのタイプのインライン編集/他のエンティティの作成の経験はあまりありません。

バージョン情報:

  • PHP 5.4.19
  • シンフォニー 2.3.4
  • SonataAdminBundle 2.2.3
  • SonataMediaBundle 2.2.3
4

1 に答える 1

4

この問題は、sonata-users google グループのこの質問に関連しているようです。

問題は、メディア タイプのラベルがテンプレートに渡されず、トランスレータを呼び出す/テンプレートでメソッドを呼び出すときにエラーが発生すること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 30しますedit_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 に答える