Bagaimana cara menetapkan nilai default untuk bidang formulir di Symfony2?

137

Apakah ada cara mudah untuk menetapkan nilai default untuk bidang formulir teks?

Ondrej Slinták
sumber
1
ya, tetapi jawaban yang diberikan dalam pertanyaan ini tidak memuaskan / tidak berfungsi ... Saya akan menambahkan "Sunting" untuk menjelaskan mengapa :-)
herrjeh42
Tampaknya solusi 'sempurna' yang Anda cari adalah sebuah bidang memiliki opsi 'default_value'. Masalahnya, saat ini tidak , jadi saya tidak berpikir solusi sempurna yang Anda cari saat ini ada. Satu-satunya yang disediakan symfony (lihat tautan) adalah opsi data. Jadi jika-maka adalah satu-satunya pendekatan yang bisa saya lihat atm. Bahkan jika ada opsi 'default_value' di lapangan itu sendiri, saya membayangkan itu pada dasarnya akan melakukan hal yang sama secara internal.
crysallus
Juga, saya telah melakukan koreksi terhadap jawaban saya dalam pendekatan 2 sesuai komentar saya di bawahnya. Jika itu memperbaiki masalah sintaks yang Anda sebutkan di poin 2, Anda mungkin ingin mengedit komentar itu. Atau beri tahu saya apa masalahnya, dan saya akan memperbaiki jawaban saya.
crysallus
1
@Crone pertanyaan ini ditanyakan 2 tahun sebelumnya
Ondrej Slinták
1
@ OndrejSlinták Saya tidak memilih untuk menutup sebagai dupe, tetapi FYI: tidak masalah mana yang lebih dulu, " Jika pertanyaan baru adalah pertanyaan yang lebih baik atau memiliki jawaban yang lebih baik, maka pilih untuk menutup yang lama sebagai duplikat dari yang baru. "
Jeff Puckett 5-16

Jawaban:

105

Dapat digunakan selama pembuatan dengan mudah dengan:

->add('myfield', 'text', array(
     'label' => 'Field',
     'empty_data' => 'Default value'
))
webda2l
sumber
11
Untuk Symfony 2.1 saya perlu mengubah 'data'kunci untuk'value'
Edd
175
Ini tidak hanya menetapkan nilai default, itu juga akan selalu memaksa nilai dalam konteks apa pun. Bukan apa yang saya sebut "nilai default" ...
Hubert Perron
4
Saya downvoted solusi ini karena ini bukan solusi untuk masalah (seperti Hubert Perron disebutkan di atas). Saya mencoba untuk mendapatkan solusi yang lebih baik dalam posting ini stackoverflow.com/questions/17986481/…
herrjeh42
13
Ini adalah nilai awal, nilai default-nyaempty_data
Pierre de LESPINAY
3
datatidak berguna - itu menimpa nilai yang disimpan. empty_datatidak menunjukkan nilainya, ia menggunakannya pada nilai kosong yang dikirimkan dan membuatnya tidak mungkin untuk menyimpan pilihan yang tidak dicentang.
Moldcraft
115

Anda dapat mengatur nilai default dengan empty_data

$builder->add('myField', 'number', ['empty_data' => 'Default value'])
rkmax
sumber
29
Pengaturan data tidak menetapkan standar. Jawaban ini adalah yang benar.
Alexei Tenitski
9
Tampaknya ini hanya mengatur bidang ke 1 bila dikirimkan tanpa nilai. Bagaimana dengan ketika Anda ingin form secara default menampilkan 1 pada input ketika tidak ada nilai?
Brian
Dalam pengujian saya empty_data tidak memungkinkan saya untuk mengganti nilai default dari bidang yang dikirim kosong, misalnya jika Anda ingin menyimpan ke database sebagai 0 bukan NULL. Bug ini masih luar biasa sejauh yang saya tahu: github.com/symfony/symfony/issues/5906
Chadwick Meyer
63

Saya telah merenungkan ini beberapa kali di masa lalu jadi saya pikir saya akan menuliskan berbagai ide yang saya miliki / gunakan. Sesuatu mungkin berguna, tetapi tidak ada solusi Symfony2 "sempurna".

Konstruktor Dalam Entitas Anda dapat melakukan $ this-> setBar ('nilai default'); tetapi ini disebut setiap kali Anda memuat entitas (db atau tidak) dan agak berantakan. Namun itu berfungsi untuk setiap jenis bidang karena Anda dapat membuat tanggal atau apa pun yang Anda butuhkan.

