2013-02-03 29 views
5

Với phiên bản mới được phát hành của Zend Framework 2, two new form elements were added; DateSelectMonthSelect. Tôi muốn sử dụng cái cũ, thêm ba lựa chọn; ngày, tháng và năm. Tuy nhiên, tôi có một vấn đề định dạng đầu ra như thế nào tôi muốn - và, không có tài liệu hướng dẫn cho việc này!Zend Framework 2 DateSelect/MonthSelect định dạng

Tôi thêm phần tử form mẫu của tôi như thế này (lấy từ 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%', 
     ) 
    ) 
)); 

Đối với xuất ra, tôi đang làm như thế này:

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

Cái này là tôi don 't biết làm thế nào để kiểm soát cách lựa chọn được định dạng. Ví dụ: chúng hiện được xuất trong biểu mẫu này: [month] [day], [year]. Tôi muốn thay đổi hai điều; đầu tiên, tôi muốn chuyển đổi ngày và tháng, và thứ hai, tôi muốn loại bỏ dấu phẩy.

Người trợ giúp sử dụng lớp IntlDateFormatter để định dạng các lựa chọn. Trong mã nguồn, tôi nhận thấy rằng bạn có thể sử dụng predefined constants cho kiểu ngày khi gọi __invoke() [link to source code], như thế này:

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

Đã thử tất cả các hằng số, tôi vẫn không thể có được các định dạng tôi muốn.

Tôi nhận thấy rằng có getters cho ba lựa chọn, nhưng bằng cách sử dụng trợ giúp xem formSelect với mỗi người trong số họ, lựa chọn trống được trả lại vì dân số dữ liệu nằm trong trình trợ giúp chế độ xem mới. Vì vậy, khá nhiều thất bại mục đích của việc sử dụng các lựa chọn riêng lẻ; thì tôi cũng có thể sử dụng các lựa chọn thông thường.

Có ai có ý tưởng nào về cách tôi có thể kiểm soát nhiều hơn về cách chọn của tôi được định dạng không? Thậm chí nó có thể xảy ra nếu không có quá nhiều rắc rối, hay tôi chỉ nên sử dụng ba lựa chọn thường xuyên cho sự linh hoạt tối đa?

Trả lời

2

Định dạng của ViewHelper$this->formDateSelect($element, $intlFormat, $locale).

Với điều này đang được nói, bạn sẽ có thể tạo đầu ra bạn muốn bằng cách truy cập cài đặt ngôn ngữ hiện tại của bạn và chèn int vào ViewHelpers __invoke(). Thấy getLocale() của ViewHelper ngụ ý, mà mặc định translator từ cấu hình không được sử dụng, vì vậy bạn phải thiết lập một cách rõ ràng locale cho ViewHelper này, nhưng sau đó nó sẽ làm việc ra tốt;)

Nếu điều đó không làm việc như mong đợi cho bạn, tôi có thể khuyên bạn nên nhấn Bakura một tin nhắn trên his Blog about the new Form Features

+0

Tôi đã giả định rằng nó đã được sử dụng miền địa phương từ cấu hình của tôi vì vậy tôi rời nó ra. Thay đổi ngôn ngữ, nó không phải lúc nào cũng cho tôi những gì tôi muốn (ví dụ, đối với đất nước của tôi nó mang lại cho tôi một định dạng mà tôi không thích). Tuy nhiên, tôi đã may mắn vì ngôn ngữ đích của tôi, định dạng chính xác là tôi muốn nó như thế nào! Tôi đã làm như thế này: 'echo $ this-> formDateSelect ($ this-> form-> get ('birthDate'), IntlDateFormatter :: LONG, 'ro_RO');'. Cảm ơn bạn rất nhiều vì câu trả lời của bạn - nó rất được đánh giá cao! – Andy0708

2

Tôi không biết tại sao bất cứ ai muốn đặt dấu phẩy ngẫu nhiên ở giữa Chọn phần tử DOM khi xuất một ngày ... bạn có thể làm gì với nó chính xác?

Để loại bỏ các dấu phẩy và bất kỳ dấu phân cách khác bạn có thể vượt qua trong qua các tùy chọn:

"render_delimiters": false 

Mà tôi nghĩ phải là sai lầm theo mặc định

0

Như Sam đề cập đến bạn chỉ có thể cập nhật các thiết lập miền địa phương trong của bạn php.ini

Ví dụ: tôi có trong php của tôi.ini

intl.default_locale = en_gb

này định dạng các yếu tố DateSelect theo định dạng ngày/tháng/năm cần thiết cho dự án Anh của tôi.

Các vấn đề liên quan