Saya bekerja dengan Symfony 3.4. Asumsikan ada entitas Task dengan beberapa properti, mis. title, note, dll.

Saat membuat FormType kustom untuk memungkinkan pengguna membuat entitas Task baru, setiap properti entitas biasanya ditambahkan menggunakan nama internalnya:

class TaskType extends AbstractMoneyControlBaseType { 
    public function getBlockPrefix() {
        return 'app_task';
    }

    public function buildForm(FormBuilderInterface $builder, array $options) {
        $builder
            ->add('title', TextType::class, [
                'label' => 'The Title'
            ])        
            ->add('note', TextType::class, [
                'label' => 'A Note'
            ]);

        ...
    }
}

Ini akan membuat bidang formulir dengan nama seperti app_task[title] dan app_task[note]. Apakah mungkin menggunakan nama khusus sebagai gantinya?

Tentu, Symfony menggunakan properti mengidentifikasi dan memetakan input ke entitas. Namun, tidak sulit untuk menentukan nama yang berbeda dengan memetakan bidang ke nama yang berbeda atau sebaliknya dengan memetakan nama bidang ke properti entitas.

Sesuatu seperti ini:

$builder
    ->add('title', TextType::class, [
        'label' => 'The Title',
        'renderedName' => 'customTitleName',
    ])        
    ->add('note', TextType::class, [
        'label' => 'A Note'
        'renderedName' => 'customNoteName',
    ]);

OR

$builder
    ->add('customTitleName', TextType::class, [
        'label' => 'The Title',
        'mappedFieldName' => 'title',
    ])        
    ->add('customNoteName', TextType::class, [
        'label' => 'A Note'
        'mappedFieldName' => 'note',
    ]);

Saya tidak dapat menemukan solusi seperti itu. Jadi, apakah mungkin menggunakan nama bidang khusus?

-1
Andrei Herford 19 November 2020, 19:58

1 menjawab

Jawaban Terbaik

Solusi yang mungkin adalah menggunakan property-path

$builder
    ->add('customTitleName', TextType::class, [
        'label' => 'The Title',
        'property_path' => 'title',
        'renderedName' => 'customTitleName',
    ])        
    ->add('note', TextType::class, [
        'label' => 'A Note'
        'renderedName' => 'customNoteName',
    ]);
0
Urmat Zhenaliev 19 November 2020, 18:03