Hola x_atrix ¿cómo estás? mira, hice lo que me dijiste y anduvo, te muestro a ver cómo lo ves:
RolesController.php
Código PHP:
Ver originalpublic function add(){
if($this->checkUser()){
if (isset($_POST['btnaceptar'])) { if($this->checkDates()) {
$rol = new Rol(0, $_POST['txtnom']);
$id= $this->modelo->guardame($rol);
Session
::set("msg",(isset($id)) ?
"Rol Creado" : Session
::get('msg')); header("Location:index.php?c=roles&a=index"); }
}
$this->redirect(array('add.php')); }
}
public function edit(){
if($this->checkUser()){
Session::set("id",$_GET['p']);
if (Session
::get('id')!=null && isset($_POST['btnaceptar'])){ if($this->checkDates()) {
$rol= new Rol($_POST['hid'],$_POST['txtnom']);
$id= $this->modelo->modificame($rol);
Session
::set("msg",(isset($id)) ?
"Rol Editado" : Session
::get('msg')); header("Location:index.php?c=roles&a=index"); }
}
"rol" => $this->modelo->obtenerPorId(Session::get('id'))
));
}
}
RolModel.php
Código PHP:
Ver originalpublic function guardame($rol){
if($this->checkRol($rol->getNombre())){
Session::set('msg', 'El rol ya existe');
return null;
}
$sql="insert into roles(rolNombre) values(?)";
$consulta = $this->getBD()->prepare($sql);
$consulta->execute(array($rol->getNombre())); return ($consulta->rowCount() > 0) ? $this->getBD()->lastInsertId() : null;
}
public function modificame($rol){
$aux = $this->obtenerPorId($rol->getId());
if(!$rol->equals($aux)){
if($this->checkRol($rol->getNombre())){
Session::set('msg', 'El rol ya existe');
return null;
}
}
$sql="update roles set rolNombre=? where rolId=?";
$consulta = $this->getBD()->prepare($sql);
$consulta->execute(array($rol->getNombre(),$rol->getId())); return ($consulta->rowCount() > 0) ? $rol->getId() : null;
}
private function checkRol($nombre) {
$query = 'SELECT rolId FROM roles WHERE rolNombre = ?';
$consulta = $this->getBD()->prepare($query);
$consulta->execute([$nombre]);
// Indicar si hay algo en la base de datos con este nombre
return $consulta->rowCount() > 0;
}
y lo único que agregue fue el equals a la clase Rol:
Código PHP:
Ver original<?php
namespace Clases;
class Rol {
private $id;
private $nombre;
function getId() {
return $this->id;
}
function getNombre() {
return $this->nombre;
}
function setNombre($nombre) {
$this->nombre = $nombre;
}
function __construct($xid, $xnombre) {
$this->id = $xid;
$this->nombre = $xnombre;
}
public function equals(Rol $obj){
return $this->nombre == $obj->nombre;
}
}
Con respecto a la mejora que me dijiste lo tengo muy presente además eso me serviría muy bien para el guardame, modificame y eliminame, pero te pregunto: ¿cómo haría para el obtenerPorId o los obtenerDatos? lo único que se me ocurre es poner un constructor vacío, a las clases conozcan a sus modelos, pero quiero una opinión tuya con respecto a eso, por otro lado Mil gracias, luego adaptare lo que me dijiste.
PD: lástima que php no tenga para sobreescribir el equals como java