Anuncios

Bienvenidos sean a este post, hoy veremos como aplicar a MVC.

Anuncios
Anuncios

Para entender este concepto vamos a crear una aplicacion para recuperar unos contactos de un directorio, para ello usaremos una tabla de mariadb donde estara la informacion y nuestra pagina sacara la informacion de esta, si vienen de los posts anteriores seguramente tienen una base creada y una tabla con algo de informacion en la misma pero en el caso de no tenerla lo unico que vas a necesitar prioritariamente es tener un apache, php y mariadb instalados, si cumplis estos tres requisitos ingresa con el interprete desde una terminal y ejecuta el siguiente comando:

MariaDB [(none)]> create database curso;
Anuncios

Esto creara la base y luego procederemos a crear la siguiente tabla dentro de esta base:

MariaDB [(none)]> create table curso.contactos (
    -> id int(20) NOT NULL AUTO_INCREMENT PRIMARY KEY,
    -> nombre varchar(20) NOT NULL,
    -> apellido varchar(20) NOT NULL,
    -> telefono int(12) NOT NULL,
    -> correo varchar(255) NULL DEFAULT "No informado");
Anuncios
Anuncios

Esta nos permitira crear una nueva tabla donde almacenaremos los contactos, en este caso usaremos un campo como id interno que no tendra relacion con ninguno de los anteriores dado que lo haremos la clave primaria pero sera para tener mejor performance de nuestras busquedas, despues almacenaremos tres campos obligatorios como son el nombre, apellido y telefono respectivamente y el unico como opcional va a ser la direccion de correo del contacto al cual le agregaremos una valor predeterminado para cuando no sea informado, si lo corren se debera crear correctamente nuestra tabla, pasemos a llenarla con algunos contactos y para ello usaremos el comando insert into, les paso un par de ejemplos:

MariaDB [(none)]> insert into curso.contactos
    -> set nombre='Martin', apellido='Miranda',
    -> telefono=55992233, correo='tinchicus@gmail.com';
MariaDB [(none)]> insert into curso.contactos
    -> set nombre='Enzo', apellido='Tortore',
    -> telefono=44332299, correo='elgary@tinchicus.com';
MariaDB [(none)]> insert into curso.contactos
    -> set nombre='Ariel', apellido='Polizzi',
    -> telefono=65889912;
MariaDB [(none)]> insert into curso.contactos
    -> set nombre='DarkZero', apellido='Aleman',
    -> telefono=44990011;
Anuncios
Nota: 
Estos son de ejemplos pero pueden completar con otros valores si lo desean.
Anuncios

Con esto ya tenemos nuestra tabla confeccionada y solo nos resta crear las paginas que usaremos para consultar, para ello usaremos a MVC, para esto debemos crear en la raiz de nuestro servidor apache una serie de directorios y archivos, como en este curso usamos a Debian como S.O la ubicacion predeterminada del raiz de nuestro servidor es:

/var/www/html/
Anuncios

En este directorio crearemos la siguiente estructura de directorios:

/var/www/html/contactos/
/var/www/html/contactos/controlador/
/var/www/html/contactos/modelo/
/var/www/html/contactos/vista/
Anuncios

Dentro de cada directorio vamos a crear los siguientes archivos:

/var/www/html/contactos/index.php
/var/www/html/contactos/controlador/control.php
/var/www/html/contactos/modelo/db.php
/var/www/html/contactos/vista/index.php
Anuncios

Recuerden que para poder crear todos estos directorios y archivos deben utilizar sudo o hacerlo como root, con esta estructura creada vamos a agregar el codigo a los archivos:

db.php

<?php

class db
{
	public static function conexion($host,$usuario,$clave,$base)
	{
		$con = mysqli_connect($host,$usuario,$clave,$base);
		return $con;
	}
}

?>
Anuncios

Este sera el encargado de conectarnos a la base de datos, para ello crearemos una clase llamada db y dentro tendremos un metodo de tipo static para la conexion donde recibira los cuatros datos necesarios como son:

  • El host a conectarse, SPOILER: usaremos a localhost.
  • El usuario para conectarse
  • La clave del usuario
  • La base que debe utilizar, la cual sera la creada anteriormente o la que usen
Anuncios

Con estos cuatro datos luego crearemos un objeto donde almacenaremos la conexion realizada por medio de mysqli_connect y por ultimo lo devolveremos, como es una funcion estatica (static) no es necesario usar el $this dado que sera el mismo objeto para todas las veces que lo usemos, con esto tenemos a la parte correspondiente al Model o Modelo, pasemos al siguiente codigo:

control.php

<?php

class control
{
	private $con;
	private $personas;
	private $datos;
	
	public function __construct($conexion)
	{
		$this->con=$conexion;
	}

	function getContacto()
	{
		$query="select * from contactos";
		$qBuscar = mysqli_query($this->con, $query);
		while($linea=mysqli_fetch_array($qBuscar))
		{
			$this->personas[]=$linea;
		}
		return $this->personas;
	}

