[英]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.