验证 CheckboxType symfony

Posted

技术标签:

【中文标题】验证 CheckboxType symfony【英文标题】:Validation CheckboxType symfony 【发布时间】:2021-03-01 13:00:17 【问题描述】:

我不知道如何使用@Assert 验证复选框。

如果检查为假,则返回字符串“1”

第一步:创建一个类:SearchPlayerData.php 来测试我的数据(没有ORM) 此表单未链接到课程

<?php

namespace App\Entity;
use Symfony\Component\Validator\Constraints as Assert;

class SearchPlayerData

     /**
     * (length=255, nullable=true) 
     * @Assert\???
     */
    public $tgg;

     /**
     * (length=255, nullable=true)
     * @Assert\???
     */
    public $selection;
   ...

第 2 步:SeachPlayerType

<?php
namespace App\Form;

use app\Entity\SearchPlayerData;

class SearchMultiType extends AbstractType

    public function buildForm(FormBuilderInterface $builder, array $options)
    

     $builder
            ->add('tgg', CheckboxType::class, [
                'label'             => "TGG", 
                'required'          => false,                
                'attr' => [
                    "class"         => "text-dark checkbox", 
                ], 
            ->add('selection', CheckboxType::class, [
                'label'             => "SELECTION", 
                'required'          => false,                
                'attr' => [
                    "class"         => "text-dark checkbox", 
                ], 
               ...
    
    public function configureOptions(OptionsResolver $resolver)
    
        $resolver->setDefaults([
            "data_class"    => SearchPlayerData::class
        ]);
    

Etape 3:控制器

    public function searchPlayers(Request $request, PlayerRepository $playerRepository)
    
        $searchPlayerData = new SearchPlayerData(); 

        $form = $this->createForm(SearchPlayerType::class, $searchPlayerData, ["sect" => $sect]);

        $form->handleRequest($request);

        if ($form->isSubmitted() && $form->isValid()) 
        ....

您有什么想法或其他解决方案。如果可能,我想保留复选框字段

感谢您的帮助

【问题讨论】:

【参考方案1】:

您可以将@Assert\Choice 与可能的值一起使用。

namespace App\Entity;

use Symfony\Component\Validator\Constraints as Assert;

class SearchPlayerData

    /**
     * (length=255, nullable=true)
     * @Assert\Choice(callback="App\Entity\SearchPlayerData", "getCheckboxAllowedValues")
     */
    public $tgg;

    /**
     * (length=255, nullable=true)
     * @Assert\Choice(callback="App\Entity\SearchPlayerData", "getCheckboxAllowedValues")
     */
    public $selection;

    public static function getCheckboxAllowedValues()
    
        return [1, false];
    

【讨论】:

【参考方案2】:

谢谢,

但是,有一点我不明白。 当我这样做时:

 $data = $form->getData();
 var_dump($data);


output : 
["tgg"]=>
  bool(false)
["selection"]=>
  bool(true) if checked

return a boolean!!!

ps:它不同于 var_dump ($ _ POST)。我明白这一点。 (返回 false 或字符串 "1"];

所以我在函数getCheckboxAllowedValues()中填写了true和false的值。 好的,它可以工作;

但是,为什么在检查器中我更改复选框值=“%%%%”的值时,没有错误消息。如果复选框被选中,它将验证字段为 TRUE,否则验证为 FALSE。这是否意味着永远不会读取该值?

【讨论】:

请查看 ChecboxType 文档symfony.com/doc/current/reference/forms/types/checkbox.htmlCreates a single input checkbox. This should always be used for a field that has a boolean value: if the box is checked, the field will be set to true, if the box is unchecked, the value will be set to false. CheckboxType 设计有truefalse 值。在里面使用BooleanToStringTransformergithub.com/symfony/form/blob/5.x/Extension/Core/Type/… 感谢您的解释和演示。很棒

以上是关于验证 CheckboxType symfony的主要内容,如果未能解决你的问题,请参考以下文章

Symfony 表单 - 内部带有复选框的集合类型

js正则表单验证汇总,邮箱验证,日期验证,电话号码验证,url验证,信用卡验证,qq验证

如何开发图形验证码?

tp5.1 验证规则 验证数字

js实现输入手机验证码后点击提交按钮验证手机输入的验证码和发送的验证码是不是一致

原生JavaScript判断是否为邮箱危险字符验证长度验证网址验证小数整数浮点数等常用的验证