Jika pernyataan dalam get's saya tidak akan, tetapi Anda bisa.

return ( ! $this->hasFoo() ) ? 'default' : $this->foo;

Pabrik / contoh . Panggil fungsi statis / kelas sekunder yang memberi Anda Entitas default yang diisi sebelumnya dengan data. Misalnya

function getFactory() {
    $obj = new static();
    $obj->setBar('foo');
    $obj->setFoo('bar');

   return $obj;
}

Tidak terlalu ideal mengingat Anda harus mempertahankan fungsi ini jika Anda menambahkan bidang tambahan, tetapi itu berarti Anda memisahkan seter data / default dan apa yang dihasilkan dari db. Demikian pula Anda dapat memiliki beberapa getFactories jika Anda menginginkan data standar yang berbeda.

Entitas Extended / Refleksi Membuat Entitas yang diperluas (mis. FooCreate extends Foo) yang memberi Anda data default pada waktu pembuatan (melalui konstruktor). Mirip dengan ide Pabrik / contoh hanya pendekatan yang berbeda - Saya lebih suka metode statis secara pribadi.

Setel Data sebelum membangun formulir Di konstruktor / layanan, Anda tahu apakah Anda memiliki entitas baru atau jika itu diisi dari db. Oleh karena itu masuk akal untuk memanggil data yang diset pada bidang yang berbeda saat Anda mengambil entitas baru. Misalnya

if( ! $entity->isFromDB() ) {
     $entity->setBar('default');
     $entity->setDate( date('Y-m-d');
     ...
}
$form = $this->createForm(...)

Formulir Acara Saat Anda membuat formulir, Anda menetapkan data default saat membuat bidang. Anda menimpa ini menggunakan pendengar acara PreSetData. Masalah dengan ini adalah bahwa Anda menduplikasi formulir beban kerja / duplikasi kode dan membuatnya lebih sulit untuk dipertahankan / dipahami.

Formulir yang diperluas Mirip dengan Formulir acara, tetapi Anda memanggil jenis yang berbeda tergantung pada apakah itu db / entitas baru. Maksud saya, Anda memiliki FooType yang mendefinisikan formulir edit Anda, BarType memperluas FooType ini dan menyetel semua data ke bidang. Di controller Anda, Anda cukup memilih tipe formulir yang ingin dihasut. Ini menyebalkan jika Anda memiliki tema khusus dan suka acara, membuat terlalu banyak pemeliharaan sesuai dengan keinginan saya.

Ranting Anda dapat membuat tema Anda sendiri dan default data menggunakan opsi nilai juga ketika Anda melakukannya berdasarkan per-bidang. Tidak ada yang menghentikan Anda membungkus ini menjadi tema formulir baik Anda ingin menjaga template Anda bersih dan formulir dapat digunakan kembali. misalnya

form_widget(form.foo, {attr: { value : default } });

JS Akan sepele untuk mengisi formulir dengan fungsi JS jika bidang kosong. Anda dapat melakukan sesuatu dengan placeholder misalnya. Tapi ini ide yang buruk.

Formulir sebagai layanan Untuk salah satu proyek berbasis formulir besar yang saya lakukan, saya membuat layanan yang menghasilkan semua formulir, melakukan semua pemrosesan, dll. Ini karena formulir akan digunakan di beberapa pengontrol di beberapa lingkungan dan sementara formulir dihasilkan / ditangani dengan cara yang sama, mereka ditampilkan / berinteraksi dengan berbeda (misalnya penanganan kesalahan, pengalihan dll). Keindahan dari pendekatan ini adalah bahwa Anda dapat mengatur data secara default, melakukan semua yang Anda butuhkan, menangani kesalahan secara umum, dll, dan semuanya dienkapsulasi di satu tempat.

Kesimpulan Seperti yang saya lihat, Anda akan mengalami masalah yang sama berulang kali - di mana data default untuk hidup?

  • Jika Anda menyimpannya di tingkat db / doktrin apa yang terjadi jika Anda tidak ingin menyimpan default setiap saat?
  • Jika Anda menyimpannya di tingkat Entitas apa yang terjadi jika Anda ingin menggunakan kembali entitas itu di tempat lain tanpa data di dalamnya?
  • Jika Anda menyimpannya di Entity Level dan menambahkan bidang baru, apakah Anda ingin versi sebelumnya memiliki nilai default saat mengedit? Sama berlaku untuk default di DB ...
  • Jika Anda menyimpannya di tingkat formulir, apakah itu jelas ketika Anda datang untuk mempertahankan kode nanti?
  • Jika ada di konstruktor, apa yang terjadi jika Anda menggunakan formulir di banyak tempat?
  • Jika Anda mendorongnya ke level JS maka Anda telah melangkah terlalu jauh - data seharusnya tidak ada dalam pandangan apalagi JS (dan kami mengabaikan kompatibilitas, rendering kesalahan, dll)
  • Layanan ini hebat jika seperti saya Anda menggunakannya di banyak tempat, tetapi itu berlebihan untuk formulir tambah / sunting sederhana di satu situs ...

Untuk itu, saya sudah mendekati masalah secara berbeda setiap kali. Misalnya, opsi formulir "buletin" pendaftaran mudah (dan secara logis) disetel di konstruktor sebelum membuat formulir. Ketika saya sedang membangun koleksi formulir yang ditautkan bersama (mis. Tombol radio mana dalam berbagai jenis formulir ditautkan bersama) maka saya telah menggunakan Pendengar Acara. Ketika saya telah membangun entitas yang lebih rumit (misalnya entitas yang membutuhkan anak-anak atau banyak data yang gagal) saya telah menggunakan fungsi (misalnya 'getFactory') untuk membuat elemen itu sesuai kebutuhan saya.

Saya tidak berpikir ada satu pendekatan "benar" karena setiap kali saya memiliki persyaratan ini sudah sedikit berbeda.

Semoga berhasil! Saya harap saya telah memberi Anda beberapa makanan untuk dipikirkan dan tidak mengoceh terlalu banyak;)

