Php Symfony2将复选框值从0/1更改为';否'/';是';
我创建了一个带有一个复选框的表单 UserSettingsType.php:Php Symfony2将复选框值从0/1更改为';否'/';是';,php,symfony,checkbox,enums,Php,Symfony,Checkbox,Enums,我创建了一个带有一个复选框的表单 UserSettingsType.php: public function buildForm(FormBuilderInterface $builder, array $options) { $builder->add('newsletter', 'checkbox', array( 'label' => 'Newsletter erhalten', 'attr' => array(
public function buildForm(FormBuilderInterface $builder, array $options) {
$builder->add('newsletter', 'checkbox', array(
'label' => 'Newsletter erhalten',
'attr' => array(
'class' => 'form-control',
),
'required' => false,
));
}
在UserSettings.php实体中:
/**
* @ORM\Column(name="newsletter", type="boolean")
*/
protected $newsletter;
在User.php中:
/**
* @ORM\Column(type="integer", nullable=true)
*/
protected $user_settings_id;
/**
* @ORM\OneToOne(targetEntity="UserSettings", cascade={"persist"})
* @ORM\JoinColumn(name="user_settings_id", referencedColumnName="id")
*/
protected $settings;
在PageController.php中,我处理设置操作:
public function settingsAction() {
$user = $this->getUser();
if ($user->getSettings() !== null) {
$settings = $user->getSettings();
} else {
$settings = new UserSettings($user);
}
$settings_form = $this->createForm(new UserSettingsType(), $settings);
$request = $this->getRequest();
if ($request->getMethod() == 'POST') {
$em = $this->getDoctrine()->getManager();
$settings_form->bind($request);
if ($settings_form->isValid()) {
$user->setSettings($settings);
$em->persist($user);
$em->flush();
}
}
return $this->render('MyCompMyAppBundle:Page:settings.html.twig', array(
'settings_form' => $settings_form->createView(),
));
}
我想将复选框值从false(未选中)/true(选中)更改为“否”/“是”,并将新闻稿字段的定义更改为:@ORM\Column(name=“newsletter”,type=“string”,columnDefinition=“ENUM('yes','no'))
如果数据库中有'yes'和'no'枚举值就好了。
如果我错了,请纠正我:没有办法通过表单元素属性来更改它,对吗?
我听说了一个。但是有没有更简单的方法来实现这一点呢?您想要复选框还是单选按钮?对于表示中的复选框,请使用:
$builder->add('newsletter', 'choice', array(
'label' => 'Newsletter erhalten',
'attr' => array(
'class' => 'form-control',
),
'choices' => array(array('yes' => 'yes'), array('no' => 'no')),
'expanded' => true,
'multiple' => true,
'required' => false,
));
不要为此使用枚举 在MySQL中,使用数据类型
BIT(1)
或TINYINT(1)
(=与BOOLEAN
相同)。请看这里:
在PostgreSQL中,有一个true
BOOLEAN
类型。但是没有ENUM
。因此,如果您曾经考虑过迁移,最好不要使用ENUM
;-) 为什么你想用否定/是而不是真/假?这是一种习惯。最好在数据库和MySQL语句中读取。但也许我应该很容易地改变我的习惯?我建议改变我的习惯,而不是试图改变一切来适应。此外,yes/no仅适用于英语,因此从语言方面来看,它不是很容易移植。其他的好处来自于能够执行布尔检查,比如if($user->getNewsletter())
而不是更长的(可能很容易被拼写错误弄乱)if($user->getNewsletter()=='yes')
。