2014-12-29 16 views
8

Symfony2 formları için global olarak özel tarih formatı belirlemek için doğru yol nedir?Symfony formları için global olarak tarih biçimi nasıl ayarlanır?

Varsayılan biçim Y-m-d şeklindedir ve m/d/Y veya d/m/Y gibi tarihi girerseniz geçersiz olarak kabul edilir.

Biçim bir şekilde seçili yerel ayarla ilişkilendirmenin bir yolu var mı? Özel form türleri yazmadan basit bir çözüm arıyorum.

+0

, http://symfony.com/doc/current/cookbook/form/create_custom_field_type.html –

cevap

2

Biçimi başka bir biçim isterseniz, FormType öğenizde ayarlayabilirsiniz.

$builder->add('date_created', 'date', array(
    'widget' => 'single_text', 
    // this is actually the default format for single_text 
    'format' => 'yyyy-MM-dd', 
)); 

varsayılan değil 'Y-A-G' IntlDateFormatter onun bir örneği. Bu yüzden, tek bir metin kullanmazsanız doğru yerel ayarı seçmelisiniz.

türü: tamsayı veya dize varsayılan: IntlDateFormatter :: ORTA (veya yyyy-AA-gg Widget single_text ise)

http://symfony.com/doc/current/reference/forms/types/date.html#format http://php.net/manual/en/class.intldateformatter.php

+0

teşekkürler @Taşlı. Türün seçeneklerine göre özel formatı ayarlayabileceğimi biliyorum.Ama bunu küresel olarak yapmalıyım (daha önce bahsetmeyi unuttum; sorumu güncelledim). Tarih biçiminin kullanıldığı tüm yerlerin güncellenmesinden daha basit bir çözüm olmalıdır. Varsayılan olmayan tarih biçimini (ABD, İngiltere ve diğer ülkeler) kullanan pek çok web sitesinin olduğuna inanıyorum. Yani bu "sorun" yaygın olmalı. Ortak problemler genellikle basit bir çözüme sahiptir :) – Johnny

1

Tarih alanınızın biçimini yerel ayarlara bağlı olarak değiştirmek isterseniz, özel bir alan oluşturun ve tarih yerine kullanın. Farkında olduğum tek yol bu.

Birincisi, hizmet oluşturmak ve argümanlar içinde yerel pass:

# src/Acme/DemoBundle/Resources/config/services.yml 
services: 
    acme_demo.form.type.localedate: 
     class: Acme\DemoBundle\Form\Type\LocaleDateType 
     arguments: 
      - "%locale%" 
     tags: 
      - { name: form.type, alias: localedate } 

yeni alan türü için kodu ile sınıf oluşturun. Gördüğünüz gibi, bu alan türü tarihine göre ve geçerli yerele bağlı biçimini değiştirir oluyor:

$builder->add('date_created', 'localedate', array(
    'widget' => 'single_text', 
)); 

it Umut:

// src/Acme/DemoBundle/Form/Type/LocaleDateType.php 
namespace Acme\DemoBundle\Form\Type; 

use Symfony\Component\Form\AbstractType; 
use Symfony\Component\OptionsResolver\OptionsResolverInterface; 

class LocaleDateType extends AbstractType 
{ 
    private $locale; 

    public function __construct($locale) 
    { 
     $this->locale = $locale; 
    } 

    public function setDefaultOptions(OptionsResolverInterface $resolver) 
    { 
     $resolver->setDefaults(array(
      'format' => $this->getFormat(),// return the format depending on locale 
     )); 
    } 

    private function getFormat() { 
     switch($this->locale) { 
      case 'es': 
       return 'dd-MM-yyyy';// return valid date format for this locale 
      default: 
       return 'yyyy-MM-dd'; 
     } 
    } 

    public function getParent() 
    { 
     return 'date'; 
    } 

    public function getName() 
    { 
     return 'localedate'; 
    } 
} 

date alan türü yerine uygulamanızda kullanın yardım eder.

Saygılarımızla.

1

Sen YourProjectFolder \ satıcı \ symfony \ symfony \ src \ Symfony \ Köprüsü \ Twig \ Resources \ görünümler \ Form \ form_div_layout.html.twig altında symfony ait date_widget geçersiz kılabilir. Kopya başka benzeri fields.html.twig dosya ve küresel kaynak altında \ görüşlerini \ Form \ koyun ve date_widget (varsayılan biçimine değiştirin) geçersiz kılmak:

{% block date_widget -%} 
{% if widget == 'single_text' %} 
    {{- block('form_widget_simple') -}} 
{% else -%} 
    <div {{ block('widget_container_attributes') }}> 
     {{- date_pattern|replace({ 
      '{{ year }}': form_widget(form.year), 
      '{{ month }}': form_widget(form.month), 
      '{{ day }}': form_widget(form.day), 
     })|raw -}} 
    </div> 
{%- endif %} 

{% - endblock date_widget% }

formunuz eklemedeki Sonra

: Cevabınız için

{% form_theme form 'AAAYourBundle:Form:fields.html.twig'%} 
Sen özel form türünü oluşturmak için deneyebilirsiniz
İlgili konular