2013-02-03 21 views
5

Z nowo wydaną wersją Zend Framework 2, two new form elements were added; DateSelect i MonthSelect. Chcę użyć tego pierwszego, który dodaje trzy selekcje; dzień, miesiąc i rok. Mam jednak problem z formatowaniem wyniku tak, jak chcę - i nie ma na to dokumentacji!Zend Framework 2 DateSelect/MonthWybierz formatowanie

dodaję elementu formularza do mojego formularza tak (zaczerpnięte z this page):

$this->add(array(
    'type' => 'Zend\Form\Element\DateSelect', 
    'name' => 'birthDate', 
    'options' => array(
     'label'    => 'Date', 
     'create_empty_option' => true, 
     'day_attributes'  => array(
      'data-placeholder' => 'Day', 
      'style'   => 'width: 20%', 
     ), 
     'month_attributes' => array(
      'data-placeholder' => 'Month', 
      'style'   => 'width: 20%', 
     ), 
     'year_attributes'  => array(
      'data-placeholder' => 'Year', 
      'style'   => 'width: 20%', 
     ) 
    ) 
)); 

do wyprowadzania, robie tak:

echo $this->formDateSelect($form->get('birthDate')); 

Chodzi o to, że ja don wiesz, jak kontrolować sposób formatowania zaznaczeń. Na przykład, są one obecnie wyprowadzane w tej postaci: [month] [day], [year]. Chcę zmienić dwie rzeczy; najpierw chcę zmienić dzień i miesiąc, a po drugie chcę pozbyć się przecinka.

Pomocnicy używają klasy IntlDateFormatter do formatowania zaznaczeń. W kodzie źródłowym, zauważyłem, że można użyć predefined constants dla typu data Dzwoniąc __invoke() [link to source code], tak:

echo $this->formDateSelect($form->get('birthDate'), IntlDateFormatter::SHORT); 

Po wypróbowaniu wszystkich stałych, nadal nie mogę dostać formatu chcę.

zauważyłem, że istnieją pozyskiwaniu dla trzech wybiera, ale używając formSelect widok pomocnika z każdym z nich, puste wybiera są renderowane, ponieważ populacja danych jest w nowym widoku pomocników. Więc to prawie pokonuje cel, nawet przy użyciu selekcji indywidualnie; wtedy równie dobrze mogę użyć zwykłych selekcji.

Czy ktoś ma pojęcie, w jaki sposób mogę uzyskać większą kontrolę nad sposobem formatowania moich selekcji? Czy jest to możliwe bez zbytniego wysiłku, czy też powinienem użyć trzech regularnych selekcji, aby uzyskać maksymalną elastyczność?

Odpowiedz

2

Format ViewHelper to $this->formDateSelect($element, $intlFormat, $locale).

W tym przypadku powinieneś być w stanie utworzyć żądane wyjście, uzyskując dostęp do bieżących ustawień regionalnych i wstawić int do ViewHelpers __invoke(). Widząc getLocale() z ViewHelper zakłada, że ​​domyślnym translator od konfiguracji nie jest używany, więc trzeba ustawić locale wyraźnie do tego ViewHelper, ale to powinno wypracować w porządku;)

Jeśli to nie zadziała zgodnie z oczekiwaniami dla ciebie, mogę ci doradzić, żebyś uderzył w Bakurę wiadomość na: his Blog about the new Form Features

+0

Po prostu zakładałem, że używałem ustawień regionalnych z mojej konfiguracji, więc go opuściłem. Zmieniając ustawienia regionalne, nie zawsze daje mi to, czego chcę (na przykład dla mojego kraju daje mi format, który mi się nie podoba). Jednak miałem szczęście, że dla mojego języka docelowego formatowanie jest dokładnie takie, jak tego chcę! Zrobiłem to tak: 'echo $ this-> formDateSelect ($ this-> form-> get ('birthDate'), IntlDateFormatter :: LONG, 'ro_RO');'. Dziękuję bardzo za odpowiedź - jest to bardzo cenne! – Andy0708

2

Nie mam pojęcia, dlaczego ktoś chciałby umieścić losowy przecinek pomiędzy elementami Wybierz DOM, kiedy wypisuje datę ... co możesz zrobić z tym dokładnie?

Aby usunąć przecinek i wszelkie inne separatora można przekazać w pośrednictwem opcji:

"render_delimiters": false 

co moim zdaniem powinno być fałszywe domyślnie

0

Jak Sam wspomina, można po prostu zaktualizować ustawienia regionalne w swojej php.ini

Na przykład mam to w moim php.ini

intl.default_locale = pl_PL

ta formatuje element DateSelect w formacie dzień/miesiąc/rok wymaganego dla moich projektów w Wielkiej Brytanii.