2014-02-27 57 views
2

Symfony的自定義窗體,我創建使用官方的symfony文檔的簡單形式:與驗證

public function newAction(Request $request) 
{ 
    // create a task and give it some dummy data for this example 
    $task = new Task(); 
    $task->setTask('Write a blog post'); 
    $task->setDueDate(new \DateTime('tomorrow')); 

    $form = $this->createFormBuilder($task) 
     ->add('task', 'text') 
     ->add('dueDate', 'date') 
     ->add('save', 'submit') 
     ->getForm(); 

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

我想補充輸入文本和輸入日期之間的標籤或只是任何HTML文本。

你能幫我嗎?由於

更新:樹枝代碼:

{{ form(form, {'attr': {'novalidate': 'novalidate'}}) }} 
+0

請說明如何在Twig中渲染窗體。 –

+0

@ n.1更新後。謝謝 – user3037814

回答

0

您可能必須手動渲染表單:

{{ form_start(form, {'attr': {'novalidate': 'novalidate'} }) }} 
    {{ form_errors(form) }} 
    {{form_row(form.task)}} 
    <div>Custom HTML Goes Here</div> 
    {{form_row(form.dueDate)}} 
    {{form_row(form.save)}} 
{{form_end}} 

看一看:http://symfony.com/doc/current/reference/forms/twig_reference.html更多信息

或者你也可以簡化這是因爲form_end會渲染所有未渲染的字段,如:

{{ form_start(form, {'attr': {'novalidate': 'novalidate'} }) }} 
    {{ form_errors(form) }} 
    {{form_row(form.task)}} 
    <div>Custom HTML Goes Here</div> 
{{form_end}} 
1

您可以顯示形式的不同部分:

{{ form_start(form) }} 
    {{ form_row(form.task) }} 
    <p>Here is my text.</p> 
    {{ form_row(form.dueDate) }} 
    {{ form_row(form.save) }} 
{{ form_end(form) }} 

你應該得到一個較短的形式相同的結果:

{{ form_start(form) }} 
    {{ form_row(form.task) }} 
    <p>Here is my text.</p> 
{{ form_end(form) }} 

form_end(form)功能會顯示領域尚未呈現,在這裏dueDatesave

查看documentation瞭解更多詳情。

+1

相同的答案同時,有趣的東西。 – Chausser

+0

完美同步! :) –

0
//You can add label in controller 

public function newAction() 
    { 
     // create a task and give it some dummy data for this example 
     $objectQuestionnaire = new Questionnaire(); 
     $objectQuestionnaire->setName('Write name here'); 
     $objectQuestionnaire->setTextIntroduction("Put introduction here"); 

     $form = $this->createFormBuilder($objectQuestionnaire) 
      ->add('name', 'text',array('attr'=>array('label'=>'Name'))) 
      ->add('text_introduction', 'textarea',array('attr'=>array('label'=>'Text Introduction'))) 
      ->add('save', 'submit') 
      ->getForm(); 

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



    //If you do'nt want in controller then in view use separate fields 

    //like this 

    {{ form_row(form.name,{'attr':{'label':'Name'}}) }} 
    {{ form_row(form.text_introduction,{'attr':{'label':'Text Introduction'}}) }} 
    {{ form_row(form.save) }}