Theo tôi được biết, bạn muốn sử dụng chỉ form_widget (theo mẫu) trong mẫu thức.
Hãy giả sử chúng ta có hai mô hình di truyền (ModelA, ModelB) và các loại hình thức cho họ (ModelAType, ModelBType)
class ModelA {
private $A;
private $B;
// Getters and setters
}
class ModelB extends ModelA {
private $C;
// Getters and setters
}
/**
* @DI\Service(id = "form.type.modelA")
* @DI\Tag("form.type", attributes={ "alias":"model_a_type" })
*/
class FormAType extends AbstractType {
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('A')
->add('B')
;
}
// getName and so on
}
/**
* @DI\Service(id = "form.type.modelA")
* @DI\Tag("form.type", attributes={ "alias":"model_b_type" })
*/
class FormAType extends AbstractType {
public function getParent() {
return "model_a_type";
}
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('C')
;
}
// getName and so on
}
Nếu bạn render formB, bạn sẽ nhận được A, B, C theo thứ tự, nhưng bạn muốn A, C, B. Để thực hiện điều đó, hãy tạo mẫu biểu mẫu và thêm tham chiếu đến ứng dụng. tệp cấu hình:
#app/config/config.yml
twig:
....
form:
resources:
- YourAppBundle:Form:fields.html.twig
{# src/YourAppBundle/Resources/views/Form/fields.html.twig #}
{% block model_a_type_widget %}
{{ form_widget(form.A) }}
{{ form_widget(form.B) }}
{% endblock model_a_type_widget %}
{% block model_b_type_widget %}
{{ form_widget(form.A) }}
{{ form_widget(form.C) }}
{{ block('model_a_type_widget') }}
{% endblock model_b_type_widget %}
Bây giờ, khi bạn tạo biểu mẫu B, bạn sẽ thấy thứ tự mong muốn và giữ mã được cấu trúc. Điều này xảy ra bởi vì mọi tiện ích chỉ hiển thị một lần, vì vậy nếu bạn hiển thị nó trước khi gọi khối chính, bạn sẽ thay đổi thứ tự của chúng.
Cảm ơn bạn, nhưng điều đó là không thể. Chúng ta có một cấu trúc rất phức tạp và cần hàm form_widget (form), vì vậy chúng ta phải làm điều này trong backend! – snirgel
Bạn đã thử thêm các trường vào cá thể 'FormBuilder' theo thứ tự mong muốn chưa? –
Thats không thể. Chúng tôi có vòng khoảng 80 loại đối tượng với dependencys, thừa kế và như vậy, vì vậy chúng tôi KHÔNG THỂ thao túng những thứ như vậy bằng tay .... – snirgel