Jie*_*eng 5 validation symfony
我想创建一个类似于GitHub处理删除存储库的方式的验证器.要确认删除,我需要输入回购名称.在这里,我想通过输入实体属性"name"来确认删除.我需要将名称传递给约束或以某种方式访问它,我该怎么做?
你确实可以使用验证器约束来做到这一点:
1:创建删除表单(直接或使用类型):
return $this->createFormBuilder($objectToDelete)
->add('comparisonName', 'text')
->setAttribute('validation_groups', array('delete'))
->getForm()
;
Run Code Online (Sandbox Code Playgroud)
2:将公共财产添加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
);
}
}
}
Run Code Online (Sandbox Code Playgroud)
4:在您的视图中显示您的表单:
<form action="{{ path('entity_delete', {'id': entity.id }) }}">
{{ form_rest(deleteForm) }}
<input type="hidden" name="_method value="DELETE" />
<input type="submit" value="delete" />
</form>
Run Code Online (Sandbox Code Playgroud)
5:要验证删除查询是否有效,请在控制器中使用以下命令:
$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());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2369 次 |
| 最近记录: |