lunes, 16 de abril de 2012

Borrar y editar

Ya sabemos ver e insertar los datos, ahora nos queda borrar y editar, para ello seria buena idea en nuestra vista de mostrartodo agregar 2 "botones" uno por cada acción
por lo que deberemos abrir: application/views/scripts/tabla prueba y allí el archivo mostrartodos.phtml
en el que deberemos incluir el siguiente código justo debajo de <td>Comentario</td>:

            <td></td>
            <td></td>
simplemente son 2 celdas mas  para que no se nos desmonte el diseño.
y debajo de :

                echo "<td>";
                echo $datos->Comentario;
                echo "</td>";
esto otro:
echo '<td><a href="http://localhost/ZendPrueba/public/tablaprueba/editar/Id/'. $datos->Id .'">Editar</a></td>';
echo '<td><a href="http://localhost/ZendPrueba/public/tablaprueba/borrar/Id/'. $datos->Id .'" >Borrar</a></td>';
como veis son 2 enlaces a las nuevas vistas que crearemos mas adelante y le pasamos el id con el que queremos trabajar vía post.
Lo siguiente que debemos hacer es crear las acciones de editar y borrar, vamos a empezar con editar, para ello deberemos ir a nuestro controlador, que estaba en: application/controlers; y se llamaba TablaPruebaController.php
y copiaremos el siguiente código:

        public function editarAction()
    {
        if (!$this->_hasParam('Id')){
            return $this->_redirect('http://localhost/ZendPrueba/public/tablaprueba/mostrartodo');
        }

        $form = new Application_Form_TablaPrueba();
        $datos =new Application_Model_PruebaZF();
       
        if ($this->getRequest()->isPost()){
            if ($form->isValid($this->_getAllParams())){
                $model =new Application_Model_PruebaZF();
                $model->Guardar($form->getValues());
                return $this->_redirect('http://localhost/ZendPrueba/public/tablaprueba/mostrartodo');
            }
        }else{
            $Fila = $datos->DameFila($this->_getParam('Id'));
            if ($Fila){
                $form->populate($Fila->toArray());  

            }
           
        }
        $this->view->form = $form;
    }

Es muy similar al de Insertar, de hecho es el mismo con algunas mejoras, marcadas en negrita, que paso a explicar:
Lo primero que nos encontramos es un condicional, en el que preguntamos si nos viene el parámetro Id, en caso de que no nos venga, le mandamos a mostrartodo.
Un poco mas abajo instanciamos nuestro modelo, que recordemos es el que trabaja con los datos.
Para finalizar si el formulario no nos manda datos los obtenemos nosotros, para asi poder rellenar el formulario con los datos del Id que hemos solicitado, guardando los datos en la variable $Fila, que los obtiene por la función DameFila (la cual todavía no existe ahora la creamos); comprobamos que Fila tenga datos, y se los damos al formulario con la función populate

El siguiente paso es crear la función DameFila en nuestro modelo, para ello iremos a: application/models; y abriremos el único que tenemos (PruebaZF.php) y copiaremos el siguiente código:

    public function DameFila ($Id)
    {
        $Id = (int)$Id;
        $Fila = $this->find($Id)->current();
        return $Fila;
    }
En el que creamos la funcion DameFila, y le pasamos como parametro el Id.
En la priemra linea de la funcion obligamos a que el Id sea un numero, asi nos aseguramos de no hacer peticiones extrañas a la base de datos, ya que nuestro Id siempre sera un numero.
En la siguietne guardamos la Fila entera en nuestra variable
Y para finalizar devolvemos la variable, que es lo que le va a llegar al Controlador

Hecho esto nos quedaris hacer la vista, para ello haremos click derecho sobre application/views/scripts/tablaprueba/insertar.phtml y le daremos a copiar, para despues copiar en la carpeta TablaPrueba poniendole el nombre de editar.phtml
Con esto ya podemos ver nuestros datos para despues editarlos, pero aun no lo podemos guardar, para poder guardarlos iremos a nuestro modelo, y editaremos la función de guardar, para dejarla asi:

    public function Guardar($datos , $Id =null)
    {
        if (is_null($Id)){
            $row =$this->createRow();
        }else{
            $row = $this->DameFila($Id);
        }

       
        $row->setFromArray($datos);
        return $row->save();
    }
Como antes marco en negrita los cambios; estamos pidiendo una variable mas "Id" la cual no tiene por que pasarse siempre, y si no se pasa, sera nula; si es nula, creamos la fila, tal y como hacíamos antes, si no es nula, llamamos a nuestra función DameFila, para así obtenerla, y después guardar con los nuevos datos.
Como en el Controlador, no le dábamos el Id al modelo debemos pegar el siguiente código:
$model->Guardar($form->getValues(),$this->_getParam('Id'));
Sustituyendo:
$model->Guardar($form->getValues());
Ya podemos probar a editar los valores que tengamos insertados
Para finalizar este post nos queda comentar como Borrar los registros, para ello iremos a nuestro controlador, y pegaremos este código:

        public function borrarAction()
    {
        if  (!$this->_hasParam('Id')){
            return $this->_redirect('http://localhost/ZendPrueba/public/tablaprueba/mostrartodo');
        }
       
        $Datos =new Application_Model_PruebaZF();
        $Fila = $Datos->DameFila($this->_getParam('Id'));
       
        if($Fila){
            $Fila->delete();
           
        }
        return $this->_redirect('http://localhost/ZendPrueba/public/tablaprueba/mostrartodo');
    }

 En el que miramos si nos viene el parámetro Id, y si no, lo redirigimos a mostrartodo, después instanciamos el modelo, para pedirle los datos mediante la función DameFila; si Fila tiene existe, la borramos, y terminamos redirigiendo a mostrartodo