我创建了一个带有一个复选框的表单。
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实体中:
/**
* @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(已选中)更改为' no' /'是'并将简报字段的定义更改为:* @ORM \ Column(name =" newsletter",type =" string",columnDefinition =" ENUM('是的',' no')") 如果会有“是”的话会很好。并且没有'枚举数据库中的值。 如果我错了请纠正我:没有办法通过表单元素属性来改变它,对吧? 我听说过DataTransformer:但有没有更简单的方法来实现这一目标?
答案 0 :(得分:1)
你想要复选框还是单选按钮?对于演示文稿使用中的复选框:
$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,
));
答案 1 :(得分:1)
不要使用ENUM!
在MySQL中,使用数据类型BIT(1)
或TINYINT(1)
(=与BOOLEAN
相同)。见这里:Which MySQL data type to use for storing boolean values
在PostgreSQL中,有一个真正的BOOLEAN
类型。但没有ENUM
。因此,如果您一直在考虑迁移,最好摆脱ENUM
; - )