Skip to content

Instantly share code, notes, and snippets.

@cybernet
Created October 22, 2017 07:16
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save cybernet/fd8d69dea4f22fb2012d2238bdf8dd63 to your computer and use it in GitHub Desktop.
Save cybernet/fd8d69dea4f22fb2012d2238bdf8dd63 to your computer and use it in GitHub Desktop.
Passing data to buildForm() in Symfony 3.3
/**
* @Route("/agency/post", name="agency_post")
*/
public function agencyNewAd(Request $request)
{
// $agency = $this->get('security.token_storage')->getToken()->getUser(); ( this didn't worked .. )
$form = $this->createForm(AgencyNewAdType::class, array(
'postedBy' => $this->getUser(),
));
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$ad = $form->getData();
// save the task to the database
$em = $this->getDoctrine()->getManager();
$em->persist($ad);
$em->flush();
// return new Response('Saved new Post with id ' . $ad->getId());
return $this->redirectToRoute('agency_admin');
}
return $this->render('agency/new_ad.html.twig', [
'adForm' => $form->createView()
]);
}
class AgencyNewAdType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
// https://stackoverflow.com/questions/36905490/how-to-pass-parameter-to-formtype-constructor-from-controller
$builder
->add('title', TextType::class)
->add('content', TextareaType::class)
->add('category', EntityType::class, array(
// query choices from Category.Name
'class' => 'AppBundle:CategoryAd',
'choice_label' => 'name',
))
->add('postedAt', DateType::class)
->add('postedBy',HiddenType::class, array(
'data' => $options['postedBy']
))
->add('save', SubmitType::class, array('label' => 'Create Post'))
->getForm();
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'postedBy' => null,
'data_class' => 'AppBundle\Entity\AdsList',
));
}
}
@kunicmarko20
Copy link

kunicmarko20 commented Oct 22, 2017

public function agencyNewAd(Request $request)
{
    $ad = new AdsList();
    $form = $this->createForm(new AgencyNewAdType($this->getUser(), $ad);
}
class AgencyNewAdType extends AbstractType
{
    private $user;

    public function __construct(User $user)
    {
        $this->user = $user;
    }

   public function buildForm(FormBuilderInterface $builder, array $options)
   {
        $builder
        ->add('postedBy',HiddenType::class, array(
            'data' => $this->user
        ))

    } 
}

@cybernet
Copy link
Author

Parse error: syntax error, unexpected 'private' (T_PRIVATE)
PHPstorm says

private $user; $user is undefined

$this->user Field 'user' not found in AgencyNewAdType less...
Referenced field is not found in subject class. Note: Check is not performed on objects of type "stdClass" or derived.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment