Este foro ya no está activo, así que no puedes publicar nuevas preguntas ni responder a las preguntas existentes.

Duda con un controlador Symfony que no genera una respuesta

14 de agosto de 2015

¿Cómo hago para que en mi controlador de eliminar no haga ninguna acción? Elimino un objeto y no quiero que me direccione a ninguna pagina. Elimino return $this->render() pero igual me direcciona a la pagina login y no me deja ni siquiera loguearme. Sólo quiero que elimine el dato que quiero eliminar pero que la aplicación quede igual como está sin redireccionarme a ninguna parte. Tampoco quiero usar el Response.

Gracias


Respuestas

#1

Si he entendido bien tu pregunta, el problema es que estás usando un controlador cuando deberías utilizar otra cosa. El funcionamiento esperado de la aplicación web es que el usuario "hace algo" (pincha un enlace o un botón) y la aplicación el responde a través de la ejecución de un controlador asociado.

En tu caso dices que no quieres responder nada, pero entonces ¿qué verá el usuario como respuesta de su acción? Por eso creo que deberías utilizar algo diferente a un controlador. Por ejemplo, un comando de consola.

@javiereguiluz

14 agosto 2015, 16:19
#2

Tengo una pantalla principal que abre un div mediante ajax, en ese div tengo una lista de toda la información de una tabla de la base de datos, lo que quiero lograr hacer es que cuando el usuario elimine algún dato este div se refresque pero hacer que ese div se refresque es una funcion de javascript y si me direcciona a la pantalla principal se me pierde el div, por eso no quiero que haga nada mas el controller, solo quiero que elimine el dato.

@piocarluis

14 agosto 2015, 16:27
#3

Aún en ese caso, deberías devolver una respuesta. ¿Por qué? Imagina que lo que quieres borrar no se puede borrar. ¿Cómo lo notificas al navegador si no envías ninguna respuesta? Lo que podrías hacer es devolver una respuesta JSON que pueda ser procesada en el navegador mediante el código que maneja las peticiones Ajax. en Symfony tienes una clase especial llamada JsonResponse() que ya se encarga de hacer el json_encode() y todo lo demás. Sólo tienes que pasarle la información que quieras enviar al navegador.

@javiereguiluz

14 agosto 2015, 16:32
#4

Es que en sí el eliminar solo cambia el estado de ese campo a 'I', para el usuario se "elimina" porque yo solo muestro los campos que tienen estado 'A', asi que creo que no puede existir ningun problema, pero el JsonResponse() y el json_encode() donde lo aplico? en el controller?

@piocarluis

14 agosto 2015, 16:37
#5

Lo que estás haciendo se llama "soft delete" y es bastante común porque la mayoría de empresas tienen pánico a borrar "de verdad" cualquier información. En cualquier caso, centrándonos en tu caso, este pseudo-borrado también puede fallar (la instrucción que cambia ese valor en la base de datos puede fallar por mil motivos). Así que es aconsejable que devuelvas el resultado de la operación a la petición Ajax:

use Symfony\Component\HttpFoundation\JsonResponse;
 
// ...
 
public function borrarAction()
{
    $resultado = ...; // borrar la información
 
    $response = new JsonResponse();
    $response->setData(array('resultado' => $resultado));
 
    return $response;
}

@javiereguiluz

14 agosto 2015, 16:45
#6

Gracias, ya voy a revisar documentación.

@piocarluis

14 agosto 2015, 17:08