繁体   English   中英

将Sonata分类束中的标签字段添加到您的(自定义)实体

[英]Adding tag field from Sonata ClassificationBundle to your (custom) entity

我正在尝试从Sonata项目中选择ClassificationBundle,以便将标记字段添加到我的实体类型“ Project”中。

但是,我非常缺乏有关如何实际执行此操作的文档。 SonataNewsBundle中似乎只有一个集成示例(因为这是该捆绑包旨在的原始项目)。

根据该新闻包,我确定了我必须做的一些事情,例如:

1)将字段添加到我的AppBundle \\ Entity \\ Project类中:

private $tags;

/**
 * Add tags
 *
 * @param \Sonata\ClassificationBundle\Model\TagInterface $tags
 */
public function addTags(TagInterface $tags)
{
    $this->tags[] = $tags;
}

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

/**
 * @param $tags
 *
 * @return mixed
 */
public function setTags($tags)
{
    $this->tags = $tags;
}

2)将表单字段添加到我的AppBundle \\ Admin \\ ProjectAdmin类中:

   protected function configureFormFields(FormMapper $formMapper) {
     ..

     ->add('tags', 'sonata_type_model_autocomplete', array(
          'property' => 'name',
          'multiple' => 'true'
        ))

但是如果我随后浏览到管理表单(/ admin / project / create)

当前字段tags未链接到管理员。 请为目标实体创建一个:

在我的AppBundle / Resources / config / admin.yml中,我有这个:

services:
  sonata.admin.Project:
    class: AppBundle\Admin\ProjectAdmin
    tags:
        - { name: sonata.admin, manager_type: orm, group: "Content", label: "Project" }
    arguments:
        - ~
        - AppBundle\Entity\Project
        - ~
    calls:
        - [ setTranslationDomain, [AppBundle]]

当我使用“实体”作为字段类型并引用生成的Tag实体时,它可以工作

->add('tags', 'entity', array(
        'property' => 'name',
        'multiple' => 'true',
        'class' => 'Application\Sonata\ClassificationBundle\Entity\Tag',
      ))

任何帮助,将不胜感激。

我想我不得不说Sonata在该领域使用了CategoryBundle,但是正如所说的那样,似乎缺少文档,这对于Sonata项目来说并不罕见。

这样声明您的服务:

services:
sonata.admin.Project:
  class: AppBundle\Admin\ProjectAdmin
  tags:
       - { name: sonata.admin, manager_type: orm, group: "Content", label: "Project" }
  arguments:  [~, AppBundle\Entity\Project, AppBundle:ProjectAdmin]
  calls:
      - [ setTranslationDomain, [AppBundle]]

您缺少标签联接表定义。 在Sonata新闻包中,它位于DependencyInjection/SonataNewsExtension.php 但是您可以将其作为注释添加到您的实体中,例如:

/**
     * @ORM\ManyToMany(targetEntity="Application\Sonata\ClassificationBundle\Entity\Tag", cascade={"persist"})
     * @ORM\JoinTable(
     *      name="Project_tag",
     *      joinColumns={@ORM\JoinColumn(name="project_id", referencedColumnName="id")},
     *      inverseJoinColumns={@ORM\JoinColumn(name="tag_id", referencedColumnName="id")}
     * )
     */
    protected $tags;

然后运行app/console doctrine:schema:update --force

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM