验证 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.html。Creates 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 设计有true
或false
值。在里面使用BooleanToStringTransformer
github.com/symfony/form/blob/5.x/Extension/Core/Type/…
感谢您的解释和演示。很棒以上是关于验证 CheckboxType symfony的主要内容,如果未能解决你的问题,请参考以下文章
js正则表单验证汇总,邮箱验证,日期验证,电话号码验证,url验证,信用卡验证,qq验证