我收到错误:
Type error: Argument 2 passed to AppBundleRepositoryCategoryRepository::__construct()
must be an instance of AppBundleRepositoryClassMetadata,
instance of DoctrineORMMappingClassMetadata given,
called in C:_DEV_SF3_fs3_treevendordoctrineormlibDoctrineORMRepositoryDefaultRepositoryFactory.php on line 68
500 Internal Server Error - FatalThrowableError
我正在使用:
Symfony v3.0.6;
Doctrine v2.5.4
StofDoctrineExtensionsBundle
以便管理树状结构。
为了使用特性配置树存储库,我按照文档中的做法进行了配置。我得到了问题开头显示的错误。注意,如果我像文档中所说的那样通过扩展抽象存储库来配置树存储库,我会有不同的错误
如何向参数二提供"AppBundle\Repository\ClassMetadata的实例"?
我的树存储库
// AppBundleRepositoryCategoryRepository.php
<?php
namespace AppBundleRepository;
use GedmoTreeTraitsRepositoryORMNestedTreeRepositoryTrait;
use DoctrineORMEntityRepository;
use DoctrineORMEntityManager;
class CategoryRepository extends EntityRepository
{
use NestedTreeRepositoryTrait;
public function __construct(EntityManager $em, ClassMetadata $class)
{
parent::__construct($em, $class);
$this->initializeTreeRepository($em, $class);
}
}
我的类别实体
// AppBundleEntityCategory.php
<?php
namespace AppBundleEntity;
use GedmoMappingAnnotation as Gedmo;
use DoctrineORMMapping as ORM;
use SymfonyComponentValidatorConstraints as Assert;
/**
* @GedmoTree(type="nested")
* @ORMTable(name="categories")
* use repository for handy tree functions
* @ORMEntity(repositoryClass="AppBundleRepositoryCategoryRepository")
*/
class Category
{
/**
* @ORMColumn(type="integer")
* @ORMId
* @ORMGeneratedValue
*/
private $id;
/**
* @ORMColumn(length=64)
*/
private $title;
/**
* @GedmoTreeLeft
* @ORMColumn(type="integer")
*/
private $lft;
/**
* @GedmoTreeLevel
* @ORMColumn(type="integer")
*/
private $lvl;
/**
* @GedmoTreeRight
* @ORMColumn(type="integer")
*/
private $rgt;
/**
* @GedmoTreeRoot
* @ORMManyToOne(targetEntity="Category")
* @ORMJoinColumn(referencedColumnName="id", onDelete="CASCADE")
*/
private $root;
/**
* @GedmoTreeParent
* @ORMManyToOne(targetEntity="Category", inversedBy="children")
* @ORMJoinColumn(referencedColumnName="id", onDelete="CASCADE")
*/
private $parent;
/**
* @ORMOneToMany(targetEntity="Category", mappedBy="parent")
* @ORMOrderBy({"lft" = "ASC"})
*/
private $children;
public function getId()
{
return $this->id;
}
public function setTitle($title)
{
$this->title = $title;
}
public function getTitle()
{
return $this->title;
}
public function getRoot()
{
return $this->root;
}
public function setParent(Category $parent = null)
{
$this->parent = $parent;
}
public function getParent()
{
return $this->parent;
}
/**
* Constructor
*/
public function __construct()
{
$this->children = new DoctrineCommonCollectionsArrayCollection();
}
/**
* 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 AppBundleEntityCategory $root
*
* @return Category
*/
public function setRoot(AppBundleEntityCategory $root = null)
{
$this->root = $root;
return $this;
}
/**
* Add child
*
* @param AppBundleEntityCategory $child
*
* @return Category
*/
public function addChild(AppBundleEntityCategory $child)
{
$this->children[] = $child;
return $this;
}
/**
* Remove child
*
* @param AppBundleEntityCategory $child
*/
public function removeChild(AppBundleEntityCategory $child)
{
$this->children->removeElement($child);
}
/**
* Get children
*
* @return DoctrineCommonCollectionsCollection
*/
public function getChildren()
{
return $this->children;
}
}
请告知。感谢您的时间和知识。
似乎您错过了导入类的命名空间
因此将此语句添加到类CategoryRepository
:的use
列表中
use DoctrineORMMappingClassMetadata;
所以试试这个:
AppBundle\Repository\CategoryRepository.php
namespace AppBundleRepository;
use GedmoTreeTraitsRepositoryORMNestedTreeRepositoryTrait;
use DoctrineORMEntityRepository;
use DoctrineORMEntityManager;
use DoctrineORMMappingClassMetadata; // <-- ADD THIS
class CategoryRepository extends EntityRepository
{
use NestedTreeRepositoryTrait;
public function __construct(EntityManager $em, ClassMetadata $class)
{
parent::__construct($em, $class);
$this->initializeTreeRepository($em, $class);
}