gpt4 book ai didi

validation - Symfony 2 中带有参数/参数的自定义验证器/约束

转载 作者:行者123 更新时间:2023-12-04 16:48:46 24 4
gpt4 key购买 nike

我想创建一个类似于 GitHub 处理删除存储库的方式的验证器。要确认删除,我需要输入 repo 名称。在这里,我想通过输入实体属性“名称”来确认删除。我需要将名称传递给约束或以某种方式访问​​它,我该怎么做?

最佳答案

您确实可以使用验证器约束来做到这一点:

1:创建删除表单(直接或使用类型):

    return $this->createFormBuilder($objectToDelete)
->add('comparisonName', 'text')
->setAttribute('validation_groups', array('delete'))
->getForm()
;

2:添加公共(public)属性comparisonName进入你的实体。 (或使用代理对象),这将被映射到上面相应的表单字段。

3:定义一个类级别,回调验证器约束来比较两个值:

/**
* @Assert\Callback(methods={"isComparisonNameValid"}, groups={"delete"})
*/
class Entity
{
public $comparisonName;
public $name;

public function isComparisonNameValid(ExecutionContext $context)
{
if ($this->name !== $this->comparisonName) {
$propertyPath = $context->getPropertyPath() . '.comparisonName';
$context->addViolationAtPath(
$propertyPath,
'Invalid delete name', array(), null
);
}
}
}

4:在 View 中显示您的表单:

<form action="{{ path('entity_delete', {'id': entity.id }) }}">
{{ form_rest(deleteForm) }}
<input type="hidden" name="_method value="DELETE" />
<input type="submit" value="delete" />
</form>

5:要验证删除查询是否有效,请在您的 Controller 中使用:

    $form    = $this->createDeleteForm($object);
$request = $this->getRequest();

$form->bindRequest($request);
if ($form->isValid()) {
$this->removeObject($object);
$this->getSession()->setFlash('success',
$this->getDeleteFlashMessage($object)
);
}

return $this->redirect($this->getListRoute());

关于validation - Symfony 2 中带有参数/参数的自定义验证器/约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10514301/

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