2012-07-05 28 views
6

Tôi có tình huống sau đây:Symfony2: Làm thế nào để sửa đổi một giá trị hình thức trước khi xác nhận

  • một loại trường mẫu date
  • một mẫu xác nhận như dd.mm.YYYY
  • một đối tượng helper có thể biến 12 vào 12.07.2012 hoặc 2.5 vào 02.05.2012 v.v.

Câu hỏi của tôi là: Tôi gọi phương thức chuyển đổi giá trị đầu vào ở đâu?

Khi tôi gọi từ số set -method của thực thể, giá trị thực sự bị thay đổi. Nhưng khi tải lại biểu mẫu (ví dụ: không gửi đầy đủ) giá trị cũ (như 2.5) và không thay đổi giá trị (2.5.2012) được hiển thị. Bây giờ, làm thế nào để tôi nói với biểu mẫu, rằng giá trị đã thay đổi trong thực thể?

Có lẽ đó cũng là một cách khác để làm việc đó ở giữa:

$form->bindRequest($request); 
// do some fancy stuff here 
if ($form->isValid()) {} 

PHP

Đây là từ Entity:

/** 
* @ORM\Column(type="datetime", nullable=true) 
* @Assert\DateTime() 
*/ 
protected $date_start; 

Đây là từ Nhập:

$builder->add('date_start', 'datetime', array(
    'label' => 'Start Datum/Uhrzeit', 
    'date_widget' => 'single_text', 
    'time_widget' => 'single_text', 
    'date_format' => 'dd.MM.yyyy', 
    'with_seconds' => false, 
    'required' => false, 
)); 
+0

Tôi đã đăng câu trả lời dưới đây nhưng nếu bạn cần thêm chi tiết, vui lòng đăng mã cho loại biểu mẫu của bạn và mô hình và tôi có thể cụ thể hơn. – MDrollette

Trả lời

11

Có hai cách để sửa đổi biểu mẫu và dữ liệu được liên kết với chúng. Bạn có thể sử dụng các sự kiện biểu mẫu, có một ví dụ về việc sử dụng biểu mẫu của họ here hoặc bạn có thể sử dụng một DataTransformer được giải thích here

Từ âm thanh của trường hợp của bạn, tôi nghĩ một DataTransformer có ý nghĩa nhất. Bạn đang đại diện cho dữ liệu trong đối tượng theo một cách nhưng bạn cần trình bày nó trong biểu mẫu theo một cách khác và ngược lại biến đổi khi biểu mẫu được gửi. Đây là mục đích của DataTransformer.

+0

Rất cám ơn, 'DataTransformer' dường như chính xác, những gì tôi đang tìm kiếm. – insertusernamehere

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