如何将任何自定义类链接到媒体实体?

时间:2017-02-15 17:04:24

标签: symfony sonata-admin sonata-media-bundle

首先,我希望这个问题是一个相关问题,但如果不是,那么显然我的错是愚蠢/不够彻底搜索。

我在一个看似愚蠢的问题上被困了两天:我只想将一张或多张照片添加到我的自定义类中

现在简单的部分如下(据我所知):

  • 将一个映射字段添加到相关类(我的自定义实体,People)
  • 将相应的映射字段添加到Media类(来自Application Bundle的Media Entity,通过EasyExtend)
  • 通过d:s:u --force和d:g:两个包的实体
  • 删除Application bundle的config / doctrine目录,因为它阻止注释工作(在另一个线程中看到)。
  • 在AppBundle的AdminPeople.php中添加一个相应的字段来添加实体,这取决于关系的性质,这显然可以改变(我基本上使用了sonata_type_model)

现在就是这样:我想保存相关的"人员ID"在media__media表的相应列中

我无法找到一种方法来让人们成为"在相应的media__media表中注册。事物保持无效。

我检查过的内容:

  • 清除缓存
  • 尝试各种可能的字段关系映射
  • 尝试使用常规AppBundle中其他AdminSomething文件的常规setter / getter
  • 在此站点上搜索每个可能的答案,包括从Application Bundle中删除config / doctrine目录,将config.yml自动映射更改为false,尝试对数据库进行各种更新(但不是完整的大修)。
  • 不拉我的头发

我怀疑:不知怎的,我需要覆盖媒体的Admin类,以使字段“#34;听得见”#34;上课。我不知道怎么做,尽管我付出了最大的努力,但我在这个网站上找到的例子并没有帮助。

我能做什么:

  • 我可以在自己的管理部分添加媒体
  • 我可以在外国管理部分添加媒体,但他们不会保留相关实体的ID。换句话说,它们确实出现在媒体列表中,但不出现在外部管理字段列表中。
  • 对于其他管理问题的常规外键,您所要做的就是让prePersist / preUpdate使用getter / setter添加它,而我现在似乎无法复制该行为。

现在你们不喜欢没有代码的问题,这是我的(带有我的composer.json的摘录,以防万一。)

composer.json(相关部分)

    "sonata-project/admin-bundle": "^3.13",
    "sonata-project/doctrine-orm-admin-bundle": "^3.1",
    "sonata-project/user-bundle": "^3.2",
    "sonata-project/easy-extends-bundle": "^2.1",
    "sonata-project/classification-bundle": "^3.2",
    "sonata-project/media-bundle": "^3.3",
    "sonata-project/formatter-bundle": "3.*",
    "sonata-project/intl-bundle": "^2.3",
    "symfony/property-access": "^3.2",
    "sonata-project/dashboard-bundle": "^0.1.0"

Media.php生活在Application Bundle中。 ORM风格。适当地注释我的知识。相关位:

    /**
 * One Media has one people
 * @ORM\OneToOne(targetEntity="AppBundle\Entity\People", inversedBy="image")
 * @ORM\JoinColumn(name="people_id", referencedColumnName="id")
 *
 */
private $people;

People.php,再次相关部分(根据我的知识获取和吸引人)

    /**
 * One people has one image
 * @ORM\OneToOne(targetEntity="Application\Sonata\MediaBundle\Entity\Media", mappedBy="people", cascade={"persist"})
 */
private $image;

PeopleAdmin.php中的字段效果很好,除非它不保留相关人员的ID

                ->add('image','sonata_type_model', array(
                'required'=>false,
                'by_reference'=>false,
            ))


    public function prePersist($object)
{
    foreach ($object->getImage() as $item) {
        $item->setPeople($object);
    }
}


public function preUpdate($object)
{
    foreach ($object->getImage() as $item) {
        $item->setPeople($object);
    }

}

现在,当我这样做时,媒体部分的工作。东西是创造的,是美丽的(可能)。除了它不会持久存在与创建它的实体相关的任何内容。

奇怪(或者不是?我不熟悉这个调试工具),我在完成后得到了这个结果(或者我相信)。

Capture of the debugging screen of this form

非常感谢,人们(呃)。

0 个答案:

没有答案