簡體   English   中英

嘗試擴展SonataMediaBundle時出錯“無法在空變量上調用方法(”id“)”

[英]Error trying to extend SonataMediaBundle “Impossible to invoke a method (”id“) on a null variable”

我正在嘗試擴展SonataMediaBundle的媒體類。 我想生成自己的媒體來添加更多的關系和屬性。

但現在我遇到了這個錯誤:

無法在SonataDoctrineORMAdminBundle中的null變量上調用方法(“id”):Form:form_admin_fields.html.twig at 59。

我的服務聲明是:

services:
    gallery.admin.image:
        class: GalleryBundle\Admin\ImageAdmin
        arguments: [~, GalleryBundle\Entity\Image, SonataMediaBundle:MediaAdmin, @sonata.media.pool, @sonata.classification.manager.category]
        tags:
            - { name: sonata.admin, manager_type: orm, group: sonata_media, label_catalogue: SonataMediaBundle, label: Gallery}
        calls:
            - [ setModelManager, [@sonata.media.admin.media.manager]]
            - [ setTranslationDomain, [SonataMediaBundle]]
            - [ setTemplates, [[inner_list_row: SonataMediaBundle:MediaAdmin:inner_row_media.html.twig, outer_list_rows_mosaic: SonataMediaBundle:MediaAdmin:list_outer_rows_mosaic.html.twig, base_list_field: SonataAdminBundle:CRUD:base_list_flat_field.html.twig, list: SonataMediaBundle:MediaAdmin:list.html.twig, edit: SonataMediaBundle:MediaAdmin:edit.html.twig]]]

我的管理課是:

use Sonata\AdminBundle\Datagrid\DatagridMapper;
use Sonata\AdminBundle\Form\FormMapper;
use Sonata\ClassificationBundle\Model\CategoryManagerInterface;
use Sonata\MediaBundle\Admin\BaseMediaAdmin;
use Sonata\MediaBundle\Admin\ORM\MediaAdmin;
use Sonata\MediaBundle\Provider\Pool;

class ImageAdmin extends BaseMediaAdmin
{
    public function __construct($code, $class, $baseControllerName, Pool $pool, CategoryManagerInterface $categoryManager)
    {
        parent::__construct($code, $class, $baseControllerName, $pool, $categoryManager);
    }

    protected function configureFormFields(FormMapper $formMapper)
    {
        $formMapper
            ->with('Basic')
            ->add('tags', 'sonata_type_model', [
                'multiple' => true,
            ])
            ->end()
        ;
        parent::configureFormFields($formMapper);
    }
}

而我的實體是:

use BlogBundle\Entity\PostTag;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
use Sonata\MediaBundle\Model\Media;

/**
 * Image
 *
 * @ORM\Table(name="image")
 * @ORM\Entity(repositoryClass="GalleryBundle\Repository\ImageRepository")
 */
class Image extends Media
{
    /**
     * @var int
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @ORM\ManyToMany(targetEntity="BlogBundle\Entity\PostTag", inversedBy="gallery_images")
     */
    protected $tags;

    public function __construct()
    {
        $this->tags = new ArrayCollection();
    }

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

    /**
     * Add tag.
     *
     * @param PostTag $tag
     *
     * @return Image
     */
    public function addTag(PostTag $tag)
    {
        $this->tags[] = $tag;

        return $this;
    }

    /**
     * Remove tag.
     *
     * @param PostTag $tag
     */
    public function removeTag(PostTag $tag)
    {
        $this->tags->removeElement($tag);
    }

    /**
     * Get tags.
     *
     * @return Collection
     */
    public function getTags()
    {
        return $this->tags;
    }
}

我知道問題將在下一個版本中修復。 但是使用我們當前的服務器,我們無法升級。 該項目已經投入生產,我無法承擔重拍的費用。

我已經看到問題是因為我在admin的定義中會有多個sonata_type_model 但無論我多少刪除與PostTags的關系,錯誤仍然存​​在。

我不知道服務定義是錯誤還是我忘記了事件調用或其他什么。

我將不勝感激任何幫助。 謝謝

我的建議是:

在創建構建器時,請使用“empty_on_new”=> false。

empty_on_new(默認為true):如果未提供二進制內容,則相關數據轉換器將返回null而不是空媒體實例

https://sonata-project.org/bundles/media/3-x/doc/reference/form.html

而且你與PostTags有很多關系。

為什么不在ImageAdmin中使用'sonata_type_collection'而不是'sonata_type_model'?

https://sonata-project.org/bundles/admin/master/doc/reference/form_types.html#sonata-corebundle-form-type-collectiontype

我希望它會對你有所幫助。

祝好運 !

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM