2017-01-10 4 views
0

Ich habe ein Symfony 3.2 Formular, das einen NumberType verwendet. Ich benutze dieses Feld für einen Preis ohne Dezimalstellen (Autos, Immobilien, d. H. Preise, für die wir keine Cent verwenden).Changeset Erkennung von Änderung am NumberType fehlerhaft

Ich habe auch einen PreUpdate-Listener, der Änderungen an der Entität erkennt, um ein Überwachungsprotokoll zu schreiben. Jedes Mal, wenn Sie das Formular abschicken, wird der Preis wie 28000 im Formularfeld als 28000.0 angezeigt und zeigt daher einen Unterschied, der in meinem Änderungsset erscheint.

Ich kann nicht herausfinden, wie man das los wird. Ich habe den "scale" -Parameter sowohl für den Formulartyp als auch für die Entity selbst auf 0 gesetzt, was meiner Meinung nach jede Dezimalstelle eliminieren würde, aber das tut er nicht.

Ursprünglich verwendete ich nur einen TextType, aber das hatte sein eigenes Problem, indem er es als ein Textfeld behandelte, so dass es 28000 mit "28000" vergleichen und das auch als eine Änderung behandeln würde, wenn es wirklich nicht tat.

Irgendwelche Ideen?

Vardump von changeset in Zuhörer:

"salePrice" => array:2 [▼ 
    0 => 32888 
    1 => 32888.0 
] 

Entity:

/** 
* @var integer 
* @Groups({"feed"}) 
* @ORM\Column(name="sale_price", type="integer", nullable=true) 
*/ 
private $salePrice; 

Formtype:

->add('salePrice', NumberType::class, [ 
    'label' => 'Sale: $', 
    'required' => false, 
    'scale' => 0, 
    'attr' => ['class' => 'size-sm input-sm'], 
]) 
+0

Dieser Link kann Ihnen helfen: https://github.com/doctrine/doctrine2/issues/5594 –

Antwort

0

Haben Sie die IntegerType Field stattdessen versucht:

->add('salePrice', IntegerType::class, [ 
    'label' => 'Sale: $', 
    'required' => false, 
    'attr' => ['class' => 'size-sm input-sm'] 
]) 

Können Sie das versuchen und sehen, ob es besser funktioniert. Der NumberType ist für Nicht-Ganzzahlen.

Verwandte Themen