当前位置: 首页 > 知识库问答 >
问题:

属性“parent”都不生成表单Symfony 2自引用映射

欧阳睿范
2023-03-14

我有一个包含自引用映射的实体。我想在系统中添加新的类别和子类别,但我不知道如何正确地构建add表单。在Entity中生成Gets和Setter。我得到一个错误:


    namespace XXX\ClassifiedsBundle\Entity;

    use Doctrine\ORM\Mapping as ORM;


    /**
     * @ORM\Entity(repositoryClass="XXX\ClassifiedsBundle\Repository\ClassifiedsCategoryRepository")
     * @ORM\Table(name="classifieds_categories")
     */
    class ClassifiedsCategory extends ClassifiedsAbstractTaxonomy {

        /**
         * @ORM\OneToMany(
         *      targetEntity = "Classifieds",
         *      mappedBy = "category"
         * )
         */
        protected $classifieds;

        /**
         * @ORM\ManyToMany(targetEntity="ClassifiedsCategory", mappedBy="parent")
         */
        private $children;

        /**
         *
         * @ORM\ManyToMany(targetEntity="ClassifiedsCategory", inversedBy="children")
         * @ORM\JoinTable(name="subCategory",
         *  joinColumns={@ORM\JoinColumn(name="category_id", referencedColumnName="id")},
         *  inverseJoinColumns={@ORM\JoinColumn(name="parent_id", referencedColumnName="id")}
         *     )
         */
        private $parent;

        /**
         * Constructor
         */
        public function __construct() {

            $this->children = new \Doctrine\Common\Collections\ArrayCollection();
            $this->parent = new \Doctrine\Common\Collections\ArrayCollection();
        }

        /**
         * Add classified
         *
         * @param \XXX\ClassifiedsBundle\Entity\Classifieds $classified
         *
         * @return ClassifiedsCategory
         */
        public function addClassified(\XXX\ClassifiedsBundle\Entity\Classifieds $classified) {
            $this->classifieds[] = $classified;

            return $this;
        }

        /**
         * Remove classified
         *
         * @param \XXX\ClassifiedsBundle\Entity\Classifieds $classified
         */
        public function removeClassified(\XXX\ClassifiedsBundle\Entity\Classifieds $classified) {
            $this->classifieds->removeElement($classified);
        }

        /**
         * Get classifieds
         *
         * @return \Doctrine\Common\Collections\Collection
         */
        public function getClassifieds() {
            return $this->classifieds;
        }

        /**
         * Add child
         *
         * @param \XXX\ClassifiedsBundle\Entity\ClassifiedsCategory $child
         *
         * @return ClassifiedsCategory
         */
        public function addChild(\XXX\ClassifiedsBundle\Entity\ClassifiedsCategory $child) {
            $this->children[] = $child;

            return $this;
        }

        /**
         * Remove child
         *
         * @param \XXX\ClassifiedsBundle\Entity\ClassifiedsCategory $child
         */
        public function removeChild(\XXX\ClassifiedsBundle\Entity\ClassifiedsCategory $child) {
            $this->children->removeElement($child);
        }

        /**
         * Get children
         *
         * @return \Doctrine\Common\Collections\Collection
         */
        public function getChildren() {
            return $this->children;
        }

        /**
         * Add parent
         *
         * @param \XXX\ClassifiedsBundle\Entity\ClassifiedsCategory $parent
         *
         * @return ClassifiedsCategory
         */
        public function addParent(\XXX\ClassifiedsBundle\Entity\ClassifiedsCategory $parent) {
            $this->parent[] = $parent;

            return $this;
        }

        /**
         * Remove parent
         *
         * @param \XXX\ClassifiedsBundle\Entity\ClassifiedsCategory $parent
         */
        public function removeParent(\XXX\ClassifiedsBundle\Entity\ClassifiedsCategory $parent) {
            $this->parent->removeElement($parent);
        }

        /**
         * Get parent
         *
         * @return \Doctrine\Common\Collections\Collection
         */
        public function getParent() {
            return $this->parent;
        }

    }
    
