如何使用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
相关产品推荐
相关产品推荐

