com o Symfony atualizado, tenho um Form customizado, onde é feito um campo na entidade de acordo com uma solicitação de doutrina. Para construir esta requisição é necessário um parâmetro id
passado pelo controlador, com opção 'postedBy'
class StudyDecomposedType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder
->add('subjects', EntityType::class,[
'class' => Subject::class,
'choice_label' => 'identifier',
'required' => false,
'multiple' => true,
'query_builder' => function (EntityRepository $er) use ($options): QueryBuilder {
return $er->createQueryBuilder('a')
->leftJoin("a.studies", "s")
->leftJoin(Studyaccess::class, 'sa', 'WITH', 's=sa.study')
->where('(sa.user = :userid AND (sa.r = 1 OR sa.w = 1)) OR (a.owner= :userid)')
->setParameter('userid', $options['postedBy']);
},
])
;
}
public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefaults([
'postedBy' => 0,
]);
$resolver->setAllowedTypes('postedBy', 'int');
}
No meu controlador, faço o formulário assim:
$form = $this->createForm(StudyDecomposedType::class,
$options= ['postedBy' => $this->getUser()->getId(),]
);
Mas seja qual for o valor que coloco nas opções, o valor na solicitação é aquele que coloco como padrão (aqui 0).
Alguém poderia me ajudar, estou totalmente perdido
O parâmetro userid
deve ser aquele fornecido através da chamada do $options
crontroller, mas o valor nunca muda. Verifiquei o id no controller, olhei o sql que é gerado e o userid
sempre está no valor padrão
O método createForm() espera as opções como o terceiro parâmetro, mas você as enviou como o segundo que é usado para enviar os dados para preencher os campos do formulário.
Corrija a ordem passando null como segundo parâmetro (este é o valor padrão real):
Se você estiver usando PHP 8+, poderá usar argumentos nomeados :