错误Gedmo树扩展:无法手动更改Root,而是更改父级

时间:2014-08-01 17:30:11

标签: symfony doctrine-orm tree

我尝试安装并使用带有Category实体的扩展Tree Gedmo,但是当我添加新类别时,我有这样的错误:

无法手动更改Root,而是更改父级

500内部服务器错误 - UnexpectedValueException。

我已按照此链接操作,并按指示执行了所有操作:https://github.com/Atlantic18/DoctrineExtensions/blob/master/doc/symfony2.md

我创建了 app / config / doctrine_extensions.yml src / Project / StoreBundle / Listener / DoctrineExtensionListener.php

应用/ conifg.yml

# Doctrine Configuration
doctrine:
dbal:
    driver:   "%database_driver%"
    host:     "%database_host%"
    port:     "%database_port%"
    dbname:   "%database_name%"
    user:     "%database_user%"
    password: "%database_password%"
    charset:  UTF8
    # if using pdo_sqlite as your database driver, add the path in parameters.yml
    # e.g. database_path: "%kernel.root_dir%/data/data.db3"
    # path:     "%database_path%"

orm:
    auto_generate_proxy_classes: "%kernel.debug%"
    auto_mapping: true
    mappings:
        translatable:
            type: annotation
            alias: Gedmo
            prefix: Gedmo\Translatable\Entity
            # make sure vendor library location is correct
            dir: "%kernel.root_dir%/../vendor/gedmo/doctrine-extensions/lib/Gedmo/Translatable/Entity"
        loggable:
            type: annotation
            alias: Gedmo
            prefix: Gedmo\Loggable\Entity
            dir: "%kernel.root_dir%/../vendor/gedmo/doctrine-extensions/lib/Gedmo/Loggable/Entity"
        tree:
            type: annotation
            alias: Gedmo
            prefix: Gedmo\Tree\Entity
            dir: "%kernel.root_dir%/../vendor/gedmo/doctrine-extensions/lib/Gedmo/Tree/Entity"

//..........
# Stof\DoctrineExtensionBundle configuration
stof_doctrine_extensions:
    orm:
        default:
            sluggable: true
            tree: true

实体/ Category.php

<?php

namespace Project\StoreBundle\Entity;

use Doctrine\ORM\Mapping as ORM;


use Gedmo\Mapping\Annotation as Gedmo; 
use Doctrine\Common\Collections\ArrayCollection;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
use Symfony\Component\Validator\Constraints as Assert;


