Bienvenidos sean a este post, hoy continuaremos con nuestro controlador y agregaremos la vista para CMS.
Como dijimos debemos completar nuestro controlador, para ello iremos al archivo contactos.php en el directorio app/Controllers y agregaremos primero este metodo:
public function add()
{
$errores = [];
if(isset($_POST['submit']))
{
$nombre = (isset($_POST['nombre']) ? $_POST['nombre'] : null);
$apellido = (isset($_POST['apellido']) ? $_POST['apellido'] : null);
$email = (isset($_POST['email']) ? $_POST['email'] : null);
$tel = (isset($_POST['tel']) ? $_POST['tel'] : null);
if ($nombre=="")
$errores="El nombre no puede ser en blanco.";
if ($apellido=="")
$errores="El apellido no puede ser en blanco.";
if(!filter_var($email, FILTER_VALIDATE_EMAIL))
$errores = "E-mail no valido";
if (count($errores) == 0)
{
$datos = [
'nombre'=>$nombre,
'apellido'=>$apellido,
'correo'=>$email,
'telefono'=>$tel
];
$this->contacto->insert($datos);
Sesion::set('exito','Contacto creado');
Url::redireccionar('/contactos');
}
}
$this->view->render('admin/contactos/add',compact('errores'));
}
Este metodo se encargara de agregar los nuevos contactos, como vinimos haciendo hasta ahora primero agregaremos un array vacio para los errores, luego utilizaremos un condicional donde verificamos si presiono el submit, en caso de ser verdadero procedemos a definir cuatro variables donde recibiran los datos cargados en el formulario y en base a un condicional verifica si existe un valor, si existe tal lo asigna a la variable de lo contrario pasa un valor nulo, veamos cada variable:
- nombre, almacenara el nombre del contacto
- apellido, almacenara el apellido del contacto
- email, almacenara la direccion del correo electronico del contacto
- telefono, almacenara el telefono del contacto
Despues tenemos tres condicionales donde verificaremos si el nombre y apellido estan vacios, en caso de ser verdadero lo agrega a errores informando que no pueden ser en blanco, luego tenemos otro donde verifica si el email informado es valido, en caso de no serlo procede a almacenarlo en errores, a continuacion tenemos otro condicional donde verifica si la longitud de errores es igual a cero, en caso de ser asi procedemos a crear un array llamado datos donde pasaremos todos los datos obtenidos anteriormente y las claves seran los nombres de los campos de nuestra tabla contactos, luego procederemos a ingresarlo por medio del insert del modelo Contacto, crearmos una nueva clave llamada exito donde informamos que se creo el contacto y por ultimo nos redireccionamos nuevamente a la clase, en caso de haber fallado nos volvera a cargar la vista de agregado de contactos pero informando el error que evito la creacion del contacto, procedamos a agregar el siguiente metodo:
public function edit($id)
{
if (!is_numeric($id))
Url::redireccionar('/contactos');
$contacto = $this->contacto->get_contacto($id);
if ($contacto == null)
Url::redireccionar('/404');
$errores = [];
if (isset($_POST['submit']))
{
$nombre = (isset($_POST['nombre']) ? $_POST['nombre'] : null);
$apellido = (isset($_POST['apellido']) ? $_POST['apellido'] : null);
$email = (isset($_POST['email']) ? $_POST['email'] : null);
$tel = (isset($_POST['tel']) ? $_POST['tel'] : null);
if ($nombre=="")
$errores="El nombre no puede ser en blanco.";
if ($apellido=="")
$errores="El apellido no puede ser en blanco.";
if(!filter_var($email, FILTER_VALIDATE_EMAIL))
$errores = "E-mail no valido";
if (count($errores) == 0)
{
$datos = [
'nombre'=>$nombre,
'apellido'=>$apellido,
'correo'=>$email,
'telefono'=>$tel
];
$where = ['id' => $id];
$this->contacto->update($datos, $where);
Sesion::set('exito','Contacto modificado');
Url::redireccionar('/contactos');
}
}
$titulo = 'Editar contacto';
$this->view->render('admin/contactos/edit',
compact('contacto','errores','titulo'));
}
Este metodo tendra algunas similitudes con el anterior pero sus respectivas diferencias tambien, en este caso primero verificamos si el argumento recibido es de tipo numerico en caso de no serlo volvemos a cargar la pagina de contactos, si el condicional anterior no se cumple intentamos obtener el contacto en base al id informado, esto lo hacemos con el metodo get_contacto que vimos en el post anteiror, lo siguiente a esto sera verificar si el metodo anterior nos devolvio un null, en caso de ser verdadero procede a redireccionar al error 404, luego tenemos el array vacio de errores.
Despues del array tenemos el condicional donde verificamos si presiono el submit, esto es muy similar a lo visto en el metodo anterior donde definiremos las mismas variables de la misma forma al metodo add, luego tenemos los mismos condicionales para verificar si el nombre, apellido, y email no son en blanco y validos respectivamente, en caso de no haber ninguno creamos un array llamado datos con toda la informacion anterior pero a diferencia del metodo add aqui crearemos un array llamado where donde pasaremos el id, con todo esto usamos el metodo update del controlador de contactos, luego creamos la clave para indicar su exito y por ultimo nos redireccionamos a los contactos nuevamente, el ultimo tramos del metodo es para mostrar la pagina de edicion y los errores que se cometieron, pasemos a agregar el ultimo metodo:
public function delete($id)
{
if (!is_numeric($id))
Url::redirecccionar('/contactos');
$contacto = $this->contacto->get_contacto($id);
if ($contacto == null)
Url::redireccionar('/404');
$where = ['id' => $contacto->id];
$this->contacto->delete($where);
Sesion::set('exito','Contacto eliminado');
Url::redireccionar('/contactos');
}
Este va a ser el metodo mas sencillo, porque recibe un argumento que sera el id del contacto, al igual que el anterior verificamos que sea numerico, sino no lo es nos vuelve a cargar la pagina, en caso de ser numerico en contacto utiliza al metodo get_contacto, despues tenemos el condicional donde verificamos si el metodo anterior nos devolvio un valor nulo, en caso de ser verdadero nos redirecciona al error 404, por ultimo creamos una variable where para pasar el id, luego usamos el metodo delete del controlador de contactos, y antes de finalizar creamos la clave exito en la sesion para indicar que se elimino el contacto y por ultimo nos volvemos a redireccionar a la pagina de contacttos, con esto pasemos a ver como quedo el codigo de nuestra clase:
contactos.php
<?php
namespace App\Controllers;
use System\ControladorBase;
use App\Modelos\Contacto;
use App\Helpers\Sesion;
use App\Helpers\Url;
class Contactos extends ControladorBase
{
public function __construct()
{
parent::__construct();
if (!Sesion::get('logueado'))
Url::redireccionar('/admin/login');
$this->contacto = new Contacto();
}
public function index()
{
$contactos = $this->contacto->get_contactos();
$titulo='Contactos';
return $this->view->render('admin/contactos/index',
compact('contactos','titulo'));
}
public function add()
{
$errores = [];
if(isset($_POST['submit']))
{
$nombre = (isset($_POST['nombre']) ? $_POST['nombre'] : null);
$apellido = (isset($_POST['apellido']) ? $_POST['apellido'] : null);
$email = (isset($_POST['email']) ? $_POST['email'] : null);
$tel = (isset($_POST['tel']) ? $_POST['tel'] : null);
if ($nombre=="")
$errores="El nombre no puede ser en blanco.";
if ($apellido=="")
$errores="El apellido no puede ser en blanco.";
if(!filter_var($email, FILTER_VALIDATE_EMAIL))
$errores = "E-mail no valido";
if (count($errores) == 0)
{
$datos = [
'nombre'=>$nombre,
'apellido'=>$apellido,
'correo'=>$email,
'telefono'=>$tel
];
$this->contacto->insert($datos);
Sesion::set('exito','Contacto creado');
Url::redireccionar('/contactos');
}
}
$this->view->render('admin/contactos/add',compact('errores'));
}
public function edit($id)
{
if (!is_numeric($id))
Url::redireccionar('/contactos');
$contacto = $this->contacto->get_contacto($id);
if ($contacto == null)
Url::redireccionar('/404');
$errores = [];
if (isset($_POST['submit']))
{
$nombre = (isset($_POST['nombre']) ? $_POST['nombre'] : null);
$apellido = (isset($_POST['apellido']) ? $_POST['apellido'] : null);
$email = (isset($_POST['email']) ? $_POST['email'] : null);
$tel = (isset($_POST['tel']) ? $_POST['tel'] : null);
if ($nombre=="")
$errores="El nombre no puede ser en blanco.";
if ($apellido=="")
$errores="El apellido no puede ser en blanco.";
if(!filter_var($email, FILTER_VALIDATE_EMAIL))
$errores = "E-mail no valido";
if (count($errores) == 0)
{
$datos = [
'nombre'=>$nombre,
'apellido'=>$apellido,
'correo'=>$email,
'telefono'=>$tel
];
$where = ['id' => $id];
$this->contacto->update($datos, $where);
Sesion::set('exito','Contacto modificado');
Url::redireccionar('/contactos');
}
}
$titulo = 'Editar contacto';
$this->view->render('admin/contactos/edit',
compact('contacto','errores','titulo'));
}
public function delete($id)
{
if (!is_numeric($id))
Url::redirecccionar('/contactos');
$contacto = $this->contacto->get_contacto($id);
if ($contacto == null)
Url::redireccionar('/404');
$where = ['id' => $contacto->id];
$this->contacto->delete($where);
Sesion::set('exito','Contacto eliminado');
Url::redireccionar('/contactos');
}
}
Pro ultimo te aconsejo que mantengas siempre el tema de las mayusculas y minusculas, por ejemplo contactos.php, si estas ejecutando Windows no importa tanto porque el sistema operativo no diferencia entre mayusculas y minusculas pero en cambio los basados en Unix, como Linux o MacOS, si lo hacen y esto te permitira ejecutar o no una URL, sino deberas respetar la primera letra en mayusculas.
En resumen, hoy hemos terminado al controlador, hemos visto los tres metodos que usaremos para manejar nuestros contactos, tambien hemos detallado en algunas particularidades de cada uno, tambien observen que es muy similar a cuando trabajamos con la administracion de los usuarios, en el proximo post agregaremos las vistas para poder probarlas, espero les haya gustado sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.


Donación
Es para mantenimento del sitio, gracias!
$1.50
