6

最近几天我一直在努力让 SonataMedia 与 Symfony 2.0.16 一起工作……但没有成功。谷歌搜索似乎没有多少人使用该捆绑包,或者有一个我不知道的教程或操作方法,因为我没有得到太多关于我到目前为止得到的错误消息的信息。

无论如何,我最后一次尝试给出了下一条错误消息:

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

“路径”是用于保存文件图像(相对)路径的字段。

附件Admin.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;
    }
}

服务.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

您正在尝试在同一实体类附件”的“路径”字段上应用“ sonata_type_collection ” ,而“ sonata_type_collection ”用于收集不同类的嵌入形式。因此,您将不得不再添加一个实体类,假设为“ AttachmentCollection ”,并且在这个特定的 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',
                    ));
     }
  }

并且不要忘记在“ AttachmentsCollection ”和“ Attachments ”之间进行“一对多”或“多对多”映射,假设一个“ AttachmentsCollection ”有很多“ Attachments ”对象。

于 2014-07-18T07:56:24.220 回答
0

看起来您需要做的是将参数admin_code中的管理部分 ( mercury.cargo_recognition.admin.attachment)的名称传递给方法。$fieldDescriptionOptionsadd()

于 2013-10-16T00:44:44.437 回答
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

五年后,值得注意的是,“目标实体”本身在错误文本中似乎是空白的。我们得到一组反引号,而不是实体名称。

(我正在开发一个旧应用程序,现在遇到了类似的错误。我为我的实体生成了一个管理类并将其注册在正确的位置,看起来该应用程序无法确定我的目标实体什么- - 默认情况下它会阻止它找到相关的管理类。我有点把头发扯下来了,明天可能会在它上面放一个赏金。)

于 2018-02-13T16:00:58.090 回答
0

如果您的 GalleryHasMedia 管理类尚未创建并且您尚未将服务代码放入 config.yml 文件中,请先执行此操作并重试。我有同样的问题并以这种方式解决。

于 2018-01-31T10:34:38.073 回答