2011-06-28 27 views
20

Symfony2'de daterange adında özel bir form alanı oluşturmak istiyorum. Bu, varsayılan symfony tarih türü form alanını genişletecek ve tarih aralığını (başlangıç ​​tarihi ve bitiş tarihi) iki farklı metin kutusuna alacaktır. Bunu yapmak içinSymfony2'de özel alan türünü nasıl yapabilirim?

+0

bir yere kodunu yayınladı mı oluşturmak üzere resmi yemek kitabı bir good entry Var? –

cevap

22

Nedeni ben dal şablon motoru sevmiyorum sadece PHP şablonu için bu örnek

İhtiyacın yapmaktır: İşte size

Symfony\Component\Form\AbstractType uzanır

  1. Yeni TestBundle\Form\Extension\Core\Type\DateRangeType olmalıdır:
    a. Kendi getParent, getName, buildForm metodlarını yazınız
    b. getParent dönüş 'alan'
    c. getName 'daterange' değerini döndürür
    d. buildForm $builder->add('start', ...)->add('end', ...)->setAttribute('widget', 'daterange')

  2. DI (örnek olarak config.yml) öğesine ekleyin sahiptir

 
    services: 
     form.type.daterange: 
      class: TestBundle\Form\Extension\Core\Type\DateRangeType 
      tags: 
       - { name: form.type, alias: daterange } 
  1. TestBundle/Resources/views/Form/daterange_widget.html.php bunun için yeni bir widget oluşturun tarih widget'ını örnek olarak alabilir. Src/vendor/symfony/src/Symfony/Bundle/FrameworkBundle/Resources/views/Form/date_widget.html.php

  2. config (örnek olarak config.yml) ekleyin

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

Ve nefo_x gibi daha Widget özelleştirme için form customization kontrol etti.

6

, sen src/Your/SuperBundle/Resources/views/Form/fields.html.twig sonra app/config/config.yml

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

içine aşağıdaki satırları eklemeniz gerekir: Ek Başvuru için

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

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

Symfony'nin 2.0 kitabın form customization okuyunuz.

+0

+1 "fields.html.twig" yolundan bahsetmek için - belgelerde açık değil. Teşekkürler. –

İlgili konular