Symfony2将复选框的值从0/1更改为'no'/'yes'


Symfony2 Change checkbox values from 0/1 to 'no'/'yes'

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

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'/'yes',并改变通讯字段的定义为:* @ORM'Column(name="newsletter", type="string", columnDefinition="ENUM('yes', 'no')")如果数据库中有"是"answers"否"枚举值,那就太好了。如果我错了,请纠正我:没有办法通过表单元素属性来改变这一点,对吧?我听说过一些关于数据转换器的事情。但有没有更简单的方法来实现这一点呢?

你想要复选框还是单选按钮?对于表示中的复选框,使用:

    $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,
    ));

不要使用ENUM !

在MySQL中,使用数据类型BIT(1)TINYINT(1)(=与BOOLEAN相同)。

使用哪种MySQL数据类型来存储布尔值

在PostgreSQL中,有一个真正的BOOLEAN类型。但是没有ENUM。所以,如果你曾经考虑迁移,最好摆脱ENUM;-)