stefancarlton
sumber
dapatkah Anda memberikan sedikit lebih detail tentang apa yang Anda maksud tentang 'layanan yang menghasilkan semua bentuk'? Saya juga sedang mengerjakan proyek yang benar-benar berpusat pada bentuk saat ini dan akan bagus jika memiliki perspektif yang berbeda tentang itu.
user2268997
2
saat menggunakan doktrin, konstruktor tidak dipanggil ketika suatu entitas dimuat dari db.
NDM
43

Jika Anda perlu menetapkan nilai default dan formulir Anda terkait dengan entitas, maka Anda harus menggunakan pendekatan berikut:

// buildForm() method
public function buildForm(FormBuilderInterface $builder, array $options) {
    $builder
    ...
    ->add(
        'myField',
        'text',
        array(
            'data' => isset($options['data']) ? $options['data']->getMyField() : 'my default value'
        )
    );
}

Jika tidak, myFieldselalu akan ditetapkan ke nilai default, alih-alih mendapatkan nilai dari entitas.

Dmitriy
sumber
Dalam hal array bukan entitas, ganti saja $options['data']->getMyField()dengan$option['data']['myField']
ggg
3
Ini adalah cara yang tepat untuk menambah / memperbarui, saya pikir. Tapi aku benci Symfony membuatnya terlalu rumit.
Yarco
Ini satu-satunya jawaban yang bagus. Saya tidak mengerti jawaban lain ketika saya melihat dokumen. empty_data: Opsi ini menentukan nilai apa yang akan dikembalikan bidang ketika nilai yang dikirimkan kosong. Itu tidak menetapkan nilai awal
Vincent Decaux
16

Jika formulir Anda terikat pada suatu entitas, cukup atur nilai default pada entitas itu sendiri menggunakan metode konstruk:

public function __construct()
{
    $this->field = 'default value';
}
Hubert Perron
sumber
Meski begitu, formulir Anda dapat memiliki bidang tambahan yang tidak dipetakan ke entitas Anda ( 'mapped' => false). Gunakan setData(...)untuk ini.
Dizzley
12

