2016-02-06 61 views
0

給定一個Symfony 2.8項目,我希望使用一個更復雜的類型,其中包含4個文本輸入字段(其原因是用戶每週的開放時間輸入)。如何爲自定義FormType創建表單樹枝模板?

我的問題:

我如何可以定義自定義模板樹枝這類其中具有多種形狀的元素呢? symfony如何知道哪個模板屬於哪種類型? 我讀了docs,但他們不匹配標籤和名稱,他們不適合在一起。

什麼我迄今所做的:

我創建了以下類型:

/** 
* Class OpeningType 
*/ 
class OpeningType extends AbstractType 
{ 
    /** 
    * @param FormBuilderInterface $builder 
    * @param array    $options 
    */ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder->add('from', 'text', [ 
      'label' => '', 
      'attr' => ['placeholder' => '08:00'] 
     ]); 
     $builder->add('until', 'text', [ 
      'label' => '', 
      'attr' => ['placeholder' => '18:00'] 
     ]); 
    } 
} 

對於第一次嘗試,我只有在這裏添加了兩個文本字段。

類型註冊爲一個服務:

example.form.type.opening: 
    class: Example\MainBundle\Form\Type\OpeningType 
    tags: 
     - { name: form.type } 

...,並將此辦法的主要形式有:

 ->add('opening_monday', OpeningType::class, ['label' => 'Monday']) 

如何實現使用自定義窗口小部件作爲樹枝模板這個自定義類型?

回答

0

這裏是在文檔的鏈接,自定義主題化: http://symfony.com/doc/current/cookbook/form/form_customization.html#how-to-customize-an-individual-fieldhttp://symfony.com/doc/current/cookbook/form/form_customization.html#twig

你可以做的「本地」:

{# /views/Controller/action.html.twig #} 

{% block _{ form prefix }_opening_monday_row %} 

    {# customize theme here #} 

{% endblock %} 

{% form_theme form _self %} 

... 

{{ form_row(form.opening_monday) }} 

的前綴是默認窗體名稱「形式」和字段名,這裏open_monday「,您可以在表單生成器定製:

$builder->add('opening_monday', OpeningType::class, ['label' => 'Monday', 'block_name' => 'custom_prefix']) 

或在全球範圍內app/config.yml

twig: 
    form_themes: 
     - form/custom_fields.html.twig 

app/Resources/views/form/custom_fields.html.twig

{% block custom_type_name_raw %} 
    {# customise "form_row" here #} 
{% endblock %} 

{% block custom_type_name_label %} 
    {# customise "form_label" here #} 
{% endblock %} 

{% block custom_type_name_widget %} 
    {# customise "form_widget" here #} 
{% endblock %} 

需要按照CustomFormType方法:

// Symfony 2.8+ 
public function getBlockPrefix() 
{ 
    return "custom_type_name"; 
} 

// before 2.7 included 
public function getName() 
{ 
    return "custom_type_name"; 
} 
+0

樹枝文件不會在generell中加載。我想必須有一個特殊的名稱模式或配置文件中的某處註冊? – itinance

+1

你的意思是這個http://symfony.com/doc/current/cookbook/form/form_customization.html#twig? – Heah

+0

是的,謝謝。在我之間我找到了這個失蹤的步驟:) – itinance

-1

我可以回答我:)

1。在config.yml中定義form_them ES-模板:

twig: 
    form_themes: 
     - form/fields.html.twig 

2.創建具有以下內容上面提到的文件中:

{% block opening_widget %} 
     {# write your form stuff here #} 
{% endblock %} 

塊名是因爲 「OpeningType」 「opening_widget」 是的名稱方式。它可以用getPrefixName(或類似的東西)方法覆蓋,但這不是問題。