验证 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。这是否意味着永远不会读取该值?
我不知道如何使用 @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。这是否意味着永远不会读取该值?