Symfony 4中如何在表单类型(Form Type)中获取当前用户?

10

我想知道如何在我的FormType(实体类型)中恢复当前用户?

目前,我只能检索已注册用户的列表,但无法找到当前(已连接)用户。

我的当前FormType

<?php

namespace App\Form;

use App\Entity\User;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;

class OneNewCarType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add(
                'author',
                EntityType::class, [
                    'label' => 'Ville',
                    'class' => User::class,
                    'attr' => [
                        'class' => 'selectpicker'
                    ],
                    'choice_label' => function ($author) {
                        return $author->getCity();
                    }
                ]
            );
    }

    public function getBlockPrefix()
    {
        return 'oneNewCarType';
    }
}

我知道如何在我的控制器中直接恢复它。但是,当一个人使用步进捆绑CraueFormFlowBundle时,我不知道如何做。

这是我的当前控制器

/**
 * @Route("/classified/{id}/edit", name="classified_edit")
 * @param CarVehicle $carVehicle
 * @param ObjectManager $manager
 * @param CreateVehicleFlow $createVehicleFlow
 * @return RedirectResponse|Response
 */
public function edit(CarVehicle $carVehicle, ObjectManager $manager, CreateVehicleFlow $createVehicleFlow)
{
    $flow = $createVehicleFlow;
    $flow->bind($carVehicle);

    $form = $flow->createForm();
    if ($flow->isValid($form)) {
        $flow->saveCurrentStepData($form);
        if ($flow->nextStep()) {
            $form = $flow->createForm();
        } else {
            $manager->persist($carVehicle);
            $manager->flush();

            $flow->reset();

            $this->addFlash(
                'success',
                "Votre annonce <i>{$carVehicle->getId()}</i> a bien été mise à jour"
            );

            return $this->redirect($this->generateUrl('account_index'));
        }
    }

    return $this->render('front/classified/edit_vehicle.html.twig', [
        'form' => $form->createView(),
        'flow' => $flow,
        'carVehicle' => $carVehicle,
    ]);
}

感谢您的帮助!
2个回答

22

使用Symfony\Component\Security\Core\Security,您可以在任何需要的地方获取用户信息。将其注入到FormType中,并使用$user = $this->security->getUser();

private Security $security;

public function __construct(Security $security)
{
    $this->security = $security;
}

5
在Symfony 5中,使用Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface,您可以在任何需要的地方获取用户。将它注入到FormType中并使用$user = $this->token->getToken()->getUser();
private $token;

public function __construct(TokenStorageInterface $token)
{
   $this->token = $token;
}

对于Symfony 5.2.2,我需要执行以下操作,这对我有效:$user = $this->token->getToken()->getUser(); 获取令牌的转储可以很好地了解它所持有的内容。 - Ali

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接