我用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
AppBundle\Entity\User:
type: entity
repositoryClass: User
id:
id:
type: integer
generator:
strategy: AUTO
fields:
xxx
manyToMany:
mailForwarder:
targetEntity: AppBundle\Entity\MailForwarder
inversedBy: user
joinTable:
name: MailForwarderHasUser
joinColumns:
user_id:
referencedColumnName: id
nullable: false
inverseJoinColumns:
mail_forwarder_id:
referencedColumnName: id
nullable: false
group:
targetEntity: AppBundle\Entity\Group
mappedBy: user
YML组
AppBundle\Entity\Group:
type: entity
repositoryClass: AppBundle\Entity\Group
id:
id:
type: integer
generator:
strategy: AUTO
fields:
xx
oneToMany:
sharedMailbox:
targetEntity: AppBundle\Entity\SharedMailbox
mappedBy: group
manyToMany:
user:
targetEntity: AppBundle\Entity\User
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 \Doctrine\Common\Collections\Collection
*/
private $mailForwarder;
/**
* @var \Doctrine\Common\Collections\Collection
*/
private $group;
xxx
/**
* Add mailForwarder
*
* @param \AppBundle\Entity\MailForwarder $mailForwarder
*
* @return User
*/
public function addMailForwarder(\AppBundle\Entity\MailForwarder $mailForwarder)
{
$this->mailForwarder[] = $mailForwarder;
return $this;
}
/**
* Remove mailForwarder
*
* @param \AppBundle\Entity\MailForwarder $mailForwarder
*/
public function removeMailForwarder(\AppBundle\Entity\MailForwarder $mailForwarder)
{
$this->mailForwarder->removeElement($mailForwarder);
}
/**
* Get mailForwarder
*
* @return \Doctrine\Common\Collections\Collection
*/
public function getMailForwarder()
{
return $this->mailForwarder;
}
/**
* Add group
*
* @param \AppBundle\Entity\Group $group
*
* @return User
*/
public function addGroup(\AppBundle\Entity\Group $group)
{
$this->group[] = $group;
return $this;
}
/**
* Remove group
*
* @param \AppBundle\Entity\Group $group
*/
public function removeGroup(\AppBundle\Entity\Group $group)
{
$this->group->removeElement($group);
}
/**
* Get group
*
* @return \Doctrine\Common\Collections\Collection
*/
public function getGroup()
{
return $this->group;
}
}
组实体
class Group
{
XXX
/**
* @var \Doctrine\Common\Collections\Collection
*/
private $sharedMailbox;
/**
* @var \Doctrine\Common\Collections\Collection
*/
private $user;
XXX
/**
* Add sharedMailbox
*
* @param \AppBundle\Entity\SharedMailbox $sharedMailbox
*
* @return Group
*/
public function addSharedMailbox(\AppBundle\Entity\SharedMailbox $sharedMailbox)
{
$this->sharedMailbox[] = $sharedMailbox;
return $this;
}
/**
* Remove sharedMailbox
*
* @param \AppBundle\Entity\SharedMailbox $sharedMailbox
*/
public function removeSharedMailbox(\AppBundle\Entity\SharedMailbox $sharedMailbox)
{
$this->sharedMailbox->removeElement($sharedMailbox);
}
/**
* Get sharedMailbox
*
* @return \Doctrine\Common\Collections\Collection
*/
public function getSharedMailbox()
{
return $this->sharedMailbox;
}
/**
* Add user
*
* @param \AppBundle\Entity\User $user
*
* @return Group
*/
public function addUser(\AppBundle\Entity\User $user)
{
$this->user[] = $user;
return $this;
}
/**
* Remove user
*
* @param \AppBundle\Entity\User $user
*/
public function removeUser(\AppBundle\Entity\User $user)
{
$this->user->removeElement($user);
}
/**
* Get user
*
* @return \Doctrine\Common\Collections\Collection
*/
public function getUser()
{
return $this->user;
}
}
组表单类型
<?php
namespace AppBundle\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
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' => 'AppBundle\Entity\Group'
));
}
/**
* {@inheritdoc}
*/
public function getBlockPrefix()
{
return 'appbundle_group';
}
}
有人知道问题出在哪里吗?
最诚挚的问候,
亚历克斯
答案 0 :(得分:3)
问题似乎出在您声明的实体映射中
repositoryClass: User
您应该传递有效的Doctrine存储库类而不是实体类。
因此,如果不需要自定义存储库功能,则从映射中删除repositoryClass
或创建一个有效的类,该类应类似于以下内容:
namespace AppBundle\Repository;
use Doctrine\ORM\EntityRepository;
class UserRepository extends EntityRepository
{
// your custom repository functions here
}
然后进行适当的映射
repositoryClass: AppBundle\Repository\UserRepository