gpt4 book ai didi

php - Symfony2形成子项和错误

转载 作者:行者123 更新时间:2023-12-03 07:59:49 25 4
gpt4 key购买 nike

我正在构建一个站点范围内的搜索表单,但是在理解Symfony2 Forms结构(有关子表单和错误处理)时遇到了麻烦。

我的代码如下所示:

表单类型

class SearchType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('q', 'search', array(
'label' => '',
'attr' => array(),
))
;
}

public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'AppBundle\Entity\SearchQuery',
'csrf_protection' => false,
));
}

public function getName()
{
return 'search_form';
}
}

实体(在上述表单类型中称为data_class)
class SearchQuery
{
/**
* @Assert\NotBlank()
* @Assert\Type(type="string", message="form.search.query.validation.type")
* @Assert\Length(
* min = 3,
* max = 50
* )
*/
protected $q;

public function __construct($q = '')
{
$this->setQ($q);
}

public function __toString() {
return $this->getQ();
}

public function getQ()
{
return $this->q;
}

public function setQ($query)
{
$this->q = $query;
}
}

Controller
$searchForm = $this->createForm(new SearchType());
$searchFormData = array('q' => $q);
$searchForm->submit($searchFormData);

if ($searchForm->isValid()) {
[...]
}
else {
// this returns an empty array regardless there are errors or not
$errors = $searchForm->getErrors();

// this returns errors when they are present
$errorMessages = $searchForm->getErrorsAsString();
}

您可能会在 Controller 代码的第二行中注意到,我正在提交一个数组,而不是 SearchQuery对象。我已经尝试过了,但效果并不理想,尽管我希望这是正确的方法。

挖掘Symfony文档以及StackOverflow上的问题有助于我理解 getErrors()( see it here)从不检查子窗体,而 getErrorsAsString()( see it here)则不这样做。因此,我猜想这就是所描述的行为背后的原因,所以,我的表单有一个子表单。

我的问题是,为什么现在有一个 child 表格?如何消除它?我究竟做错了什么?

谢谢!

最佳答案

通过在表单类型类的error_bubbling字段中添加q来解决。

public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('q', 'search', array(
'label' => '',
'attr' => array(),
'error_bubbling' => true,
))
;
}

关于php - Symfony2形成子项和错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29095829/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com