Pendekatan 1 (dari http://www.cranespud.com/blog/dead-simple-default-values-on-symfony2-forms/ )

Cukup setel nilai default di entitas Anda, baik dalam deklarasi variabel atau konstruktor:

class Entity {
    private $color = '#0000FF';
    ...
}

atau

class Entity {
    private $color;

    public function __construct(){
         $this->color = '#0000FF';
         ...
    }
    ...
}

Pendekatan 2 dari komentar di tautan di atas, dan juga jawaban Dmitriy (bukan yang diterima) dari Cara mengatur nilai default untuk bidang formulir di Symfony2?

Tambahkan nilai default ke atribut data saat menambahkan bidang dengan FormBuilder, diadaptasi dari jawaban Dmitriy.

Perhatikan bahwa ini mengasumsikan bahwa properti akan dan hanya akan memiliki nilai nol ketika itu adalah entitas yang baru, dan bukan yang sudah ada.

public function buildForm(FormBuilderInterface $builder, array $options) {
    $builder->add('color', 'text', array(
            'label' => 'Color:',
            'data' => (isset($options['data']) && $options['data']->getColor() !== null) ? $options['data']->getColor() : '#0000FF'
        )
    );
}
crysallus
sumber
Yang pertama berfungsi (terima kasih!), Yang kedua tidak (untuk saya): $ options ["data] selalu diset, jadi nilai default tidak akan pernah digunakan. Saya masih bertanya-tanya apakah solusi nomor 1 adalah cara yang dimaksudkan untuk melakukannya ...
herrjeh42
Anda benar tentang $ options ['data'] yang selalu disetel. Jika Anda tidak menginisialisasi bidang entitas, Anda bisa menguji nol pada bidang itu, misalnya. 'data' => $ options ['data'] -> getColor ()! == null? dll ... Itu mengasumsikan bahwa null bukan nilai yang valid untuk bidang warna, sehingga entitas yang ada tidak akan pernah memiliki nilai nol untuk bidang itu.
crysallus
ah, bodoh saya: Saya mencobanya dengan 'isset ($ $ options [' data '] -> getColor ())', saya mendapat pesan kesalahan tentang "menggunakannya dalam konteks penulisan tidak diperbolehkan" dan lupa bahwa saya harus periksa berbeda :-)
herrjeh42
1
Sebenarnya sepertinya ada saat-saat ketika entri data tidak diatur. Lebih aman untuk menguji keduanya, yaitu isset ($ options ['data']) && $ options ['data'] -> getColor ()! == null? ...
crysallus
9

Anda dapat menetapkan nilai default, misalnya untuk formulir message, seperti ini:

$defaultData = array('message' => 'Type your message here');
$form = $this->createFormBuilder($defaultData)
    ->add('name', 'text')
    ->add('email', 'email')
    ->add('message', 'textarea')
    ->add('send', 'submit')
    ->getForm();

Jika formulir Anda dipetakan ke Entitas, Anda bisa seperti ini (mis. Nama pengguna default):

$user = new User();
$user->setUsername('John Doe');

$form = $this->createFormBuilder($user)
    ->add('username')
    ->getForm();
Gottlieb Notschnabel
sumber
2
Saya lebih suka metode ini, terutama karena di sebagian besar aplikasi Anda membuat formulir dan mengirimkan entitas yang berhubungan dengan formulir.
terlatih
9

Solusi umum untuk setiap kasus / pendekatan, terutama dengan menggunakan formulir tanpa kelas atau ketika kita membutuhkan akses ke layanan apa pun untuk menetapkan nilai default:

// src/Form/Extension/DefaultFormTypeExtension.php

class DefaultFormTypeExtension extends AbstractTypeExtension
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        if (null !== $options['default']) {
            $builder->addEventListener(
                FormEvents::PRE_SET_DATA,
                function (FormEvent $event) use ($options) {
                    if (null === $event->getData()) {
                        $event->setData($options['default']);
                    }
                }
            );
        }
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefault('default', null);
    }

    public function getExtendedType()
    {
        return FormType::class;
    }
}

dan daftarkan ekstensi formulir:

app.form_type_extension:
    class: App\Form\Extension\DefaultFormTypeExtension
    tags:
        - { name: form.type_extension, extended_type: Symfony\Component\Form\Extension\Core\Type\FormType }

Setelah itu, kita dapat menggunakan defaultopsi di bidang formulir apa pun:

$formBuilder->add('user', null, array('default' => $this->getUser()));
$formBuilder->add('foo', null, array('default' => 'bar'));
yceruto
sumber
Ini seharusnya diterima sebagai jawaban terbaik (terkini)
medunes
7

Jangan gunakan:

'data' => 'Default value'

Baca di sini: https://symfony.com/doc/current/reference/forms/types/form.html#data

"Opsi data selalu mengesampingkan nilai yang diambil dari data domain (objek) saat rendering. Ini berarti nilai objek juga ditimpa ketika formulir mengedit objek yang sudah ada, menyebabkannya kehilangan nilai tetapnya ketika formulir dikirimkan."


Gunakan yang berikut ini:

Katakanlah, untuk contoh ini, Anda memiliki Entity Foo, dan ada bidang "aktif" (dalam contoh ini adalah CheckBoxType, tetapi prosesnya sama untuk setiap jenis lainnya), yang ingin Anda periksa secara default

