验证 CheckboxType symfony

Validation CheckboxType symfony

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

Returns 字符串“1”,否则为 false

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

<?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 步:搜索播放器类型

<?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()) {
        ....

你有想法或其他解决方案吗?如果可能,我想保留复选框字段

感谢您的帮助

您可以使用 @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];
    }
}

谢谢,

但是,有些事情我不明白。 当我这样做时:

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


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

return a boolean!!!

ps:不同于var_dump($_POST)。我明白这一点。 (return false 或字符串“1”];

于是我在函数getCheckboxAllowedValues()中填入true和false的值。 好的,可以了;

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