	public function index()
	{
		$this->datos = $this->getContacto();
		require "vista/index.php";
	}
}

?>
Anuncios
Anuncios

Este codigo es un poco mas complejo y se encargara de «controlar» todo el resto de nuestra pagina, para este caso vamos a crear una clase llamada control, donde primero crearemos tres variables, donde la primera sera para la conexion, la segunda para almacenar los contactos de la tabla y por ultimo lo usaremos para almacenar a estos, ya veremos porque, nuestra primera funcion sera un constructor de nuestra clase y en este caso recibiremos el objeto que generamos para la conexion, sera el objeto que generamos en el archivo anterior, y en este caso se lo pasamos a la variable con generada, recuerden que el this es para que utilice el objeto que generaremos mas adelante, con esto tenemos asignada la conexion para manejarla, la siguiente funcion es para obtener todos los contactos, para este caso primero usaremos una variable que almacenara el query de busqueda, luego crearemos otra variable donde por medio de mysqli_query le pasaremos la conexion y el query que generamos anteriormente, despues usamos a while para para que pase por todo el resultado obtenido en qBuscar, lo que haremos luego sera almacenar cada «linea» en el array personas, volvemos a usar el this para que se asigne al objeto correspondiente, recuerden usar los corchetes para que asigne una posicion automaticamente cada vez que agregamos un nuevo valor, por ultimo devolveremos el objeto final con toda la informacion, hasta aqui tenemos la funcion constructora de la clase y la encargada de obtener todos los valores pasemos a ver la ultima.

Anuncios

En este caso el metodo sera el encargado de mostrar la pagina que devolvera la informacion, para este caso vamos a utilizar la tercer variable (datos) a la cual le asignaremos el objeto que genera la funcion anterior (getContacto) y una vez hecho esto por medio de require llamaremos al archivo almacenado en el directorio vista, pasemos a hablar sobre este:

vista/index.php

<html>
<title>Lista de contactos</title>

<?php

foreach($this->datos as $linea)
{
	echo "Contacto: " . $linea['apellido'] . ", ";
	echo $linea['nombre'] . "<br>";
	echo "Telefono: " . $linea['telefono'] . "<br>";
	echo "Correo: " . $linea['correo'] . "<br>";
	echo "*************************<br>";
}
?>
</html>
Anuncios
Anuncios

En este caso tenemos un codigo HTML donde primero estableceremos el codigo mas basico que se puede utilizar, tenemos un titulo como dato anecdotico, despues tenemos el bloque de PHP, para esta ocasion utilizamos foreach pero seguramente se preguntaran que hace datos sino lo pasamos en ningun momento? Esto es gracias a require porque adopta todas las variables que estan en el mismo bloque (o globales) antes de ser invocado, volviendo al bucle usaremos una nueva variable llamada linea, dentro del bloque del foreach, usaremos a echo para mostrar un texto, y observen que para obtener el valor utilizamos el nombre del campo que deseamos recuperar, como es una pagina HTML utilizamos a <br> para que haga un salto de linea, con esto ya podemos mostrar todos los datos en pantalla solo nos resta el archivo que llamara a todo, es decir el index.php que esta en el directorio raiz, veamos el codigo:

index.php

<?php

require "./modelo/db.php";
require "./controlador/control.php";

$con = db::conexion("<host>","<usuario>","<clave>","<base>");
$control = new control($con);
$control->index();

?>
Anuncios

En este caso tenemos dos llamadas a require donde primero llamaremos a db.php y luego a control.php, lo siguiente es crear un objeto donde almacenaremos la conexion y para ello haremos un llamado a la funcion estatica dentro de la clase donde debemos pasar los datos del host (deberia ser localhost), el usuario de conexion a la base, la clave y la base que esten usando, despues si crearemos un nuevo objeto llamado control por medio de new y le pasaremos la conexion creada anteriormente, por ultimo llamaremos al metodo index para que nos muetre el resultado, veamos como es el resultado final

Anuncios

Como pueden ver tenemos una hermosa pagina que nos devuelve todo el contenido de nuestra pagina y este es controlado por MVC, como dijimos esto nos permite tener cada segmento de la pagina por separado permitiendo que trabajemos con ella sin impactar en el resto, aunque es un ejemplo bastante simple para entender la practicidad de trabajar asi.

Anuncios

En resumen, hoy hemos visto como aplicar MVC, hemos creado una pequeña tabla para trabajar, hemos agregado algunos contactos, luego hemos creado la estructura de directorios, despues los archivos, hemos agregado el codigo de cada uno de ellos, explicamos que funcion hacen cada uno y como colaboran entre ellos, por ultimo hemos visto el resultado final, espero les haya sido util 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.

Anuncios
pp258

Donación

Es para mantenimento del sitio, gracias!

$1.50