Sei sulla pagina 1di 11

Qu es MVC?

: Es un patrn de arquitectura de software que busca


desacoplar la lgica en 3 capas:

El controlador se encarga de recibir las peticiones que manda la vista.


El modelo es el que define las reglas de negocio en nuestro caso las
consultas a MySQL.
La vista es lo que va a ver el usuario que en nuestro caso la
maquetacin en HTML.

Distribucin de nuestras carpetas

Controller, contendra a todos nuestros controladores. Este est


compuesto por acciones, que en cdigo son mtodos/funciones.
Model, contendra a nuestros modelos y entidades de negocio
View, contendra a nuestras vistas (cdigo HTML)
index.php,

Desarrollo
Requerimientos:
Se requiere un sistema que registre los alumnos, guardando registros
como el nombre, apellidos, sex, correo electrnico y la fecha de
nacimiento. La informacin ser almacenada en una base de datos.
Para la prctica se utilizarn los siguientes componentes:
COMPONENTE

CANTIDA

Computadora personal
Servidor XAMPP
MySQL Workbench
Navegador Web

D
1
1
1
1

Creacin del servicio de base de datos

Primero que todo, es necesario crear la base de datos necesaria para


almacenar el contenido de la aplicacin web.

Figura 1. Script necesario para crear la base de datos del sistema.


Para comenzar, dentro de la carpeta model, crearemos un archivo que
lleve por nombre database.php, ste se utilizar para capturar los
datos referentes a la conexin de la base de datos creada
previamente en MySQL. Deber contener las siguientes lneas de
cdigo:
<?php
class Database
{
public static function Conectar()
{
$pdo
=
PDO('mysql:host=localhost:3306;dbname=colegio;charset=utf8',
'12345');
$pdo->setAttribute(PDO::ATTR_ERRMODE,
PDO::ERRMODE_EXCEPTION);
return $pdo;
}
}

new
'root',

Como se puede apreciar, se definen los datos referentes a la conexin con la


base de datos, como la

direccin del servidor, el nombre de la base de

