Как я могу получить подключенные пользовательские данные в классе типа формы, не восстанавливая все данные для другого пользователя (например, город) - PullRequest
0 голосов
/ 19 сентября 2019


Как я могу получить данные подключенного пользователя в классе типа формы без восстановления всех данных для другого пользователя (например, города).Я использую отношение ManyToMany.Я хочу восстановить город автора здесь.А совокупность городов доступна в базе данных.

Моя форма

<?php
​
namespace App\Form;
​
use App\Entity\User;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\DateType;
use Symfony\Component\Form\Extension\Core\Type\IntegerType;
use Symfony\Component\Form\Extension\Core\Type\NumberType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Security\Core\Security;
​
class OneNewCarType extends AbstractType
{
    private $security;
​
    public function __construct(Security $security)
    {
        $this->security = $security;
    }
​
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $user = $this->security->getUser()->getCity();
​
        $builder
            ->add(
                'city',
                EntityType::class, [
                    'class' => User::class,
                    'label' => 'Ville',
                    'choice_label' => function () {
                        return $this->security->getUser()->getCity();
                    },
                    'expanded' => true,
                    'attr' => [
                        'class' => 'selectpicker',
                    ],
                ]
            );
    }
​
    public function getBlockPrefix()
    {
        return 'oneNewCarType';
    }
}

Ответы [ 2 ]

0 голосов
/ 20 сентября 2019

В итоге эти решения сработали.

$builder->add('users', EntityType::class, [
    'class' => User::class,
    'query_builder' => function (EntityRepository $er) {
        return $er->createQueryBuilder('u')
            ->where('u.id = :user_id')
            ->setParameter('user_id', $this->security->getUser()->getId());
    }
]);

Или в контроллере напрямую

/**
     * @Route("/classified/new", name="classified_create")
     * @IsGranted("ROLE_USER")
     * @param Request $request
     * @param ObjectManager $manager
     * @param CreateVehicleFlow $createVehicleFlow
     * @return Response
     */
    public function create(Request $request, ObjectManager $manager, CreateVehicleFlow $createVehicleFlow)
    {
        $user = $this->getUser();
        $vehicle = new CarVehicle();
        $vehicle->setCity($user->getCity());
...
0 голосов
/ 19 сентября 2019

Я не совсем уверен, что вы пытаетесь сделать, но если вы хотите, чтобы choice_label были городом пользователя, которого они выбирают, вам нужно внести следующие изменения:

'choice_label' => function ($user) {
    return $user()->getCity();
},

Таким образом, для каждого пользователя в качестве значения в выбранных параметрах метка для этого параметра будет городом пользователя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...