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

属性“父”都不生成Symfony 2自引用映射

赵钊
2023-03-14

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


    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;
}
 类似资料:
  • 我有一个包含自引用映射的实体。我想在系统中添加新的类别和子类别,但我不知道如何正确地构建add表单。在Entity中生成Gets和Setter。我得到一个错误:

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

  • 我正在尝试获取自定义属性(https://laravel.com/docs/5.5/eloquent-mutators#defining-访问器)从查询中删除。 现在我有: 你ser.php 用户控制器。php 返回 所以问题是:有没有办法也获得view\u url属性?(我用()在内部进行了尝试,但失败了) 我还可以只返回角色名,而不是像您在“return”代码中看到的那样返回整个对象吗?(我想

  • 正如标题所述,我正在尝试将自定义属性添加到我返回的序列化对象中。 让我们用以下方法来介绍一个用户: getFirstname、setFirstname 现在在序列化中,我想添加一个属性fullName: Firstname Lastname。 我的实体中有一个getter方法,如下所示: 我的序列化文件如下所示: 我试过了 和其他变体,但我似乎不能得到它的权利。 注意:是的,我已清除缓存并重试 有

  • 在我的项目中有2个资源属性 1.application.properties 2. 应用开发.性能 此类使用开发的值属性 我使用 application-development.properties 作为我的项目资源 因此,我使用以下命令运行该项目: < code > mvn spring-boot:run-D spring . profiles . active = development 但是