1

我有一个动态表格。

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

我会检测我的表单是否被修改。
如果我的表格完成了,我应用 isvalid()方法,如果有错误我在表格中返回,或者如果没有错误,我应用重定向。
我知道该怎么做。

但是,如果我的 fom 是在没有修改的情况下提交的(没有新值),我想在没有验证的情况下应用其他重定向,因为我的验证将返回 false 和必填字段。

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

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

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

4

1 回答 1

1

假设您的表单与实体绑定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手册

于 2016-09-02T08:47:15.157 回答