Di kelas FooFormType Anda, tambahkan:

...
use Symfony\Component\Form\FormEvent;
use Symfony\Component\Form\FormEvents;
...
public function buildForm( FormBuilderInterface $builder, array $options )
{
    ...

    $builder->add('active', CheckboxType::class, array(
        'label' => 'Active',
    ));

    $builder->addEventListener(
        FormEvents::PRE_SET_DATA,
        function(FormEvent $event){                 
            $foo = $event->getData();
            // Set Active to true (checked) if form is "create new" ($foo->active = null)
            if(is_null($foo->getActive())) $foo->setActive(true);
        }
   );
}
public function configureOptions( OptionsResolver $resolver )
{
    $resolver->setDefaults(array(
        'data_class' => 'AppBundle:Foo',
    ));
}
obat85
sumber
Ini uang !! Gunakan pendengar acara formulir untuk memeriksa nilai Anda sebelum menyetelnya. Ini harus menjadi jawaban yang diterima untuk nilai default dalam formulir Anda karena itu berfungsi untuk tindakan baru dan tindakan Edit.
tlorens
Ini adalah cara yang tepat untuk menangani ini dan ini harus menjadi jawaban yang diterima.
Bettinz
Apa yang Anda sebutkan di awal tidak benar jika Anda menggunakan conditional / ternary. Seperti ini:'data' => $data['myfield'] ?? 'Default value'
xarlymg89
6
->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) {
     $form = $event->getForm(); 
     $data = $event->getData(); 

     if ($data == null) {
         $form->add('position', IntegerType::class, array('data' => 0));
     }

});
Ziiweb
sumber
ini solusi yang bagus. Memanggil $event->setData()alih-alih membaca bidang mungkin membuatnya lebih baik.
user2268997
5

Solusi saya:

$defaultvalue = $options['data']->getMyField();
$builder->add('myField', 'number', array(
            'data' => !empty($defaultvalue) ? $options['data']->getMyField() : 0
        )) ;
trocolo
sumber
4

Jadi saya mengerti masalahnya.

Anda ingin menyesuaikan cara formulir dibuat berdasarkan data di entitas Anda. Jika entitas sedang dibuat maka gunakan beberapa nilai default. Jika entitas yang ada gunakan nilai database.

Secara pribadi, saya pikir solusi @ MolecularMans adalah cara untuk pergi. Saya benar-benar akan menetapkan nilai default di konstruktor atau dalam pernyataan properti. Tetapi Anda sepertinya tidak menyukai pendekatan itu.

Sebaliknya, Anda dapat mengikuti ini: http://symfony.com/doc/current/cookbook/form/dynamic_form_modification.html

Anda menggantung pendengar pada jenis formulir Anda dan kemudian Anda dapat memeriksa entitas Anda dan menyesuaikan pembangun-> menambahkan pernyataan sesuai berdasarkan memiliki entitas baru atau yang sudah ada. Anda masih perlu menentukan nilai-nilai default Anda di suatu tempat meskipun Anda bisa kode mereka di pendengar Anda. Atau meneruskannya ke dalam bentuk formulir.

Sepertinya banyak pekerjaan. Lebih baik hanya meneruskan entitas ke formulir dengan nilai-nilai defaultnya sudah ditetapkan.

Cerad
sumber
4

Jika Anda menggunakan FormBuilderdalam symfony 2.7 untuk menghasilkan formulir, Anda juga dapat meneruskan data awal ke createFormBuildermetode Controler

$values = array(
    'name' => "Bob"
);

$formBuilder = $this->createFormBuilder($values);
$formBuilder->add('name', 'text');
Bob
sumber
3

Seringkali, untuk nilai standar init saya menggunakan fixture. Tentu cara ini tidak mudah, tetapi sangat nyaman.

Contoh:

class LoadSurgeonPlanData implements FixtureInterface
{
    public function load(ObjectManager $manager)
    {
        $surgeonPlan = new SurgeonPlan();

        $surgeonPlan->setName('Free trial');
        $surgeonPlan->setPrice(0);
        $surgeonPlan->setDelayWorkHours(0);
        $surgeonPlan->setSlug('free');

        $manager->persist($surgeonPlan);
        $manager->flush();        
    }   
}

Namun, bidang tipe symfony memiliki data opsi .

Contoh

$builder->add('token', 'hidden', array(
    'data' => 'abcdef',
));
Mikhail Shchedrakov
sumber
3

