2016-07-26 5 views
0

Существует форма для создания объекта цепочки.Symfony2: форма не создана

class ChainType extends AbstractType 
{ 
    /** 
    * @param FormBuilderInterface $builder 
    * @param array $options 
    */ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder 
      ->add('name', TextType::class, array('label' => 'Company name')) 
      ->add('logoImageURL', TextType::class, array('label' => 'Company logo')); 
    } 

    /** 
    * @param OptionsResolver $resolver 
    */ 
    public function configureOptions(OptionsResolver $resolver) 
    { 
     $resolver->setDefaults(array(
      'data_class' => 'CoreBundle\Entity\Chain' 
     )); 
    } 
} 

Вот newAction создать форму и сохранить объект

/** 
* Creates a new Chain entity. 
* 
* @Route("/new", name="chain_new") 
*/ 
public function newAction(Request $request) 
{ 
    $chain = new Chain(); 
    $form = $this->createForm(ChainType::class, $chain); 

    $form->handleRequest($request); 
    if ($form->isSubmitted() && $form->isValid()) { 
     $em = $this->getDoctrine()->getManager(); 
     $em->persist($chain); 
     $em->flush(); 

     return $this->redirectToRoute('chain_show'); 
    } 

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

Здесь кнопка для создания формы

<button type="button" class="btn btn-primary"> 
    <a href="{{ path('chain_new') }}"> 
     Add Chain 
    </a> 
</button> 

Проблема

Когда я нажимаю на " Добавить цепочку ', форма не создается, и я просто перенаправляю t o 'chain_show'. Что не так с моим кодом?

ОБНОВЛЕНИЯ - МОЕ РЕШЕНИЕ

В контроллере я ставлю перед тем newAction showAction. Эта фиксированная проблема. Однако я не мог найти объяснения

ответ

1

Я не уверен, что вы пытаетесь сделать, но если вы пытаетесь создать страницу с формой ChainType, вы также должны создать шаблон для этой страницы, например:

..... 

{% block YOUR_BLOCK %} 
    {{ form(form) }} 
{% endblock %} 

...... 

и, кроме того, вы не должны обернуть a тег button тег, просто дать class="btn btn-primary" к этому a тега.

0

Ваша проблема в том, что вы используете переменную, содержащую новый объект Chain. См. Мой пример ниже, и это должно исправить вашу проблему ...

public function newAction(Request $request) 
{ 
    $chain = new Chain(); 
    $form = $this->createForm(ChainType::class, $chain); 

    $form->handleRequest($request); 
    if ($form->isSubmitted() && $form->isValid()) { 
     $chain = $form->getData(); 

     $em = $this->getDoctrine()->getManager(); 
     $em->persist($chain); 
     $em->flush(); 

     return $this->redirectToRoute('chain_show'); 
    } 

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

Вы также создаете кнопку отправки неправильно. Чтобы проверить это все работает нормально, просто использовать (в вашем .twig.html файле):

{{ form(form) }} 
0

Интересный, хотя, я думаю, HTML неправильно по ссылке. У вас не должно быть button, завернутого в тег привязки. Некоторые браузеры не поддерживают его. вместо этого использовать, как показано ниже:

<a href="{{ path('chain_new') }}" class="btn btn-primary"> 
    Add Chain 
</a> 

Если это не решит проблему, Вы видите что новый объект создается, когда вы нажимаете на ссылку?

0

В контроллере я устанавливаю newAction перед showAction. Эта фиксированная проблема. Однако я не мог найти объяснения

Смежные вопросы