/**
* Category
* @Gedmo\Tree(type="nested")
* @ORM\Table()
* @ORM\Entity(repositoryClass="Project\StoreBundle\Entity\CategoryRepository")
* @ORM\HasLifeCycleCallbacks()
*/
class Category
{
/**
 * @var integer
 *
 * @ORM\Column(name="id", type="integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 */
private $id;

/**
 * @var string
 *
 * @ORM\Column(name="name", type="string", length=255)
 *
 *@Assert\NotBlank(message="Please enter the name of category.")
 */
private $name;

/**
 * @Gedmo\slug(fields={"name"}, unique_base="uniqueBase")
 * @ORM\Column(name="slug",length=255, unique=false)
 */
private $slug ;

/**
 * @ORM\Column(name="uniqueBase", type="integer")
 */
private $uniqueBase ;

/**
 * @ORM\Column(name="description", type="text", nullable=true)
 */
private $description;

/**
 * @ORM\Column(name="metaDescription", type="string", length=255, nullable=true)
 *
 * @Assert\Length(
 *     max=255,
 *     maxMessage="message."
 *  )
 */
private $metaDescription;

/**
 * @ORM\Column(name="metaKeywords", type="string", length=255, nullable=true)
 *
 * @Assert\Length(
 *     max=255,
 *     maxMessage="message."
 *  )
 */
private $metaKeywords;


/**
 * @ORM\Column(name="enabled", type="boolean", nullable=false)
 */
private $enabled;


/**
 * @Gedmo\TreeLeft
 * @ORM\Column(name="lft", type="integer")
 */
private $lft;

/**
 * @Gedmo\TreeLevel
 * @ORM\Column(name="lvl", type="integer")
 */
private $lvl;

/**
 * @Gedmo\TreeRight
 * @ORM\Column(name="rgt", type="integer")
 */
private $rgt;

/**
 * @Gedmo\TreeRoot
 * @ORM\Column(name="root", type="integer", nullable=true)
 */
private $root;

/**
 * @Gedmo\TreeParent
 * @ORM\ManyToOne(targetEntity="Category", inversedBy="children")
 * @ORM\JoinColumn(name="parent_id", referencedColumnName="id", onDelete="CASCADE")
 */
private $parent;

/**
 * @ORM\OneToMany(targetEntity="Category", mappedBy="parent")
 * @ORM\OrderBy({"lft" = "ASC"})
 */
private $children;

/**
 * @ORM\ManyToOne(targetEntity="Project\StoreBundle\Entity\Store", inversedBy="categories", cascade={"persist"})
 * @ORM\JoinColumn(nullable=false)
 */
private $store ;


/**
 * Constructor
 */
public function __construct()
{
    $this->children = new ArrayCollection();
}


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

/**
 * Set name
 *
 * @param string $name
 * @return Category
 */
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 Category
 */
public function setSlug($slug)
{
    $this->slug = $slug;

    return $this;
}

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

/**
 * Set uniqueBase
 *
 * @param integer $uniqueBase
 * @return Category
 */
public function setUniqueBase($uniqueBase)
{
    $this->uniqueBase = $uniqueBase;

    return $this;
}

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

/**
 * Set description
 *
 * @param string $description
 * @return Category
 */
public function setDescription($description)
{
    $this->description = $description;

    return $this;
}

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

/**
 * Set metaDescription
 *
 * @param string $metaDescription
 * @return Category
 */
public function setMetaDescription($metaDescription)
{
    $this->metaDescription = $metaDescription;

    return $this;
}

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

/**
 * Set metaKeywords
 *
 * @param string $metaKeywords
 * @return Category
 */
public function setMetaKeywords($metaKeywords)
{
    $this->metaKeywords = $metaKeywords;

    return $this;
}

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

/**
 * Set enabled
 *
 * @param boolean $enabled
 * @return Category
 */
public function setEnabled($enabled)
{
    $this->enabled = $enabled;

    return $this;
}

/**
 * Get enabled
 *
 * @return boolean 
 */
public function getEnabled()
{
    return $this->enabled;
}

/**
 * Set parent
 *
 * @param \Project\StoreBundle\Entity\Category $parent
 * @return Category
 */
public function setParent(\Project\StoreBundle\Entity\Category $parent = null)
{
    $this->parent = $parent;

    return $this;
}

/**
 * Get parent
 *
 * @return \Project\StoreBundle\Entity\Category 
 */
public function getParent()
{
    return $this->parent;
}

/**
 * Set lft
 *
 * @param integer $lft
 * @return Category
 */
public function setLft($lft)
{
    $this->lft = $lft;

    return $this;
}

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

/**
 * Set lvl
 *
 * @param integer $lvl
 * @return Category
 */
public function setLvl($lvl)
{
    $this->lvl = $lvl;

    return $this;
}

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

/**
 * Set rgt
 *
 * @param integer $rgt
 * @return Category
 */
public function setRgt($rgt)
{
    $this->rgt = $rgt;

    return $this;
}

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

/**
 * Set root
 *
 * @param integer $root
 * @return Category
 */
public function setRoot($root)
{
    $this->root = $root;

    return $this;
}

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

/**
 * Add children
 *
 * @param \Project\StoreBundle\Entity\Category $children
 * @return Category
 */
public function addChild(\Project\StoreBundle\Entity\Category $children)
{
    $this->children[] = $children;

    return $this;
}

/**
 * Remove children
 *
 * @param \Project\StoreBundle\Entity\Category $children
 */
public function removeChild(\Project\StoreBundle\Entity\Category $children)
{
    $this->children->removeElement($children);
}

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


/**
 * Set store
 *
 * @param \Project\StoreBundle\Entity\Store $store
 * @return Category
 */
public function setStore(\Project\StoreBundle\Entity\Store $store = null)
{
    $this->store = $store;

    return $this;
}

/**
 * Get store
 *
 * @return \Project\StoreBundle\Entity\Store 
 */
public function getStore()
{
    return $this->store;
}

}

1 个答案:

答案 0 :(得分:1)

doctrine/orm升级到版本2.4.2(参见https://github.com/Atlantic18/DoctrineExtensions/issues/1026