2013-07-03 36 views
9

1) Có phương thức symfony không?Symfony 2: Nhận các lựa chọn có sẵn của một sự lựa chọn Kiểu trường

Tôi đã có một hình thức cơ bản (không phải ánh xạ tới cơ sở dữ liệu), với một số lĩnh vực lựa chọn, ví dụ:

$builder->add('civility', 'choice', array('choices'=> array('m' => 'M.', 'mme' => 'Mme', 'mlle' => 'Mlle'))) 

Làm thế nào tôi có thể - sau khi các hình thức được đệ trình - trong hành động (hoặc , thậm chí tốt hơn, trong khuôn mẫu), lấy giá trị nhãn của tùy chọn thay vì giá trị gửi biểu mẫu? (Trong trường hợp này, Tôi muốn để có thể làm cho "M." trong mẫu thay vì "m")

Tôi đã suy nghĩ về một cái gì đó giống như $form->get("civility")->getChoiceLabel($form->get("civility")->getData())

Nhưng tôi không tìm thấy bất cứ điều gì như thế này trong tài liệu (mặc dù có một cái gì đó như thế trong Symfony1).

2) Nếu thực sự không, cách tốt nhất để làm cho nó là gì?

Vì vậy, tôi đã suy nghĩ về việc tạo ra một số phương pháp để làm điều đó, trong lớp dữ liệu được sử dụng bởi các hình thức, như ..:

private $choices = array("civility" => array('m' => 'M.', 'mme' => 'Mme', 'mlle' => 'Mlle')); 
static public function getChoiceLabel($choice_value, $field_name) 
{ 
    return self::$choices[$field_name][$choice_value]; 
} 

static public function getChoices($field_name) 
{ 
    return self::$choices[$field_name]; 
} 

Nhưng vấn đề là chúng ta đang không được phép sử dụng các phương thức tĩnh trong khuôn mẫu twig (tôi phải làm cho nó tĩnh để có thể sử dụng nó trong việc tạo biểu mẫu, phương thức buildForm và không trùng lặp một số mã).

+0

Khi bạn in '$ hình thức [ 'văn minh']' bạn không thể tìm thấy các nhãn bạn đang tìm kiếm ? Hãy thử in trường trước và sau khi gọi 'createView' trên' $ form' –

Trả lời

12

Bạn có thể truy cập vào choses nhãn và giá trị của họ như thế này:

$form->get('civility')->getConfig()->getOption('choices'); 

Read more: Symfony\Component\Form\FormConfigInterface::getOption()

+0

Hoàn hảo, đó chính xác là những gì tôi đang tìm kiếm! Thật khó để tìm thấy trong tài liệu, ngay cả trong API .. Làm thế nào để yo thường tìm thấy những thứ như thế? – Bonswouar

+0

Tính năng tự động hoàn thành trong IDE của tôi (phpstorm). Tôi chỉ tìm tất cả các phương pháp cho lớp đó và tìm thấy những gì tôi cần. Và tài liệu API ofcourse giúp tôi đôi khi quá. – Hast

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