Symfony 3.4 尝试调用名为类"AppBundleEntityUser"的"createQueryBuilder"的未定义方法



我用symfony生成了实体和表单,并试图创建一个简单的表单。但我遇到了一个无法解决的错误。

尝试调用类"AppBundle\Entity\User"的名为"createQueryBuilder"的未定义方法。

控制器:

public function groupedit(Request $request) {
$group = new Group();
$form = $this->createForm(GroupType::class, $group);
$form->handleRequest($request);
return $this->render(
'form.html.twig', array('form', $form->createView())
);
}

用户YML

AppBundleEntityUser:
type: entity
repositoryClass: User
id:
id:
type: integer
generator:
strategy: AUTO
fields:
xxx
manyToMany:
mailForwarder:
targetEntity: AppBundleEntityMailForwarder
inversedBy: user
joinTable:
name: MailForwarderHasUser
joinColumns:
user_id:
referencedColumnName: id
nullable: false
inverseJoinColumns:
mail_forwarder_id:
referencedColumnName: id
nullable: false
group:
targetEntity: AppBundleEntityGroup
mappedBy: user

YML 集团

AppBundleEntityGroup:
type: entity
repositoryClass: AppBundleEntityGroup
id:
id:
type: integer
generator:
strategy: AUTO
fields:
xx
oneToMany:
sharedMailbox:
targetEntity: AppBundleEntitySharedMailbox
mappedBy: group
manyToMany:
user:
targetEntity: AppBundleEntityUser
inversedBy: group
joinTable:
name: UserHasGroup
joinColumns:
group_id:
referencedColumnName: id
nullable: false
inverseJoinColumns:
user_id:
referencedColumnName: id
nullable: false

用户实体

class User implements UserInterface, Serializable
{
/**
* @var DoctrineCommonCollectionsCollection
*/
private $mailForwarder;
/**
* @var DoctrineCommonCollectionsCollection
*/
private $group;
xxx
/**
* Add mailForwarder
*
* @param AppBundleEntityMailForwarder $mailForwarder
*
* @return User
*/
public function addMailForwarder(AppBundleEntityMailForwarder $mailForwarder)
{
$this->mailForwarder[] = $mailForwarder;
return $this;
}
/**
* Remove mailForwarder
*
* @param AppBundleEntityMailForwarder $mailForwarder
*/
public function removeMailForwarder(AppBundleEntityMailForwarder $mailForwarder)
{
$this->mailForwarder->removeElement($mailForwarder);
}
/**
* Get mailForwarder
*
* @return DoctrineCommonCollectionsCollection
*/
public function getMailForwarder()
{
return $this->mailForwarder;
}
/**
* Add group
*
* @param AppBundleEntityGroup $group
*
* @return User
*/
public function addGroup(AppBundleEntityGroup $group)
{
$this->group[] = $group;
return $this;
}
/**
* Remove group
*
* @param AppBundleEntityGroup $group
*/
public function removeGroup(AppBundleEntityGroup $group)
{
$this->group->removeElement($group);
}
/**
* Get group
*
* @return DoctrineCommonCollectionsCollection
*/
public function getGroup()
{
return $this->group;
}
}

集团实体

class Group
{
XXX
/**
* @var DoctrineCommonCollectionsCollection
*/
private $sharedMailbox;
/**
* @var DoctrineCommonCollectionsCollection
*/
private $user;
XXX
/**
* Add sharedMailbox
*
* @param AppBundleEntitySharedMailbox $sharedMailbox
*
* @return Group
*/
public function addSharedMailbox(AppBundleEntitySharedMailbox $sharedMailbox)
{
$this->sharedMailbox[] = $sharedMailbox;
return $this;
}
/**
* Remove sharedMailbox
*
* @param AppBundleEntitySharedMailbox $sharedMailbox
*/
public function removeSharedMailbox(AppBundleEntitySharedMailbox $sharedMailbox)
{
$this->sharedMailbox->removeElement($sharedMailbox);
}
/**
* Get sharedMailbox
*
* @return DoctrineCommonCollectionsCollection
*/
public function getSharedMailbox()
{
return $this->sharedMailbox;
}
/**
* Add user
*
* @param AppBundleEntityUser $user
*
* @return Group
*/
public function addUser(AppBundleEntityUser $user)
{
$this->user[] = $user;
return $this;
}
/**
* Remove user
*
* @param AppBundleEntityUser $user
*/
public function removeUser(AppBundleEntityUser $user)
{
$this->user->removeElement($user);
}
/**
* Get user
*
* @return DoctrineCommonCollectionsCollection
*/
public function getUser()
{
return $this->user;
}
}

分组表单类型

<?php
namespace AppBundleForm;
use SymfonyComponentFormAbstractType;
use SymfonyComponentFormFormBuilderInterface;
use SymfonyComponentOptionsResolverOptionsResolver;
class GroupType extends AbstractType
{
/**
* {@inheritdoc}
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('name')->add('systemgroup')->add('user');
}/**
* {@inheritdoc}
*/
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'AppBundleEntityGroup'
));
}
/**
* {@inheritdoc}
*/
public function getBlockPrefix()
{
return 'appbundle_group';
}

}

有人知道问题出在哪里吗?

致问候,

Alex

问题似乎出现在您声明的实体映射中

repositoryClass: User

而您应该传递一个有效的Doctrine存储库类,而不是实体类。

因此,如果不需要自定义存储库函数,可以从映射中删除repositoryClass,或者创建一个有效的类,如下所示:

namespace AppBundleRepository;
use DoctrineORMEntityRepository;
class UserRepository extends EntityRepository
{
// your custom repository functions here
}

然后正确映射

repositoryClass: AppBundleRepositoryUserRepository

相关内容

最新更新