<pre>



 namespace XXX\ClassifiedsBundle\Entity;

    use Doctrine\ORM\Mapping as ORM;


    /**
     * @ORM\MappedSuperclass
     * @ORM\HasLifecycleCallbacks
     */
    abstract class ClassifiedsAbstractTaxonomy {

        /**
         * @ORM\Column(type="integer")
         * @ORM\Id
         * @ORM\GeneratedValue(strategy="AUTO")
         */
        private $id;

        /**
         * @ORM\Column(type="string", length=120, unique=true)
         */
        private $name;

        /**
         * @ORM\Column(type="string", length=120, unique=true)
         */
        private $slug;

        protected $classifieds;


        /**
         * Constructor
         */
        public function __construct()
        {
            $this->classifieds = new \Doctrine\Common\Collections\ArrayCollection();
    //        $this->children = new \Doctrine\Common\Collections\ArrayCollection();
    //        $this->parent = new \Doctrine\Common\Collections\ArrayCollection();
        }

        /**
         * Add classifieds
         *
         * @param \XXX\ClassifiedsBundle\Entity\Classifieds $classifieds
         * @return ClassifiedsCategory
         */
        public function addClassifieds(\XXX\ClassifiedsBundle\Entity\Classifieds $classifieds)
        {
            $this->classifieds[] = $classifieds;

            return $this;
        }

        /**
         * Remove classifieds
         *
         * @param \XXX\ClassifiedsBundle\Entity\Classifieds $classifieds
         */
        public function removeClassifieds(\XXX\ClassifiedsBundle\Entity\Classifieds $classifieds)
        {
            $this->classifieds->removeElement($classifieds);
        }

        /**
         * Get classifieds
         *
         * @return \Doctrine\Common\Collections\Collection 
         */
        public function getCompanies()
        {
            return $this->classifieds;
        }

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

        /**
         * Set name
         *
         * @param string $name
         * @return AbstractTaxonomy
         */
        public function setName($name)
        {
            $this->name = $name;

            return $this;
        }

        /**
         * Get name
         *
         * @return string 
         */
        public function getName()
        {
            return $this->name;
        }

        /**
         * Set slug
         *
         * @param string $slug
         * @return AbstractTaxonomy
         */
        public function setSlug($slug)
        {
            $this->slug = \XXX\ClassifiedsBundle\Libs\Utils::sluggify($slug);

            return $this;
        }

        /**
         * Get slug
         *
         * @return string 
         */
        public function getSlug()
        {
            return $this->slug;
        }

        /**
         * @ORM\PrePersist
         * @ORM\PreUpdate
         */
        public function preSave(){
            if(null === $this->slug){
                $this->setSlug($this->getName());
            }
        }
    }

    namespace XXX\AdminBundle\Form\Type;

    use XXX\AdminBundle\Form\Type\ClassifiedsTaxonomyType;
    use Symfony\Component\Form\FormBuilderInterface;
    use Symfony\Component\OptionsResolver\OptionsResolverInterface;

    class ClassifiedsCategoryType extends ClassifiedsTaxonomyType {

        public function getName() {
            return 'taxonomy';
        }

        public function buildForm(FormBuilderInterface $builder, array $options) {
            $builder
            ->add('name', 'text', array(
            'label' => 'Tytuł'
            ))
            ->add('slug', 'text', array(
            'label' => 'Alias'
            ))
            ->add('parent', 'entity', array(
            'class' => 'XXX\ClassifiedsBundle\Entity\ClassifiedsCategory',
            'property' => 'name',
            'empty_value' => 'Choose a parent category',
            'required' => false,
            ))

            ->add('save', 'submit', array(
                'label' => 'Zapisz'
            ));
        }

        public function setDefaultOptions(OptionsResolverInterface $resolver) {
            $resolver->setDefaults(array(
                'data_class' => 'XXX\ClassifiedsBundle\Entity\ClassifiedsCategory'
            ));
        }

    }

共有1个答案

东方和煦
2023-03-14

FormTypeClassifiedScategoryType需要ClassifiedScategory的实例,这需要属性Parent。但是当您处理从表单到控制器的请求时,formbuilder组件尝试通过实体上的set方法将输入的值设置为属性。您的实体类中缺少此set方法(setParent)。

所以你要这样实现它:

public function setParent($parent)
{
    $this->parent = $parent;

    return $this;
}
 类似资料:
  • 我有一个包含自引用映射的实体。我想添加新的类别和子类别到系统,但我不知道如何建立正确的添加表单。获取在实体中生成,设置器在实体中生成。我得到一个错误:

  • 我试图在Symfony2中创建一个表单,其中包含一个文本输入字段,该字段接受一个由6位数字组成的字符串,后跟一个破折号,后跟四位数字(例如123456-7890)。它确实可以工作,但我得到的HTML标记不一致,具体取决于我如何将字段添加到表单中。 这来自实体: 从表单定义中: 从树枝模板: 这就是浏览器源代码的样子——注意模式和maxlong属性: 我想使用我自己的标签,而不是默认的,所以我改变表

  • 返回指定对象的父对象。只读。 示例 本示例可实现的功能为:显示一个文档属性的父对象名。该过程需要有一个有效的DocumentProperty 对象作参数。 Sub DisplayParent(dp as DocumentProperty) MsgBox dp.Parent.Name End Sub

  • 基于文档:http://symfony.com/doc/2.8/form/dynamic_form_modific.html#form-events-submitted-data 我准备了动态生成表单。所有的工作都正常,但只有当我使用form添加新数据(/new)时,当我使用相同的form编辑现有数据时--不工作 “约会”的简单形式。它应该是这样工作的:用户选择客户机,然后第二个“选择”是填充正确

  • 问题内容: 如何使用in 将 属性设置为表单? 像这样: 我希望属性设置为 日历的 此字段 __ 问题答案: 您可以从树枝模板执行此操作:

  • 我正在尝试使用@ManyToOne和@OneToMany映射实体表。映射列位于名为“internal_plan_id”的子表中。根据要求,我不能更改名称。下面是两个实体表:父表 儿童桌: 我得到错误为:错误:关系“financial_plan_subplan”的列“internal_plan_id_internal_plan_id”不存在。 financial_subplan中用于映射的现有列名是