2017-08-29 25 views
0

連絡フォームセクションを持つsymfonyのウェブサイトで1つのページテンプレートを使用します。レンダリングされたフォームがデータを投稿していません

私は自分のホームページ(appbundle:contact:new)を自分のホームページにレンダリングしました.ContentControllerはdoctrine CRUDによって自動的に生成されます。

フォームを完全に表示します。しかし、何の行動もしません。私は何かが恋しい?

マイビュー

{% block header %}{% include'header.html.twig' %}{% endblock %} 
{% block nav %}{% include'nav.html.twig' %}{% endblock %} 
{% block mainHeader %}{% include'mainHeader.html.twig' %}{% endblock %} 
{% block body %} {% endblock %} 
{% block projetCategories %}{% include'projetCategories.html.twig' %}{% endblock %} 
{% block projets %}{% include'projets.html.twig' %}{% endblock %} 
{#{% block contact %}{{ render(controller('BlogBundle:Contact:new')) }}{% endblock %}#} 
{% block contact %}{% include':contact:new.html.twig' %}{% endblock %} 
{% block footer %}{% include'footer.html.twig' %}{% endblock %} 
{% block javascripts %}{% include'javascript.html.twig' %}{% endblock %} 

マイコントローラー

class ContactController extends Controller 
{ 
public function newAction(Request $request) 
{ 
    $contact = new Contact(); 
    $form = $this->createForm('BlogBundle\Form\ContactType', $contact); 
    $form->handleRequest($request); 

    if ($form->isSubmitted() && $form->isValid()) { 
     //$contactData = [$form->getValue('nom'), $form->getValue('prenom'),$form->getValue('email'), $form->getValue('sujet'), $form->getValue('message')]; 
     $em = $this->getDoctrine()->getManager(); 
     $em->persist($contact); 
     $em->flush(); 

     return $this->redirectToRoute('blog_homepage', array('id' => $contact->getId())); 
    } 

    return $this->render('contact/new.html.twig', array(
     'contact' => $contact, 
     'contactForm' => $form->createView(), 
    )); 
} 
} 

マイモデル

class Contact { 
    /** 
    * @ORM\Id 
    * @ORM\Column(type="integer") 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
public $id; 

/** 
* @ORM\Column(type="string", nullable=true) 
*/ 
private $nom; 

/** 
* @ORM\Column(type="string", nullable=true) 
*/ 
private $prenom; 

/** 
* @ORM\Column(type="string", nullable=true) 
*/ 
private $email; 

/** 
* @ORM\Column(type="string", nullable=true) 
*/ 
private $sujet; 

/** 
* @ORM\Column(type="string", nullable=true) 
*/ 
private $message; 

マイnew.html.twig

<div class="col-lg-6 text-center"> 
       {{ form_start(contactForm) }} 
       {{ form_widget(contactForm) }} 
       <input type="submit" value="Envoyer" /> 
       {{ form_end(contactForm) }} 

マイフォーム

public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder->add('nom', TextType::class, array('label'=>false, 'attr'=>array(
      'class'=>'form-control', 
      'placeholder'=>'Nom*', 
      'style'=>"margin-bottom:5px;" 
      ))); 
     $builder->add('prenom', TextType::class, array('label'=>false, 'attr'=>array(
      'class'=>'form-control', 
      'placeholder'=>'Prénom*', 
      'style'=>"margin-bottom:5px;" 
      ))); 
     $builder->add('email', EmailType::class, array('label'=>false, 'attr'=>array(
      'class'=>'form-control', 
      'placeholder'=>'Email*', 
      'style'=>"margin-bottom:5px;" 
      ))); 
     $builder->add('sujet', ChoiceType::class, array('label'=>false, 
      'choices' => array(
       'Quel sujet?'=> false, 
       '1'=>'1', 
       '2'=>'2', 
       '3'=>'3', 
      ), 
      'choices_as_values' => true, 
      'attr'=>array('class'=>'form-control','style'=>"margin-bottom:5px;"), 
      'choice_attr' => function($val, $key, $index) { 
       // adds a class like attending_yes, attending_no, etc 
       return ['class' => strtolower($key)]; 
      }, 
     )); 
     $builder->add('message', TextareaType::class, array('label'=>false, 'attr'=>array(
      'class'=>'form-control', 
      'placeholder'=>'Message*', 
      'style'=>"margin-bottom:5px;", 
      'cols'=>50, 
      'rows'=>10 
     ))); 
    } 

    /** 
    * {@inheritdoc} 
    */ 
    public function configureOptions(OptionsResolver $resolver) 
    { 
     $resolver->setDefaults(array(
      'data_class' => 'BlogBundle\Entity\Contact' 
     )); 
    } 

    /** 
    * {@inheritdoc} 
    */ 
    public function getBlockPrefix() 
    { 
     return 'blogbundle_contact'; 
    } 

ソースコードの修正後のエラーメッセージ

Variable "contactForm" does not exist. 
+0

テンプレートをレンダリングして、再度テンプレートをレンダリングして、もう一度組み込むと... WTF? –

+0

@ t-n-y:ブロックはcontactControllerの新しいアクションによって無効にされています! WTF!スペックをきれいにする? –

+0

だからあなたの投稿ではうまく指定しないかもしれませんが、ここで見ているのは 'contact/new.html.twig'をレンダリングして、そのファイル内で同じコントローラのレンダリングを呼び出します。ここでオーバーライドを参照してください –

答えて

0

あなたがnew Contact()を作成するようにはい、それは見えますが、あなたドン実際には値を設定していません!

このようなものを試してみてください!

if ($form->isSubmitted()) { 
    if ($form->isValid()) { 
     // populate entity and persist 
    } else { 
     // populate form with whatever WAS valid 
     // send form not valid message to view 
    } 
} 
+0

をご覧ください申し訳ありませんが、私はそれをはっきりと理解できませんでした!このルート "site_domain/contact/new"上のフォームを検証するときも、同じメソッドアクションが働きます。例外的に私のホームページでは機能していません。 –

+0

私は自分のホームページにこの '{%block contact%} {{render(controller '(BlogBu​​ndle:Contact:new')}}} {%endblock%}を使ってフォームをレンダリングしました。 –

0
  1. あなたは私たちにContactTypeのコードを表示することができます:

    if ($form->isSubmitted() && $form->isValid()) { 
        $dataArray = $form->getValuesOrWhateverMethod(); 
        $contact->setWhatever($dataArray['whatever']); 
        // etc 
        $em = $this->getDoctrine()->getManager(); 
        $em->persist($contact); 
        $em->flush(); 
    } 
    

    はまた、あなたはおそらく、そうのようなif文があること、より良い分割していますか?

  2. https://symfony.com/doc/current/forms.html#creating-form-classesには、達成したいと似たような例が示されているので、もう一度やり直すことをお勧めします。
  3. symfonyのdump()関数を使ってデバッグするのも非常に便利です。
+0

はい、それは私のバンドル。私はこれを私の質問に即座に追加します –

+0

ContactTypeが追加されました –

関連する問題