Ahora KumbiaPHP está en Slack!!

Si deseas contactar con nosotros y de forma rápida, estamos en Slack:

http://slack.kumbiaphp.com/

Editar con un form::check

edited diciembre 2013 in Beta2
Tengo un campo ('usuario.recibeTarifas' ) cuyo valor es 0 ó 1 y lo edito en el View mediante un Form::check, hasta ahí todo bien, pero al recibir los valores en el Controller el hasPost de dá un error de que el campo no puede ser nulo cuando el checkbox no está marcado.

¿ Cómo puedo salir de esta ?

Comentarios

  • Hola que tal.

    Eso es porque tu campo es boolean, y no recibe campos NULO, es decir solo recib 1 o 0

    Para ello puedes hacerlo de dos formas.

    1) en tu controlador verificar si recibiste tu chek haspost('usuario.recibetarifa'), de ser asi el valor en ese campo es true, de lo contrario es false.

    2) En tu vista al momento de cambiar el chek, (seleccion o desseleccion) cambiale por js el valuea a tru o false.
  • Supongo que en la linea del check, donde pongo los attibutos puedo añadir el onclick="nuncaNulo(this)" para cambiar el valor y en el caso de ser nulo ponerlo a 0.

    Pero donde pongo este script, en el mismo phtml en el que edito ?

    Gracias
    Pedro
  • si en el mismo script. en tu misma vista. pero a mi pareces es mas recomendable la opcion 1.
  • Te he comentado la 2 porque en el controlador el código que tengo en el edit es este:

        public function edit($id){
            $usuario = new Usuarios();
            if(Input::hasPost('usuarios')){
                if(!$usuario->update(Input::post('usuarios'))){
                    Flash::error('Error al modificar Usuario');
                    return Router::redirect();
                } else {
                    Flash::valid('Modificación correcta : '.$id);
                    Input::delete();  // borramos el post
                    return Router::redirect();
                }
            } else {
                $this->usuarios = $usuario->find((int)$id);
            }
        }

    ... y francamente no se como hacer lo del haspost que me comentas.

    Yo también preferiría que esto se realizara en el controlador.

    Gracias.

  • Creo que lo he solucionado, dime qué te parece, por favor:

        public function edit($id){
            $usuario = new Usuarios();
            if(Input::hasPost('usuarios')){
                $arrayPost=Input::post('usuarios');
                if(!isset($arrayPost['recibeNovedades'])){
                    $arrayPost['recibeNovedades']=0;
                }
                if(!isset($arrayPost['recibeTarifas'])){
                    $arrayPost['recibeTarifas']=0;
                }
                if(!$usuario->update($arrayPost)){
                    Flash::error('Error al modificar Usuario');
                    return Router::redirect();
                } else {
                    Flash::valid('Modificación correcta : '.$id);
                    Input::delete();  // borramos el post
                    return Router::redirect();
                }
            } else {
                $this->usuarios = $usuario->find((int)$id);
            }
        }

    No quiero molestarte más, muchas gracias.
    Pedro
  • Exactamente como usaste tu ejemplo 2. estaba sesayunando disculpa.
  • Ya lo tengo, gracias.
    Por cierto, aquí estoy merendando.

    Un saludo
    Pedro
  • Si no te funciona asi como lo tienes intenta asi colocar tus if asi

      if(Input::Post('usuarios.recibeNovedades'))//aca indicas si se ha mandado ese elemento.
    {
                    $arrayPost['recibeNovedades']=true;//de ser cierto entonces tu array post lo haces true
    //o asi 
    // $arrayPost->recibeNovedades=true;
                }
    else
    {
              $arrayPost['recibeNovedades']=false;
    //o asi 
    // $arrayPost->recibeNovedades=false;
    }
  • edited diciembre 2013
    Es más fácil poner en la bd que no puede ser nulo, pero además darle el valor por defecto de 0.

    Otra forma muy fácil es mirarlo y cambiarlo en el before_save() de tu modelo.

    function before_save() {
     If(!isset($this->campo)) $this->campo = 0;
    }
  • Los controllers deben tener lo mínimo de lógica, sólo enviar los datos al modelo.

    En el modelo hagan las validaciones, cambios, ....
Sign In or Register to comment.