2011-11-04 50 views
11

Tôi đang sử dụng Symfony2 và CraueFormFlowBundle để tạo biểu mẫu nhiều bước. Mọi thứ diễn ra tốt đẹp ngoại trừ trường email được lặp lại của tôi. Tôi không thể, vì lợi ích của tôi, tìm cách đặt các nhãn tôi muốn. Tôi tự vẽ biểu mẫu trong khung nhìn Twig bằng form_widget (...) và viết các nhãn. Tôi định vị mọi thứ theo những gì khách hàng của tôi muốn. Bây giờ, anh ta muốn xem các nhãn email là "E-mail *" và "Xác nhận e-mail *" (các ngôi sao vì chúng được yêu cầu). Nếu tôi render các phần tử lặp lại bằng form_row(), các lỗi sẽ không được hiển thị nữa trên biểu mẫu (nhưng tôi có quyền kiểm soát nhãn, snap). Cách duy nhất để các lỗi được hiển thị (không hỏi tôi tại sao), là bằng cách sử dụng form_widget (form.giver.email) trỏ đến toàn bộ đối tượng phần tử lặp đi lặp lại. Vấn đề là, bằng cách sử dụng form_widget để hiển thị toàn bộ phần tử lặp lại cho phép tôi không kiểm soát nhãn.Biểu mẫu nhãn tùy chỉnh phần tử biểu mẫu Symfony2

Bằng cách hiển thị toàn bộ phần tử lặp lại, nó in nhãn bằng cách sử dụng tham số "first_name" và "second_name". Tôi không thể đặt các chữ in hoa cũng như dấu gạch ngang hay dấu sao trong các tham số này vì những lý do rõ ràng. Nếu tôi cố gắng đặt nhãn trong mảng tùy chọn, nhãn đó được chuyển đến cả hai trường như được mô tả trong tài liệu Symfony2 ...

Tôi đã thử in bằng cách sử dụng ".first" và ".second" trong cành, nhưng Tôi nhận được một lỗi nói rằng những điều này không tồn tại trong FormView.

Bây giờ tất cả những gì tôi muốn là có thể đặt hai nhãn riêng biệt! Đây là mã hiện tại của tôi:

$builder->add('email', 'repeated', array(
     'type' => 'email', 
     'first_name' => 'email', 
     'second_name' => 'confirm', 
     'invalid_message' => 'The e-mails you provided did not match.', 
     'error_bubbling' => false 
    )); 

Điều này in nhãn là "email" và "xác nhận". Dưới đây là sử dụng mảng "tùy chọn":

$builder->add('email', 'repeated', array(
     'type' => 'email', 
     'first_name' => 'email', 
     'second_name' => 'confirm', 
     'invalid_message' => 'The e-mails you provided did not match.', 
     'error_bubbling' => false, 
     'options' => array(
      'label' => "TESTTT" 
     ), 
    )); 

Điều này sẽ in nhãn "TESTTT" cho cả hai trường lặp lại. Tôi có thể làm được gì không? Như đã đề cập ở trên, việc sử dụng form_row() không hiển thị các lỗi khi gửi biểu mẫu nếu các email không bằng nhau hoặc nếu chúng trống. Vì vậy, tôi bị ràng buộc để sử dụng form_widget() và hiển thị toàn bộ đối tượng lặp đi lặp lại.

Cảm ơn trước về thời gian của bạn.

Trả lời

5

Sử dụng

$formView->getChild('passwordFieldName')->getChild('second')->set('label', 'Enter password again'); 
+4

Nếu ai làm việc trong' FormBuilder' (hoặc Mẫu Các loại) cú pháp sẽ là '$ formBuilder-> get ('passwordFieldName') -> get ('second') -> setAttribute ('label', 'Enter password again');' – Nick

0

Thử thêm tên trường và nhãn trong tệp bản dịch? Ví dụ: CraueFormFlowBundle.en.yml

6
{{ form_label(form.password.confirmpassword, 'Confirm Password') }} 
-1

Bất cứ ai cũng thắc mắc tại sao tùy repated hình thức đầu vào không hoạt động, kiểm tra này:

$builder->add('username', 'text') 
      ->add('email', 'email') 
      ->add('password', 'repeated'); 

sẽ cung cấp cho bạn "đầu tiên" và mật khẩu "thứ hai", có thể được gọi theo:

{{ form_errors(form.password.first) }} 
{{ form_widget(form.password.first) }} 
{{ form_label(form.password.first) }} 

{{ form_errors(form.password.second) }} 
{{ form_widget(form.password.second) }} 
{{ form_label(form.password.second) }} 

Nhưng điều này:

$builder->add('username', 'text') 
      ->add('email', 'email') 
      ->add('password', 'repeated', 
      array('type' => 'password', 
       'first_name'=>'Password', 
       'second_name' =>'Confirm password')); 

KHÔNG !!!

2
$builder->add('username', 'text') 
      ->add('email', 'email') 
      ->add('password', 'repeated', 
      array('type' => 'password', 
       'first_name'=>'Password', 
       'second_name' =>'Confirm password')); 

là không chính xác, tốt hơn thử

$builder->add('username', 'text') 
      ->add('email', 'email') 
      ->add('password', 'repeated', 
      array('type' => 'password', 
       'first_name'=>'first', 
       'second_name' =>'second')); 

và bạn sẽ có thể sử dụng:

{{ form_errors(form.password.first) }} 
{{ form_widget(form.password.first) }} 
{{ form_label(form.password.first) }} 

{{ form_errors(form.password.second) }} 
{{ form_widget(form.password.second) }} 
{{ form_label(form.password.second) }} 
11

Có dễ dàng hơn và đúng cách:

->add('plainPassword', 'repeated', array(
    'type' => 'password', 
    'invalid_message' => "some.error.message", 
    'first_name' => 'somecoorectname', // (optional). 'first' value by default. 
    'first_options' => array(
     'label' => 'label.for.future.translate' // Custom label for element 
    ) 
    /* 
     The same way for Second field 
    */ 
)) 

Thưởng thức !

+0

Điều này không làm phiền k với Symfony2.0. Nó nằm trong nhánh master (> = 2.1?) Nhưng không nằm trong nhánh 2.0. – flu

+1

Có, tính năng này chỉ hoạt động với Symfony 2.1. Phương pháp khác được đề cập trong câu trả lời được chấp nhận không hoạt động nữa trong 2.1. – smoove

+0

tuyệt vời, nó hoạt động như một sự quyến rũ! Mã của tôi: $ builder-> add ('password', 'repeat', mảng ( 'type' => 'password', 'first_name' => "mật khẩu", 'second_name' => "confirmpass" , 'invalid_message' => "mật khẩu không khớp", 'first_options' => mảng ('nhãn' => 'mật khẩu'), 'second_options' => mảng ('label' => 'lặp lại mật khẩu'))); – thorinkor

4

Ví dụ sau đây phù hợp với tôi.

  • đây 'loại' tuyên bố:

    $builder->add('username', 'text') 
         ->add('email', 'email') 
         ->add('password', 'repeated', 
         array('type' => 'password')); 
    
  • Và đây của cành lá 'sử dụng

    {{ form_errors(form.password.first) }} 
    {{ form_widget(form.password.first) }} 
    {{ form_label(form.password.first, 'Password') }} 
    
    {{ form_errors(form.password.second) }} 
    {{ form_widget(form.password.second) }} 
    {{ form_label(form.password.second, 'Confirm password') }} 
    
Các vấn đề liên quan