Php 获取querybuilder的登录用户电子邮件实体-Symfony
如何在实体中获取登录用户电子邮件,以便查询生成器选择当前用户创建的项目 我的实体字段:Php 获取querybuilder的登录用户电子邮件实体-Symfony,php,symfony,Php,Symfony,如何在实体中获取登录用户电子邮件,以便查询生成器选择当前用户创建的项目 我的实体字段: ->add('rfqitem', 'entity', array( 'label' => 'RFQ Items', 'class' => 'RFQ\IronilBundle\Entity\RFQItem', 'multiple' => true, 'expanded' => false,
->add('rfqitem', 'entity', array(
'label' => 'RFQ Items',
'class' => 'RFQ\IronilBundle\Entity\RFQItem',
'multiple' => true,
'expanded' => false,
'attr' => array(
'class' => 'rfq-item-choser'),
'query_builder' => function ($eer){
return $eer
->createQueryBuilder('a')
->where('a.user_email = :email')
->setParameter('email', 'LOGGED USER EMAIL');},
))
创建表单方法:
$user = $this->get('security.context')->getToken();
$form = $this->createForm(new RFQType(), $user, $entity, array(
'action' => $this->generateUrl('rfq_create'),
'method' => 'POST',
'user' => $this->getUser()
));
为此,您必须将登录用户传递给表单 要将用户作为选项传递给表单类,可以执行以下操作:
public function buildForm(FormBuilderInterface $builder, array $options)
{
$user = $options['user'];
$builder
->add('rfqitem', 'entity', array(
/** other options **/
'query_builder' => function ($eer) use ($user) {
return $eer
->createQueryBuilder('a')
->where('a.user_email = :email')
->setParameter('email', $user->getEmail());
},
))
;
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
/** lot's of code **/
$resolver->setRequired(array(
'user',
));
}
然后,在控制器上创建表单时,通过以下方式传递登录用户:
$form = $this->createForm(new YourFormType(), $yourObject, array('user' => $this->getUser()));
更新:对于您的代码,应该如下所示:
$user = $this->get('security.context')->getToken();
$form = $this->createForm(new RFQType(), $entity, array(
'action' => $this->generateUrl('rfq_create'),
'method' => 'POST',
'user' => $user,
));
通常情况下,
我创建了一个侦听器/服务,它将返回已登录的用户,然后在需要的地方调用
听众
class LoggedUser {
protected $security_context;
public function __construct($securityContext){
$this->security_context = $securityContext;
}
public function getLoggedUser(){
return $this->security_context->get('security.context')->getToken()->getUser();
}
}
声明服务
util.getLoggedUser:
class: %util.getLoggedUser.listener%
arguments: [@service_container]
和呼叫:
$logged_user = $this->get('util.getLoggedUser')->getLoggedUser()
感谢您的快速回答,但我如何才能正确地将用户对象传递给创建表单方法呢?我用这个方法更新了我的问题,但它给我带来了一个错误。。。