Ada cara yang sangat sederhana, Anda dapat mengatur default seperti di sini:

$defaults = array('sortby' => $sortby,'category' => $category,'page' => 1);

$form = $this->formfactory->createBuilder('form', $defaults)
->add('sortby','choice')
->add('category','choice')
->add('page','hidden')
->getForm();
Alsatian
sumber
3

Jika Anda menetapkan 'data' dalam formulir kreasi Anda, nilai ini tidak akan diubah saat mengedit entitas Anda.

Solusi saya adalah:

public function buildForm(FormBuilderInterface $builder, array $options) {
    // In my example, data is an associated array
    $data = $builder->getData();

    $builder->add('myfield', 'text', array(
     'label' => 'Field',
     'data' => array_key_exits('myfield', $data) ? $data['myfield'] : 'Default value',
    ));
}

Sampai jumpa.

Quentin Machard
sumber
Jauh lebih bermanfaat, daripada jawaban yang diterima! Jika Anda menggunakan PHP7 + Anda dapat membuatnya lebih rapi dengan:'data' => $data['myfield'] ?? 'Default value',
Boykodev
Anda memiliki fungsi salah ketik di array_key_exists ()
Deadpool
1

Nilai default ditetapkan dengan mengkonfigurasi entitas yang sesuai. Sebelum mengikat entitas ke bentuk, setel bidang warnanya ke "# 0000FF":

// controller action
$project = new Project();
$project->setColor('#0000FF');
$form = $this->createForm(new ProjectType(), $project);
Pria Molekuler
sumber
pendekatan ini berfungsi, tetapi memiliki kelemahan yang harus Anda lakukan setiap kali Anda menggunakan kelas bentuk & sangat verbose (banyak pernyataan yang ditetapkan). Karena komponen bentuknya sangat elegan, pasti ada sesuatu yang lain. Tapi terima kasih :-)
herrjeh42
@ jamie0726 Menurut pendapat saya adalah tanggung jawab pengontrol untuk mengatur nilai-nilai objek setiap kali itu baru atau diambil. Dengan begitu Anda dapat memiliki formulir yang digunakan dalam situasi yang berbeda dengan perilaku yang berbeda, misalnya, warna baru dapat berubah karena pengguna memiliki peran manajer atau supermanager, dan karena ini adalah logika bisnis, yang harus dikontrol oleh pengontrol atau layanan, bukan formulir. Jadi seperti yang dikatakan Cerad, saya juga lebih suka solusi ini. Anda selalu dapat membuat layanan untuk menetapkan nilai-nilai default dan dalam pengontrol menggunakan layanan itu tetap KERING.
saamorim
Ini adalah solusi yang saya pilih, karena cocok dengan logika yang saya pikir. Kontroler yang dihasilkan memiliki metode berbeda untuk membuat formulir EDIT dan BUAT, dan itulah tempat saya mengatur data default / awal untuk entitas baru.
alumi
1

Jika bidang itu terikat pada suatu entitas (adalah properti dari entitas itu), Anda dapat menetapkan nilai default untuknya.

Sebuah contoh:

public function getMyField() {
    if (is_null($this->MyField)) {
        $this->setMyField('my default value');
    }
    return $this->MyField;
}
Andrei Sandulescu
sumber
1

Saya biasanya hanya menetapkan nilai default untuk bidang tertentu di entitas saya:

/**
 * @var int
 * @ORM\Column(type="integer", nullable=true)
 */
protected $development_time = 0;

Ini akan berfungsi untuk catatan baru atau jika hanya memperbarui yang sudah ada.

matotej
sumber
Ini sepertinya tidak berfungsi ketika 'empty_data'sebuah panggilan balik digunakan untuk memungkinkan param konstruktor pada entitas.
NDM
1

Seperti yang Brian tanyakan:

empty_data tampaknya hanya mengatur bidang ke 1 saat itu dikirimkan tanpa nilai. Bagaimana dengan ketika Anda ingin form secara default menampilkan 1 pada input ketika tidak ada nilai?

Anda dapat mengatur nilai default dengan empty_value

$builder->add('myField', 'number', ['empty_value' => 'Default value'])
Snowirbis
sumber
0

Saya memecahkan masalah ini, dengan menambahkan nilai dalam attr :

->add('projectDeliveringInDays', null, [
    'attr' => [
          'min'=>'1',
          'value'=>'1'
          ]
     ])
Kaxa
sumber