La acción para eliminar una task no es complicada, de hecho es una de las acciones más sencillas. Vamos a crear una nueva acción en nuestro controlador ToDoController.php y la vamos a llamar deleteAction(), con el siguiente código:
public function deleteAction()
{
$id = (int) $this->params()->fromRoute('id', 0);
try {
$task = $this->table->getTask($id);
} catch (\Exception $e) {
return $this->redirect()->toRoute('todo-app', ['action' => 'index']);
}
try {
$this->table->deleteTask($task->id);
} catch (\Exception $e){
\error_log("error updating", $e->getMessage());
}
return $this->redirect()->toRoute('todo-app', ['action' => 'index']);
}
Al igual que editar y mostrar una tarea, pasamos el id por la url, el cual buscamos en la BD, si no la encontramos entonces redirigimos al listado de tareas. Si hemos encontrado el id, aplicamos el método deleteTask() de TaskTable, pasándole como parámetro el id de la task y por último redirigimos al listado.
Ahora en el listado vamos agregar un nuevo botón para eliminar la task, así como sigue:
<a class="btn btn-danger btn-sm p-1"
onclick="return confirm('Are you sure you want to delete?')"
href="<?= $this->url('todo-app', [
'action' => 'delete',
'id' => $task->id
]) ?>"
>
Eliminar
</a>
Agregamos el botón Eliminar con un color rojo para indicar que es una acción peligrosa mediante la clase btn-danger de bootstrap.
Además en este botón agregamos código javascript para mostrarle una alerta al usuario con lo siguiente: “Are you sure want to delete?” (¿estás seguro de borrar la tarea?). Si el usuario confirma entonces se procede a eliminar la task. El botón debe lucir como en la imagen:
Ahora vamos a implementar el método deleteTask() en nuestro archivo TaskTable.php, de la siguiente manera:
public function deleteTask($id)
{
$this->tableGateway->delete(['id' => (int) $id]);
}
Este método solo recibe el id de la tarea y elimina completamente de la base de datos la información de esa tarea.
Al presionar el botón Eliminar ya no debes ver la tarea.
Por ahora es todo. No desesperen ya viene la última parte, lo prometo.
Saludos y happy coding :)