2011-06-28 17 views
20

Chcę utworzyć niestandardowe pole formularza w symfony2 o nazwie daterange, które rozszerzy domyślny typ pola daty typu symfony i uwzględni zakres dat (data rozpoczęcia i data zakończenia) w dwóch różnych polach tekstowych.Jak mogę utworzyć niestandardowy typ pola w symfony2?

+0

Czy opublikowała kod gdzieś? –

Odpowiedz

22

Bo nie lubię silnik szablon gałązka ten przykład tylko dla PHP szablonów

Co trzeba to zrobić:

  1. New TestBundle\Form\Extension\Core\Type\DateRangeType która rozciąga Symfony\Component\Form\AbstractType

    Tutaj powinien:
    a. napisz własne metody getParent, getName, buildForm
    b. getParent return 'field'
    c. getName return "daterange"
    d. buildForm ma $builder->add('start', ...)->add('end', ...)->setAttribute('widget', 'daterange')

  2. Dodaj go do di (config.yml jako przykład)

 
    services: 
     form.type.daterange: 
      class: TestBundle\Form\Extension\Core\Type\DateRangeType 
      tags: 
       - { name: form.type, alias: daterange } 
  1. Utwórz nowy widget dla niego w TestBundle/Resources/views/Form/daterange_widget.html.php ty jako przykład można użyć widgetu daty. Src/vendor/symfony/src/Symfony/Bundle/FrameworkBundle/Resources/views/Form/date_widget.html.php

  2. Dodaj do config (config.yml jako przykład)

 
    framework: 
     templating: 
      form: 
       resources: 
        - 'TestBundle:Form' 

i więcej widget personalizacji jako nefo_x powiedział sprawdzić form customization.

6

Aby to zrobić, należy dodać następujące linie do app/config/config.yml

twig: 
    form: 
     resources: 
      - 'YourSuperBundle:Form:fields.html.twig' 

następnie w src/Your/SuperBundle/Resources/views/Form/fields.html.twig:

{% extends 'form_div_layout.html.twig' %} 

{% block daterange_widget %} 
    ... do the customization. 
{% endblock %} 

Dalsze odniesienia proszę przeczytać form customization z Symfony 2.0 książce.

+0

+1 Wspominając o ścieżce dla 'fields.html.twig' - nie jest to oczywiste w dokumentacji. Dzięki. –

Powiązane problemy