6

ここ数日、SonataMedia を Symfony 2.0.16 で動作させようと試みてきましたが、うまくいきませんでした。グーグルで検索しても、そのバンドルを使用している人はあまりいないか、私が知らないチュートリアルやハウツーがあるようです。これまでに得たエラー メッセージに関する情報があまり得られないからです。

とにかく、私の最後の試みは次のエラーメッセージを出しました:

The current field `path` is not linked to an admin. Please create one for the target entity : `` 

「パス」は、ファイル イメージ (相対) パスを保存するために使用されるフィールドです。

AttachmentAdmin.php

<?php

class AttachmentAdmin extends Admin
{
    protected function configureFormFields(FormMapper $formMapper)
    {
        $formMapper
            ->add(
                'path',
                'sonata_type_collection',
                array(
                    'required' => true
                ),
                array(
                    'edit' => 'inline',
                    'inline' => 'table',
                    'sortable' => 'position',
                    'targetEntity' => 'Application\Sonata\MediaBundle\Entity\GalleryHasMedia',
                    'link_parameters' => array(
                        'context' => 'attachment'
                    )
                )
            )
            ->add('notes', 'textarea', array('required' => false))
        ;
    }

    // other methods
}

添付ファイル.php

<?php

class Attachment
{
    // other properties

    /**
     * @var string $path
     *
     * @ORM\Column(name="path", type="string", nullable=false)
     * @ORM\ManyToOne(targetEntity="Application\Sonata\MediaBundle\Entity\GalleryHasMedia", cascade={"persist"})
     */
    protected $path;

    // other methods

    /**
     * Set path
     *
     * @param string $path
     */
    public function setPath($path)
    {
        $this->path = $path;

        foreach ($path as $ent) {
            $ent->setAttachment($this);
        }
    }

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

    /**
     *
     * @param \Application\Sonata\MediaBundle\Entity\GalleryHasMedia $path
     */
    public function addPath(\Application\Sonata\MediaBundle\Entity\GalleryHasMedia $path)
    {
        $this->path[] = $path;
    }
}

GalleryHasMedia.php

<?php

class GalleryHasMedia extends BaseGalleryHasMedia
{

    /**
     * @var integer $id
     */
    protected $id;

    /**
     *
     * @var File
     */
    private $attachment;

    /**
     * Get id
     *
     * @return integer $id
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     *
     * @param \Mercury\CargoRecognitionBundle\Entity\Attachment $attachment
     * @return \Application\Sonata\MediaBundle\Entity\GalleryHasMedia
     */
    public function setAttachment(\Mercury\CargoRecognitionBundle\Entity\Attachment $attachment = null)
    {
        $this->attachment = $attachment;

        return $this;
    }

    /**
     *
     * @return \Application\Sonata\MediaBundle\Entity\File
     */
    public function getAttachment()
    {
        return $this->attachment;
    }
}

services.yml

    mercury.cargo_recognition.admin.attachment:
        class: Mercury\CargoRecognitionBundle\Admin\AttachmentAdmin
        tags:
            - { name: sonata.admin, manager_type: orm, group: General, label: Attachments }
        arguments: [ null, Mercury\CargoRecognitionBundle\Entity\Attachment, "MercuryCargoRecognitionBundle:AttachmentAdmin" ]

情報をありがとう!

4

7 に答える 7

4

ただの大げさな推測ですが、GalleryHasMediaエンティティの管理クラスを作成します。

于 2012-08-18T23:40:19.503 に答える
3

このように admin_code を追加する必要があります

$formMapper
        ->add(
            'path',
            'sonata_type_collection',
            array(
                'required' => true
            ),
            array(
                'edit' => 'inline',
                'inline' => 'table',
                'sortable' => 'position',
                'targetEntity' => 'Application\Sonata\MediaBundle\Entity\GalleryHasMedia',
                'link_parameters' => array(
                    'context' => 'attachment'
                ),
                'admin_code' => 'sonata.media.admin.gallery_has_media' // this will be your admin class service name
            )
        )
        ->add('notes', 'textarea', array('required' => false))
    ;
于 2014-07-18T06:43:36.550 に答える
1

同じエンティティ クラス' attachment ' のフィールド ' path 'に ' sonata_type_collection 'を適用しようとしていますが、' sonata_type_collection ' は異なるクラスの埋め込みフォームのコレクション用です。したがって、「 AttachmentCollection 」を想定したエンティティ クラスをもう 1 つ作成する必要があり、この特定の AttachmentsCollection の管理クラスには、「 Attachment 」クラス adminを埋め込む必要があります。例:

class AttachmentsCollection extends Admin
{
protected function configureFormFields(FormMapper $formMapper)
    {
        $formMapper
   ->add('attachments', 'sonata_type_collection', array(
                        'required' => false,
                        'type_options' => array('delete' => true)
                    ), array(
                        'edit' => 'inline',
                        'inline' => 'table',
                        'sortable' => 'position',
                    ));
     }
  }

また、1 つの「 AttachmentsCollection」に多くの「Attachments」オブジェクトがあると仮定して、「 AttachmentsCollection」と「Attachments 」の間で「1 対多」または「多対多」のマッピングを行うことも忘れないでください。

于 2014-07-18T07:56:24.220 に答える
0

この問題は古くからありますが、これに遭遇する可能性のある他の人を助けるために、これを解決する方法について何かを追加します. 根本的な問題は、 $path targetEntity("Application\Sonata\MediaBundle\Entity\GalleryHasMedia") に管理者クラスがないことです。

これを解決するには、targetEntity の管理クラスを追加します。

class GalleryHasMediaAdmin extends Admin
{
    protected function configureFormFields(FormMapper $formMapper)
    {
        $formMapper
            ->add('attachment', 'file')
        ;
    }

    // other methods
}

次に、その管理クラスを services.yml に追加します

mercury.cargo_recognition.admin.galleryhadmedia:
    class: Mercury\CargoRecognitionBundle\Admin\GalleryHasMediaAdmin
    tags:
        - { name: sonata.admin, manager_type: orm, group: General, label: 'Gallery Has Media' }
    arguments: [ null, Mercury\CargoRecognitionBundle\Entity\GalleryHasMedia, "MercuryCargoRecognitionBundle:GalleryHasMediaAdmin" ]
于 2015-11-30T11:05:01.620 に答える
0

あなたがする必要があるのは、パラメータadmin_codeの管理セクションの名前(mercury.cargo_recognition.admin.attachment)をメソッドに渡すことです。$fieldDescriptionOptionsadd()

于 2013-10-16T00:44:44.437 に答える