Symfony2将复选框值从0/1更改为“否” /“是” [英] Symfony2 Change checkbox values from 0/1 to 'no'/'yes'
问题描述
我创建了一个带有一个复选框的表单。
I created a form with one checkbox.
UserSettingsType.php:
UserSettingsType.php:
public function buildForm(FormBuilderInterface $builder, array $options) {
$builder->add('newsletter', 'checkbox', array(
'label' => 'Newsletter erhalten',
'attr' => array(
'class' => 'form-control',
),
'required' => false,
));
}
在UserSettings.php实体中:
In the UserSettings.php Entity:
/**
* @ORM\Column(name="newsletter", type="boolean")
*/
protected $newsletter;
在User.php中:
In the 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中,我处理设置操作:
In the PageController.php i handle the settings action:
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(选中)为'no'/'yes',然后将新闻通讯字段的定义更改为:* @ ORM\Column(name = newsletter,type = string,columnDefinition = ENUM('yes' ,'no'))
如果数据库中有 yes和 no枚举值,那就太好了。
如果我错了,请纠正我:没有办法通过表单元素属性来更改它,对吗?
我听说了有关 DataTransformer 的一些信息:
I want to change the checkbox values from false (unchecked) / true (checked) to 'no' / 'yes' and change the definition of the newsletter field to: * @ORM\Column(name="newsletter", type="string", columnDefinition="ENUM('yes', 'no')") It would be nice if there would be 'yes' and 'no' enum values in the database. Please correct me if i am wrong: There is no way to change this via form element attributes, right? I heard something about a DataTransformer:. But is there any easier way to realize this?
推荐答案
不要为此使用ENUM!
Don't use ENUM for this!
在MySQL中,使用数据类型 BIT(1)
或 TINYINT(1)
(=与 BOOLEAN
相同)。参见此处:用于存储布尔值的哪种MySQL数据类型
In MySQL, use either data type BIT(1)
or TINYINT(1)
(=same as BOOLEAN
). See here: Which MySQL data type to use for storing boolean values
在PostgreSQL中,存在真正的 BOOLEAN
类型。但是没有 ENUM
。因此,如果您正在考虑迁移,最好摆脱 ENUM
;-)
In PostgreSQL, there is a true BOOLEAN
type. But no ENUM
. So if you're ever thinking about migrating, better get rid of ENUM
;-)
这篇关于Symfony2将复选框值从0/1更改为“否” /“是”的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!