Anuncios

Bienvenidos sean a este post, hoy completaremos el proyecto con varias clases para extraer informacion de nuestras bases.

Anuncios

Hasta el post anterior hemos creado la base para poder conectarnos a la base y poder manipularla pero hoy nos centraremos en crear el modelo que nos servira de interfaz para esta clase, como va a ser una base nos permitira otras clases a futuro, pero vamos a centrarnos en esta nueva clase y para ello en el directorio system crearemos un nuevo archivo que llamaremos ModeloBase.php, agreguemos el siguiente codigo a este archivo:

ModeloBase.php

<?php

namespace System;

use App\Config;
use App\Helpers\Database;

class ModeloBase
{
        protected $db;

        public function __construct()
        {
                $config = Config::get();
                $this->db = Database::get($config);
        }
}
Anuncios
Anuncios

Como vinimos haciendo hasta ahora, primero establecemos el namespace y luego importamos las clases que necesitaremos para nuestra clase, en este caso el de configuracion y la de base de datos respectivamente, luego tenemos nuestra clase en si donde definiremos una variable para la base, seguido de un constructor donde obtendremos todos los datos de nuestra clase de configuracion y lo almacenaremos en una variable llamada config, luego usaremos a la variable creada primero y obtendremos todos los valores de get de la clase Database y le pasaremos como argumento a la variable config antes definida.

Anuncios
Nota:
Vamos a asumir que ya tienen la base y la tabla creada con la informacion, en caso contrario les recomiendo visitar este post donde creamos la base y tabla que usaremos a partir de aqui.
Anuncios

Nuestro siguiente paso sera el primer modelo para poder visualizar todo lo que realizamos hasta ahora, para ello debemos ir al directorio app y dentro de crearemos otro directorio llamado Modelos, dentro de este haremos un nuevo archivo llamado Contacto.php, al cual le agregaremos el siguiente codigo:

Contacto.php

<?php

namespace App\Modelos;

use System\ModeloBase;

class Contacto extends ModeloBase 
{
        public function getContactos()
        {
                return $this->db->select('* FROM contactos');
        }
}
Anuncios

Como siempre primero establecemos nuestro namespace, lo siguiente sera importar a la clase que hicimos anteriormente, luego definimos nuestra clase siendo heredera de la importada, dentro tenemos un metodo para obtener todos los contactos, para ello usaremos al metodo select de la clase Database, en este caso enviamos solamente los campos a buscar y desde que tabla, nuestro siguiente paso sera mostrarlo y para ello debemos hacerlo desde un controlador, para ello debemos ir al directorio Controllers en app y crearemos un nuevo archivo llamado contactos.php, a este le agregaremos el siguiente codigo:

contactos.php

<?php

namespace App\Controllers;

use System\ControladorBase;
use App\Modelos\Contacto;

class Contactos extends ControladorBase
{
        public function index()
        {
                $contactos = new Contacto();
                $registros = $contactos->getContactos();

                return $this->view->render('contactos/index',
                                compact('registros'));
        }
}
Anuncios
Anuncios

Lo mismo de siempre, primero establecemos el namespace y seguido de la clase que importaremos para esta clase, lo siguiente sera definir a esta nueva clase la cual sera heredera de ControladorBase, dentro definiremos un metodo llamado index, en este primero crearemos un objeto llamado contactos el cual sera de la clase Contacto, despues definiremos una variable llamada registros que contendra el valor devuelto del metodo getContactos del objeto anterior, por ultimo devolveremos el resultado del metodo render al cual le pasaremos tambien los registros antes obtenidos pero reducidos gracias a compact, solo nos resta la vista que mostrara finalmente todo y para ello debemos crear un directorio llamado contactos en el directorio Views dentro de app, con este nuevo directorio creado haremos un nuevo archivo que llamaremos index.php y le agregaremos el siguiente codigo:

index.php

<?php

if (isset($registros))
{
        foreach($registros as $linea)
                echo $linea->apellido . ", " 
                        . $linea->nombre  . "<br>";
}
Anuncios

En este codigo verificamos que el argumento recibido contenga algun valor, en caso de ser verdadero pasa por todos los registros de este argumento y le decimos que nos muestre los valores pertenecientes al campo apellido y nombre, para probarlo debemos usar la siguiente URL:

http://localhost:8000/contactos
Anuncios

Y se deberia ver algo similar a esto

Anuncios

