You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用PHP+Symfony1.4结合Schema.yml实现表单if/else校验

Symfony 1.4 环境下if/else校验实现方案

现有代码核心问题

你当前的代码存在几个明显的逻辑错误,导致校验无法正常生效:

  • 比较运算符误用:代码中if ($AplicaFormularioCumplimiento = false)这类写法是赋值操作,不是条件比较,会直接覆盖变量原有值,且判断逻辑永远返回赋值结果,完全不符合预期。需要使用==(松散比较)或===(严格比较)做条件判断。
  • if语句块结构错误:当前代码的花括号放在了echo语句之外,导致if条件仅能控制echo一行代码,花括号内的逻辑不受条件控制,执行逻辑完全错位。
  • 死代码冗余:return $retorna之后的print_r和die语句永远不会被执行,可以直接删除。
  • 变量未初始化风险:如果$companiaQuery查询为空,三个配置字段的变量没有默认值,调用时会抛出PHP Notice错误,需要补充默认值。

修复后的完整代码

static function getErrorCumplimiento($remesaid, $Arrayvalores, $Arraycampos,
                                     $monedaId, $dias, $montoEnviado, 
                                     $montoPermitido, $detalle, $codigo, 
                                     $empresaId, $clave, $tipo = 'Monto', 
                                     $compania_id = 1) 
{
    $retorna = 0;
    $compania = 1;
    // 给配置变量设置默认值,避免未定义报错
    $AplicaFormularioCumplimiento = false;
    $DiasFormularioCumplimiento = 0;
    $PorcentajeFormularioCumplimiento = 0;

    $Remesa = RemesaQuery::create()->findOneById($remesaid);
    if ($Remesa) {
        $compania = $Remesa->getCompaniaId();
        $companiaQuery = CompaniaQuery::create()->findOneById($compania); 
    }else{
      $companiaQuery = CompaniaQuery::create()->findOneById($compania_id);
    }
    if($companiaQuery){
        $AplicaFormularioCumplimiento = $companiaQuery->getAplicaFormularioCumplimiento();            
        $DiasFormularioCumplimiento = $companiaQuery->getDiasFormularioCumplimiento();
        $PorcentajeFormularioCumplimiento = $companiaQuery->getPorcentajeFormularioCumplimiento();
    }        
    $montoAcumulado = RemesaQuery::SaldoAcumuladoRemesa($Arrayvalores, $Arraycampos, $monedaId, $dias, $compania, $tipo);
    $montoTotal = $montoAcumulado + $montoEnviado;
    if ($montoTotal >= $montoPermitido) {
        $nueva = new BitacoraRemesa();
        $nueva->setRemesaId($remesaid);
        $nueva->setEmpresaId($empresaId);
        $nueva->setClaveRemesa($clave);
        $nueva->setMotivo("Cumplimiento");
        $nueva->setDetalle("$tipo de Cumplimiento excede en " . $detalle);
        $nueva->setFecha(date('Y-m-d'));
        $nueva->setCodigo($codigo);
        $nueva->setBitacoraTipoMovimientoId(3);

        // 修复后的条件判断,可根据业务需求调整判断逻辑
        // 示例:如果开启了合规表单校验,再执行后续的天数、百分比校验
        if ($AplicaFormularioCumplimiento === true) {
            echo("Imprime monto ");
            // 这里可以补充表单校验逻辑
            if ($DiasFormularioCumplimiento >= 30) {
                echo("Imprime Dias ");
            }
            if ($PorcentajeFormularioCumplimiento >= 100) {
                echo("Imprime porcentaje que esta pendiente ");
            }
        }

        $nueva->save();
        $retorna = 1;
    }
    return $retorna;
}

Schema.yml与PHP代码的关联说明

你当前的Schema配置是正确的,Symfony 1.4 会根据配置自动生成对应模型的getter、setter方法:

  • 配置项中phpName指定了模型中对应字段的驼峰命名,你代码中使用的getAplicaFormularioCumplimiento()、getDiasFormularioCumplimiento()等方法就是Symfony自动生成的,已经完成了Schema与业务代码的关联。
  • 如果你修改了Schema配置,需要执行Symfony的模型构建命令更新自动生成的代码:如果使用Propel ORM执行symfony propel:build-model,如果使用Doctrine ORM执行symfony doctrine:build-model。

内容的提问来源于stack exchange,提问作者JobV

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 02:15:03