Передача параметра в formType в Symfony 2 - PullRequest
0 голосов
/ 09 мая 2018

У меня есть таблицы A и B (имена не важны), отношение один ко многим, B содержит A_id, я хочу добавить запись B, вставив A_id из скрытого поля в форме, поэтому у меня есть:

index.html.twig (A)

 <a href="{{ path('B_new', { 'id': entity.id }) }}">Follow</a>

Bcontroller.php

public function newAction($id)
    {
        $entity = new B();
        $form   = $this->createCreateForm($entity, $id);

        return $this->render('UjcBundle:B:new.html.twig', array(
            'entity' => $entity,
            'form'   => $form->createView(),
        ));
    }

Но я получаю ошибку:

Error: Uncaught TypeError: Argument 1 passed to Symfony\Component\Debug\ExceptionHandler::handle() must be an instance of Exception, instance of Error given in E:\xampInstall\htdocs\nuevo\vendor\symfony\symfony\src\Symfony\Component\Debug\ExceptionHandler.php:90
Stack trace:
#0 [internal function]: Symfony\Component\Debug\ExceptionHandler->handle(Object(Error))
#1 {main}
thrown in E:\xampInstall\htdocs\nuevo\vendor\symfony\symfony\src\Symfony\Component\Debug\ExceptionHandler.php line 90

похоже, проблема в параметре $ id в createCreateForm,

, а затем:

private function createCreateForm(B $entity, $id)
    {
        $form = $this->createForm(new BType($id), $entity, array(
            'action' => $this->generateUrl('b_create'),
            'method' => 'POST',
        ));

        $form->add('submit', 'submit', array('label' => 'Create'));

        return $form;
    }

Есть ли лучший способ сделать это? Параметр createCreateForm $ id является проблемой?

Ответы [ 2 ]

0 голосов
/ 10 мая 2018

Что вы делаете с $ id в BType?

Я бы сделал так: удалите $ id из BType и createCreateForm. И:

#BController
newAction($id){
    $a = $this->getDoctrine()->getRepository('AppBundle:A')->findOneBy(['id' => $id]);
    $b = new B();
    $form = $this->createForm(BType::clasa, $b);
    $form->handleRequest($request);
    if ($form->isSubmitted() && $form->isValid()){
        $b->setA($a);
        $em = $this->getDoctrine()->getManager();
        $em->persist($b);
        $em->flush();
    }
    return $this->render('...');
}
0 голосов
/ 10 мая 2018

Я не понимаю вашу ошибку, но если вам нужно предоставить дополнительные данные в форме, я бы определил новую обязательную опцию в вашем методе configureOptions() (внутри вашего BType):

 $resolver->setRequired('something_id');

В вашем контроллере:

$form = $this->createForm(new BType($id), $entity, array(
    'action' => $this->generateUrl('b_create'),
    'method' => 'POST',
    'something_id' => $id
));

и затем в вашем методе buildForm() вы можете получить к нему доступ через переменную $options: $options['something_id']

Надеюсь, это поможет

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