2014-01-05 44 views
0

我想從樹枝上的單選按鈕的會話中自動選擇值。不幸的是,下面的代碼不適合我。Symfony 2 +樹枝自定義表單字段類型 - 選定的單選按鈕

以我樹枝模板

{{ form_row(reg_form.sex, {'data' : 2}) }} 

我的表單字段類型(用戶:: SEX_MALE = 1,用戶:: SEX_FEMALE = 2)

<?php 

namespace FWM\CoreBundle\Form\Type; 

use Symfony\Component\Form\AbstractType; 
use Symfony\Component\Form\FormBuilderInterface; 

use FWM\CoreBundle\Entity\User; 

use Symfony\Component\OptionsResolver\Options; 
use Symfony\Component\OptionsResolver\OptionsResolverInterface; 

/** 
* A form field for selecting user's sex 
*/ 
class SexType extends AbstractType 
{ 
    /** 
    * {@inheritDoc} 
    */ 
    public function setDefaultOptions(OptionsResolverInterface $resolver) 
    { 
     $resolver->setDefaults([ 
      'choices' => array(
       User::SEX_MALE => 'label.form.male', 
       User::SEX_FEMALE => 'label.form.female' 
      ), 
      'label' => 'label.form.sex', 
      'expanded' => true, 
     ]); 
    }  

    /** 
    * {@inheritDoc} 
    */ 
    public function getParent() 
    { 
     return 'choice'; 
    } 

    /** 
    * {@inheritDoc} 
    */ 
    public function getName() 
    { 
     return 'user_sex'; 
    } 
} 

而我顯示定製:

{% block form_row %} 
    {% set error = false %} 
    {% if errors %} 
     {% set error = true %} 
     {% set attr = attr|merge({'class' : attr.class|default('') ~ ' error'}) %} 
    {% endif %} 
    {{ form_widget(form, {'attr' : attr, 'error': error}) }} 
{% endblock form_row %} 


{% block choice_widget %} 
{% spaceless %} 
    {% if expanded %} 
     {% set attr = attr|merge({'class' : attr.class|default('') ~ ' radio-row'}) %} 

     <div {{ block('widget_container_attributes') }}> 

     {{dump(form)}} 

     {% for child in form %} 

      <span class="unbreakable">{{ form_widget(child) }}&nbsp;{{ form_label(child) }}</span> 

     {% endfor %} 
     </div> 
    {% else %} 
... 

如果我添加「數據=> 2」到setDefaults(...),字段女選中,但我找不到方法使它成爲k通過傳遞樹枝的價值。請有人幫助我嗎?

+0

爲什麼你想要將事物從模板傳遞給對象?模板假設是與控制器,模型或其他任何東西分開的,我只是應該創建你已經創建的東西。 – qooplmao

+1

在'twig'中有表單的時候,那麼所有或將要發生的事情都應該發生。你可以在對象類'$ this-> createFormBuilder(Object,{你的選項})中設置你的默認值,然後設置它,或者你可以在你的實體中硬編碼它。 – qooplmao

+0

嗨!感謝您的回答,當然,當我將邏輯移至控制器時,它的工作非常完美。 – bdlk

回答

-2

@qooplmao在評論中寫道:

由當時的形式是在twig那麼一切就是或將要發生它應該發生可用。您可以在對象類$this->createFormBuilder(Object, {your options})中設置默認值,然後進行設置,或者您可以在實體中對其進行硬編碼。

+0

([問題在評論中回答並轉換爲社區wiki](http://meta.stackoverflow.com/questions/251597/question-with-no-answers-but-issue-solved-in-the-comments) )。 –