Symfony2将复选框值从0/1更改为“否”/“是”

时间:2014-06-17 11:32:12

标签: php symfony checkbox enums

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

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:但有没有更简单的方法来实现这一目标?

2 个答案:

答案 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; - )