datos, usuario y la contrasea. Hecho esto, ahora se crear otro archivo con
el nombre de alumno.php que contendr el cdigo siguiente:
<?php
class Alumno
{
private $pdo;
public
public
public
public
public
public
public
public

$id;
$Nombre;
$Apellido;
$Sexo;
$FechaRegistro;
$FechaNacimiento;
$Foto;
$Correo;

public function __CONSTRUCT()


{
try
{
$this->pdo = Database::Conectar();
}
catch(Exception $e)
{
die($e->getMessage());
}
}
public function Listar()
{
try
{
$result = array();
$stm
=
$this->pdo->prepare("SELECT
alumnos");
$stm->execute();
return $stm->fetchAll(PDO::FETCH_OBJ);
}
catch(Exception $e)
{
die($e->getMessage());
}
}
public function Obtener($id)
{
try
{
$stm = $this->pdo

FROM

->prepare("SELECT * FROM alumnos WHERE id


= ?");
$stm->execute(array($id));
return $stm->fetch(PDO::FETCH_OBJ);
} catch (Exception $e)
{
die($e->getMessage());
}
}
public function Eliminar($id)
{
try
{
$stm = $this->pdo
->prepare("DELETE FROM alumnos WHERE id
= ?");
$stm->execute(array($id));
} catch (Exception $e)
{
die($e->getMessage());
}
}
public function Actualizar($data)
{
try
{
$sql = "UPDATE alumnos SET
Nombre

= ?,
Apellido
Correo
Sexo
= ?,
FechaNacimiento = ?
WHERE id = ?";
$this->pdo->prepare($sql)
->execute(
array(
$data->Nombre,
$data->Correo,
$data->Apellido,
$data->Sexo,
$data->FechaNacimiento,
$data->id
)
);
} catch (Exception $e)
{
die($e->getMessage());
}

}
public function Registrar(Alumno $data)
{
try
{

= ?,
= ?,

$sql
=
"INSERT
INTO
(Nombre,Correo,Apellido,Sexo,FechaNacimiento,FechaRegistro)

alumnos

VALUES (?, ?, ?, ?, ?, ?)";


$this->pdo->prepare($sql)
->execute(
array(
$data->Nombre,
$data->Correo,
$data->Apellido,
$data->Sexo,
$data->FechaNacimiento,
date('Y-m-d')
)
);
} catch (Exception $e)
{
die($e->getMessage());
}
}
}

Este archivo, como su propio nombre lo supone, es en referencia al


nombre de la tabla que se encuentra en nuestra base de datos, con
ste cdigo podemos establecer todas las instrucciones en leguaje
SQL para insertar, actualizar y eliminar informacin de la tabla.

Pasaremos a crear las vistas las cuales las haremos por separado el
footer y el header para no estar modificando despus y sea una base
para las dems paginas como se puede ver en lo siguiente:
<!DOCTYPE html>
<html lang="es">
<head>
<title>Anexsoft</title>
<meta charset="utf-8" />
<link rel="stylesheet" href="assets/css/bootstrap.min.css" />
<link rel="stylesheet" href="assets/css/bootstrap-theme.min.css" />
<link rel="stylesheet" href="assets/js/jquery-ui/jquery-ui.min.css" />
<link rel="stylesheet" href="assets/css/style.css" />
<script src="http://code.jquery.com/jquery-1.11.2.min.js"></script>
</head>
<body>
<div class="container">

Despus creamos el archivo footer.php, con el siguiente cdigo en su


interior:
<div class="row">
<div class="col-xs-12">
<hr />
<footer class="text-center well">
<p>Ejemplo desarrollado por <a
href="http://anexsoft.com">Anexsoft</a></p>
</footer>
</div>
</div>
</div>
<script src="assets/js/bootstrap.min.js"></script>
<script src="assets/js/jquery-ui/jquery-ui.min.js"></script>
<script src="assets/js/ini.js"></script>
<script src="assets/js/jquery.anexsoft-validator.js"></script>
</body>
</html>

Como se puede ver solo falta el contenido el cual va hacer nuestro


formulario para el llenado eliminacin y creacin de datos para
nuestra base de datos lo cual vemos en lo siguiente:
<h1 class="page-header">Alumnos</h1>
<div class="well well-sm text-right">
<a class="btn btn-primary" href="?c=Alumno&a=Crud">Nuevo
alumno</a>
</div>
<table class="table table-striped">
<thead>
<tr>
<th style="width:180px;">Nombre</th>
<th>Apellido</th>
<th>Correo</th>
<th style="width:120px;">Sexo</th>
<th style="width:120px;">Nacimiento</th>
<th style="width:60px;"></th>
<th style="width:60px;"></th>
</tr>
</thead>
<tbody>
<?php foreach($this->model->Listar() as $r): ?>
<tr>
<td><?php echo $r->Nombre; ?></td>
<td><?php echo $r->Apellido; ?></td>
<td><?php echo $r->Correo; ?></td>
<td><?php echo $r->Sexo == 1 ? 'Hombre' : 'Mujer'; ?></td>
<td><?php echo $r->FechaNacimiento; ?></td>
<td>

<a href="?c=Alumno&a=Crud&id=<?php echo $r->id; ?


>">Editar</a>
</td>
<td>
<a onclick="javascript:return confirm('Seguro de eliminar este
registro?');" href="?c=Alumno&a=Eliminar&id=<?php echo $r->id; ?
>">Eliminar</a>
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>

Con este archivo, es posible desplegar los registros que se encuentran


disponibles en nuestra base de datos en MySQL, as como tambin
acceso

vnculos

que

permiten

insertar/modificar/eliminar

los

mismos. Ahora crearemos el archivo que contendr el cdigo del


formulario, tendr por nombre alumno-editar.php y contiene:
<h1 class="page-header">
<?php echo $alm->id != null ? $alm->Nombre : 'Nuevo Registro'; ?>
</h1>
<ol class="breadcrumb">
<li><a href="?c=Alumno">Alumnos</a></li>
<li class="active"><?php echo $alm->id != null ? $alm->Nombre : 'Nuevo
Registro'; ?></li>
</ol>
<form id="frm-alumno" action="?c=Alumno&a=Guardar" method="post"
enctype="multipart/form-data">
<input type="hidden" name="id" value="<?php echo $alm->id; ?>" />
<div class="form-group">
<label>Nombre</label>
<input type="text" name="Nombre" value="<?php echo $alm>Nombre; ?>" class="form-control" placeholder="Ingrese su nombre" datavalidacion-tipo="requerido|min:3" />
</div>
<div class="form-group">
<label>Apellido</label>
<input type="text" name="Apellido" value="<?php echo $alm>Apellido; ?>" class="form-control" placeholder="Ingrese su apellido" datavalidacion-tipo="requerido|min:10" />
</div>
<div class="form-group">
<label>Correo</label>
<input type="text" name="Correo" value="<?php echo $alm>Correo; ?>" class="form-control" placeholder="Ingrese su correo
electrnico" data-validacion-tipo="requerido|email" />
</div>
<div class="form-group">

<label>Sexo</label>
<select name="Sexo" class="form-control">
<option <?php echo $alm->Sexo == 1 ? 'selected' : ''; ?>
value="1">Masculino</option>
<option <?php echo $alm->Sexo == 2 ? 'selected' : ''; ?>
value="2">Femenino</option>
</select>
</div>
<div class="form-group">
<label>Fecha de nacimiento</label>
<input readonly type="text" name="FechaNacimiento" value="<?php
echo $alm->FechaNacimiento; ?>" class="form-control datepicker"
placeholder="Ingrese
su
fecha
de
nacimiento"
data-validaciontipo="requerido" />
</div>
<hr />
<div class="text-right">
<button class="btn btn-success">Guardar</button>
</div>
</form>
<script>
$(document).ready(function(){
$("#frm-alumno").submit(function(){
return $(this).validate();

Con lo anterior se ha definido la interfaz grfica de la web, pero ahora


hace falta comunicar la parte de la vista con la del modelo, y en ese
momento entra en juego el controlador, en la carpeta controller
crearemos el archivo alumno.controller.php, contendr el siguiente
cdigo:
<?php
require_once 'model/alumno.php';
class AlumnoController{
private $model;
public function __CONSTRUCT(){
$this->model = new Alumno();
}
public function Index(){
require_once 'view/header.php';
require_once 'view/alumno/alumno.php';
require_once 'view/footer.php';
}
public function Crud(){
$alm = new Alumno();
if(isset($_REQUEST['id'])){
$alm = $this->model->Obtener($_REQUEST['id']);
}
require_once 'view/header.php';

require_once 'view/alumno/alumno-editar.php';
require_once 'view/footer.php';
}
public function Guardar(){
$alm = new Alumno();
$alm->id = $_REQUEST['id'];
$alm->Nombre = $_REQUEST['Nombre'];
$alm->Apellido = $_REQUEST['Apellido'];
$alm->Correo = $_REQUEST['Correo'];
$alm->Sexo = $_REQUEST['Sexo'];
$alm->FechaNacimiento = $_REQUEST['FechaNacimiento'];
$alm->id > 0
? $this->model->Actualizar($alm)
: $this->model->Registrar($alm);
header('Location: index.php');
}
public function Eliminar(){
$this->model->Eliminar($_REQUEST['id']);
header('Location: index.php');
}
}

Por ltimo, definimos un archivo index que se convierta en la raz de


nuestra pgina web, lo nombraremos index.php y contendr el
siguiente cdigo:
<?php
require_once 'model/database.php';
$controller = 'alumno';
// Todo esta lgica hara el papel de un FrontController
if(!isset($_REQUEST['c']))
{
require_once "controller/$controller.controller.php";
$controller = ucwords($controller) . 'Controller';
$controller = new $controller;
$controller->Index();
}
else
{
// Obtenemos el controlador que queremos cargar
$controller = strtolower($_REQUEST['c']);
$accion = isset($_REQUEST['a']) ? $_REQUEST['a'] : 'Index';
// Instanciamos el controlador
require_once "controller/$controller.controller.php";
$controller = ucwords($controller) . 'Controller';
$controller = new $controller;
// Llama la accion
call_user_func( array( $controller, $accion ) );
}

Resultados

Figura 2. Pgina de inicio donde muestra el contenido de los registros que


hasta ahora se han ingresado en nuestra base de datos.

Figura 3. Formulario de registro para insertar un nuevo alumno en la base de


datos.

Potrebbero piacerti anche