Php Symfony2将复选框值从0/1更改为';否'/';是';

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(

我创建了一个带有一个复选框的表单

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(选中)更改为“否”/“是”,并将新闻稿字段的定义更改为:@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')