Si lograron lo mismo, Felicitaciones!!!! Porque ahora si tenemos una verdadera aplicacion que utiliza MVC y se ajusta dinamicamente a los datos de nuestra tabla pero esto es solo el comienzo en los proximos posts lo iremos mejorando, veamos como quedo la estructura hasta el momento de nuestro proyecto:

tinchicus@dbn001vrt:~/lenguajes/PHP/proyecto$ tree
.
├── app
│   ├── Config.php
│   ├── Controllers
│   │   ├── contactos.php
│   │   └── inicio.php
│   ├── Helpers
│   │   └── Database.php
│   ├── Modelos
│   │   └── Contacto.php
│   └── Views
│       ├── 404.php
│       ├── contactos
│       │   └── index.php
│       ├── default.php
│       └── tinchicus.php
├── composer.json
├── composer.lock
├── system
│   ├── ControladorBase.php
│   ├── ModeloBase.php
│   ├── Route.php
│   └── View.php
├── vendor
│   ├── autoload.php
│   ├── composer
│   │   ├── autoload_classmap.php
│   │   ├── autoload_namespaces.php
│   │   ├── autoload_psr4.php
│   │   ├── autoload_real.php
│   │   ├── autoload_static.php
│   │   ├── ClassLoader.php
│   │   ├── installed.json
│   │   ├── installed.php
│   │   ├── InstalledVersions.php
│   │   ├── LICENSE
│   │   └── platform_check.php
│   ├── filp
│   │   └── whoops
│   │       ├── CHANGELOG.md
│   │       ├── composer.json
│   │       ├── LICENSE.md
│   │       ├── SECURITY.md
│   │       └── src
│   │           └── Whoops
│   │               ├── Exception
│   │               │   ├── ErrorException.php
│   │               │   ├── Formatter.php
│   │               │   ├── FrameCollection.php
│   │               │   ├── Frame.php
│   │               │   └── Inspector.php
│   │               ├── Handler
│   │               │   ├── CallbackHandler.php
│   │               │   ├── HandlerInterface.php
│   │               │   ├── Handler.php
│   │               │   ├── JsonResponseHandler.php
│   │               │   ├── PlainTextHandler.php
│   │               │   ├── PrettyPageHandler.php
│   │               │   └── XmlResponseHandler.php
│   │               ├── Resources
│   │               │   ├── css
│   │               │   │   ├── prism.css
│   │               │   │   └── whoops.base.css
│   │               │   ├── js
│   │               │   │   ├── clipboard.min.js
│   │               │   │   ├── prism.js
│   │               │   │   ├── whoops.base.js
│   │               │   │   └── zepto.min.js
│   │               │   └── views
│   │               │       ├── env_details.html.php
│   │               │       ├── frame_code.html.php
│   │               │       ├── frame_list.html.php
│   │               │       ├── frames_container.html.php
│   │               │       ├── frames_description.html.php
│   │               │       ├── header.html.php
│   │               │       ├── header_outer.html.php
│   │               │       ├── layout.html.php
│   │               │       ├── panel_details.html.php
│   │               │       ├── panel_details_outer.html.php
│   │               │       ├── panel_left.html.php
│   │               │       └── panel_left_outer.html.php
│   │               ├── RunInterface.php
│   │               ├── Run.php
│   │               └── Util
│   │                   ├── HtmlDumperOutput.php
│   │                   ├── Misc.php
│   │                   ├── SystemFacade.php
│   │                   └── TemplateHelper.php
│   └── psr
│       └── log
│           ├── composer.json
│           ├── LICENSE
│           ├── Psr
│           │   └── Log
│           │       ├── AbstractLogger.php
│           │       ├── InvalidArgumentException.php
│           │       ├── LoggerAwareInterface.php
│           │       ├── LoggerAwareTrait.php
│           │       ├── LoggerInterface.php
│           │       ├── LoggerTrait.php
│           │       ├── LogLevel.php
│           │       ├── NullLogger.php
│           │       └── Test
│           │           ├── DummyTest.php
│           │           ├── LoggerInterfaceTest.php
│           │           └── TestLogger.php
│           └── README.md
└── webroot
    └── index.php

26 directories, 82 files
tinchicus@dbn001vrt:~/lenguajes/PHP/proyecto$
Anuncios

Recuerden que el directorio vendor es el generado por Composer para nuestras dependencias, por ultimo les adjunto los archivos que estuvimos trabajando:

Anuncios

En resumen, hoy hemos terminado el proyecto, por lo menos en su forma mas basica, donde tenemos aplicado el MVC, y no solamente nos trae paginas sino que tambien nos muestra informacion de una tabla en una base de datos, espero les haya gustado tanto como a mi 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