Symfony2将复选框值从0/1更改为“否” /“是” [英] Symfony2 Change checkbox values from 0/1 to 'no'/'yes'

查看:77
本文介绍了Symfony2将复选框值从0/1更改为“否” /“是”的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