在Symfony 2.8上遇到一個小問題。我有幾個數據庫字段,一個是整數,一個是十進制。當我構建表單時,這些字段是下拉列表,所以我使用ChoiceType而不是IntegerType或NumberType。使用ChoiceType和Integers作爲選擇值
表格實際上工作正常,兩者之間的內部差異顯然不會導致問題,我可以選擇一個值,它可以正確保存到數據庫。
現在的問題是在Listener中。當某些字段改變時,我需要啓動一個額外的進程,所以我有一個事件監聽器,並使用getEntityChangeSet()命令。
什麼我注意到的是,它的彙報這些領域的變化,因爲它確認1000和「1000」之間的區別,我可以在Vardump輸出看到:
"baths" => array:2 [▼
0 => 1.5
1 => "1.5"
]
這導致監聽者總是觸發我的鉤子,即使這個值真的沒有改變。如果我將表單類型更改爲Integer,那只是一個文本條目,我失去了我的下拉菜單。你如何強制下拉ChoiceType將數字視爲數字?
在我的實體,這是正確定義:
/**
* @var float
*
* @ORM\Column(name="baths", type="decimal", precision=10, scale=1, nullable=true)
*/
private $baths;
在我的正常形式:
->add('baths', BathsType::class)
其拉動:
class BathsType extends AbstractType
{
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'choices' => array_combine(range(1,10,0.5),range(1,10,0.5)),
'label' => 'Bathrooms:',
'required' => false,
'placeholder' => 'N/A',
'choices_as_values' => true,
]);
}
public function getParent()
{
return 'Symfony\Component\Form\Extension\Core\Type\ChoiceType';
}
}