检测表单验证

Detection Form Validation

我有一个动态表格。

例如,如果有的话,我的表单包含 FormType1,否则我的表单包含 FormType2 或 FormType3 ....

我会检测我的表单是否被修改。
如果我的表单已完成,我将应用 valid() 方法,如果表单中存在错误 return 或者如果没有错误,我将应用重定向。
我知道怎么做。

但是,如果我的表单未经修改就提交了(没有新值)我想应用另一个未经验证的重定向因为对于必填字段,我的验证将 return 为假。

我无法测试是否所有值都为空,因为在表单中可能有组合框或布尔值,或初始值,...

我有一个解决方案 javascript 和两个提交按钮。
如果按钮提交的值为 'just_redirection' 我不应用验证,否则我应用验证。

在 Symfony2(或完整 PHP)中有没有办法知道提交的表单是否与初始表单相同?

假设您的表单与实体绑定MyEntity,您需要在控制器中复制原始对象,让表单处理请求,然后比较您的对象:

public function aRouteAction(Request $request, MyEntity $myEntity)
{
    $entityFromForm = clone $myEntity;
    // you need to clone your object, because since PHP5 a variable contains a reference to the object, so $entityFromForm = $myEntity wouldn't work

    $form = $this->createForm(new MyFormType(), $entityFromForm);
    $form->handleRequest($request);

    if($entityFromForm == $myEntity) {
        // redirect when no changes
    }

    if($form->isValid()) {
        // redirect when there are changes and form submission is valid
    }
    else {
        // return errors
    }
}

对象克隆请参考php manual