PHP - Conflicto en servicios y tipos de datos retornados

 
Vista:

Conflicto en servicios y tipos de datos retornados

Publicado por Virginia (13 intervenciones) el 23/10/2008 17:35:46
Hola... Estoy desarrollando un sistema en Php, usando el framework SimpleMVC, una adaptación hecha de un framework existente.
Mi inquietud es la siguiente: He hecho un servicio que realiza inserciones en una tabla en postgre ssi se cumplen ciertas restricciones, si la inserción no se realiza, el servicio me devuelve un entero (por ejemplo 10: si no insertó porque el código proyecto está repetido, 20: si no insertó porque la asignación de obra está repetida), lo cual funciona perfectamente, pues he probado el modelo y me devuelve lo que debe devolver, el problema se presenta cuando en el controlador se recibe esta respuesta y se arma el mensaje de error, pues he tenido que recurrir a la función de php intval($respuesta) para que el mensaje que se muestra al usuario sea el correcto.
Alguien puede explicarme qué sucede en este marco de trabajo que hace necesario el "casteo" de la respuesta para que pueda mostrar el mensaje correcto???
De antemano muchas gracias a quien pueda ayudarme a encontrar una explicación lógica a lo que sucede con esto...
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Conflicto en servicios y tipos de datos retorna

Publicado por Virginia (13 intervenciones) el 23/10/2008 17:55:54
He solventado el problema inicial.... Pero aún me queda una confusión, sucede que en el servicio retornaba la variable tipo entero $rs, de la siguiente manera:
//-----------------------------------------------------------------------------------------------------------------------------------------
Mi servicio es el siguiente:
/**
* registrar_proyecto
* permite registrar los datos en la tabla proyecto
* @param ProyectoDTO proyecto
* @return int
*/
function registrar_proyecto(ProyectoDTO $proyecto){
$db_conexion=ConnectionFactory::getConnection();
$daoProyecto = new ProyectoDAO();
$filtro = "";
$buscar = $daoProyecto->buscar_codigo($proyecto->str_codproyecto, $filtro, $db_conexion);
if($buscar == -1){
$buscar1 = $daoProyecto->buscar_anho_nombre($proyecto->str_descrip,$proyecto->int_ano,$filtro,$db_conexion);
if($buscar1 == -1)
$ok = $daoProyecto->registrar($proyecto,$db_conexion);
else
$ok = $buscar1;//devuelve 20
}
else
$ok = $buscar;//devuelve 10
ConnectionFactory::closeConnection();
return $ok;
}
//-------------------------------------------------------------------------------------------------------------------------------
Mi DAO contiene los siguiente métodos...
public function registrar(PaccionDTO $dtoPaccion,$db){
$tabla = new GenericAR("obras.obr_paccion");
$tabla->id_proyecto = $dtoPaccion->id_proyecto;
$tabla->str_accion = $dtoPaccion->str_accion;
$tabla->num_monto = $dtoPaccion->num_monto;
try{
$ok = $tabla->save();
if($ok) {
return true; ***1
}
}
catch(Exception $e){
throw new SoapFault("SERVER","301");
}
}
//para validar que no se repita el str_codsoftco
public function buscar_codigo($str_codsoftco,$filtro,$db){
$sql = "SELECT id_codigo FROM obras.obr_paccion WHERE str_codsoftco = '".$str_codsoftco."'".$filtro;
try{
$rs = $db->Prepare($sql);
$rs = $db->Execute($sql);
if($rs->fields[0] != ""){//el código softco está repetido
return 50;
}
else{
return -1;
}
}
catch(exception $ex){
throw new Exception($ex->getmessage(), "400");
}
}

Entre otros....
//--------------------------------------------------------------------------------------------------------------------------------
Y mi controlador:
public function proyecto_accion(){
if($_POST){
$modelo = new ProyectoModelo();
if($_REQUEST[opciones] == 'guardar'){
$datos = $modelo->Obtener_instancia_PaccionDTO();
$datos->int_ano = $_REQUEST['int_ano'];
$datos->id_proyecto = $_REQUEST['id_proyecto'];
$datos->str_accion = $_REQUEST['str_accion'];
$datos->str_codsoftco = $_REQUEST['str_codsoftco'];
$rs = $modelo->registrar_paccion($datos);
}
if($_REQUEST[opciones] == 'modificar'){}

if(isset($rs)){***2
if($rs==0)
$mensaje = "Ocurrio un error. No se almacenaron los datos";
if($rs==1)
$mensaje = "Se almacenaron correctamente los datos";
if($rs==50)
$mensaje = "Ocurrio un error. El código del Proyecto que esta ingresando ya existe. Debe ingresar un diferente";
if($rs==60)
$mensaje = "Ocurrio un error. Ya existe registrado un Proyecto con el nombre que esta ingresando para el mismo año seleccionado. Debe ingresar un Proyecto diferente";
$this->vista->set('mensaje',$mensaje);
}
}

Resultando que estaba preguntando por un isset($rs) que siempre me devolverá "true" pues ya está $rs = $modelo->registrar_paccion($datos) obligada a ser así... pero el error está en que me muestra así el primer error que consigue así no sea el mensaje correcto, alguien puede explicarme por q??? qué estoy haciendo mal????

***1 Cambié el true por return 1;
***2 Luego, para "forzar" que me lanzara el mensaje que debe, usé la función intval($rs)...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar