2012-05-27 30 views
9

Tôi có thể làm điều này với Javascript, nhưng tôi tự hỏi liệu tôi có thể thêm một lớp css vào các lựa chọn biểu mẫu symfony2 cụ thể (không phải là trường lựa chọn, nhưng các lựa chọn riêng lẻ).Làm cách nào để thêm các lớp css vào các lựa chọn biểu mẫu symfony2 cụ thể?

Ví dụ: tôi muốn áp dụng các kiểu css khác nhau cho các thẻ 'tùy chọn' riêng lẻ bên trong 'chọn'. Tôi chỉ có thể tìm cách thêm lớp vào thẻ.

Xin cảm ơn trước.

Trả lời

4

Bạn có thể ghi đè bố cục của các tiện ích cụ thể trong biểu mẫu, điều này có nghĩa là bạn có thể ghi đè cách thức hiển thị và đặt mã tùy chỉnh để kiểm tra giá trị của tùy chọn là gì và xuất lớp tùy chỉnh của bạn ở đó.

Bạn cần phải áp dụng một cách bố trí tùy chỉnh mẫu của bạn, như vậy

{% form_theme form 'form_theme.html.twig' %} 

Sau đó, bên trong bố trí tập tin bạn cần phải ghi đè lên các lĩnh vực cụ thể cho rằng hình thức cụ thể (tất nhiên trừ khi bạn muốn chỉnh sửa các choice_widget trực tiếp trong trường hợp đó tất cả các trường sử dụng lựa chọn sẽ có chức năng).

Để làm điều đó bạn phải sao chép các widget, vì vậy choice_widget, sau đó đặt tên cho nó [_formName_fieldName_widget]

Vì vậy, nếu tên hình thức của bạn là sự kiện và tên trường của bạn là requireTickets, nó muốn được _events_requireTickets_widget

+0

Cảm ơn bạn, tôi không cần tên lớp để áp dụng các kiểu cụ thể, nhưng một vài plugin jQuery phụ thuộc vào các trường

10

Tôi nghĩ bạn chỉ cần làm:

{{ form_widget(form.name, { 'attr' : { 'class' : 'myClass' } }) }} 

... như được giải thích here, mà không tạo kiểu biểu mẫu của riêng bạn.

+0

... hoặc bạn chỉ cần bọc form_widget với ví dụ như thẻ div và gán thuộc tính cho nó. –

+6

Điều này sẽ thêm thẻ vào lựa chọn và có thể cho các tùy chọn nhưng nó sẽ không cho phép bạn áp dụng các lớp học cho các tùy chọn riêng lẻ. – CriticalImpact

+0

@CriticalImpact bạn nói đúng, vì vậy OP nên tạo kiểu tùy chỉnh. – gremo

4

Câu trả lời đã được cung cấp rất tốt và tôi nghĩ rằng @ CriticalImpact là linh hoạt nhất. Nhưng tôi chỉ muốn đề cập rằng nếu bạn đang sử dụng một lớp biểu mẫu, bạn cũng có thể thêm các thuộc tính thêm vào lĩnh vực này thông qua các định nghĩa hình thức xây dựng bản thân:

class SomeType extends AbstractType 
{ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder 
      ->add('someField', "text", array("attr" => array("class" => "someCssClass"))) 
      ->add("save", "submit"); 
    } 
} 

Tôi đã thấy điều này hữu ích cho các loại hình cơ bản, bởi vì nó vẫn cho phép bạn thực hiện cuộc gọi {{ form(someForm) }} đơn giản trong tệp Twig của bạn.

(Lưu ý rằng giải pháp này vẫn có nhược điểm mà @CriticalImpact nêu above)

0

Thêm các thuộc tính như kiểu CSS để lựa chọn cá nhân ngày nay có thể đạt được với choice_attr, ví dụ:

use Symfony\Component\Form\Extension\Core\Type\ChoiceType; 
// ... 

$builder->add('attending', ChoiceType::class, array(
    'choices' => array(
     'Yes' => true, 
     'No' => false, 
     'Maybe' => null, 
    ), 
    'choice_attr' => function($val, $key, $index) { 
     // adds a class like attending_yes, attending_no, etc 
     return ['class' => 'attending_'.strtolower($key)]; 
    }, 
)); 
Các vấn đề liên quan