我有一个Measure类,其布尔属性名为“ isShared”
/**
* @ORM\Entity(repositoryClass="App\Repository\MeasureRepository")
* @UniqueEntity("name", message = "This value is already used")
*/
class Measure
{
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\Column(name="is_shared", type="boolean")
*/
private $isShared;
}
还有一种形式,其中应通过复选框更改isShared属性值的值。
class MeasureType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('isShared', CheckboxType::class, array(
'required' => false,
'label' => 'Shared',
'attr' => array(
'data-on-color' => 'primary',
'data-off-color' => 'default'
)
));
}
问题在于,呈现的html始终是
<input type="checkbox" id="measure_isShared" name="measure[isShared]" data-on-color="primary" data-off-color="default" value="1" /> Shared</label>
不考虑对象中属性的值。当我将属性isShared设置为false的Measure对象传递给表单时,输入的值始终为1。
我做错了什么?谢谢!
答案 0 :(得分:2)
如果我没记错的话,应该复选框的值始终为1
。
实际上,如果未选中,则浏览器将完全跳过发送属性mesure[isShared]
,而您的FormType
可以得出结论,用户未检查该字段。不发送值而发送0
会有所不同
想到一种将一些任意信息(不仅仅是二进制0
/ 1
)传输到服务器的方法。例如,在choice
(当然还有expanded
和multiple
的情况下,value
将包含这些值,但是只有其中一些会被提交回服务器。
提示:提交表单后,您是否尝试过转储Measure
对象?
希望这对您有帮助...