logo

Paleta de lienzo: 隆Hazlo colorido!馃帹

Palette - Constructor visual de p谩ginas, no se requiere t铆tulo en dise帽o.

Demo en vivo Descargar Palette

Scroll

1.4. Empezamos a escribir el framework MVC

10/05/2025, by Ivan

Ya hemos descrito lo suficiente lo que debe tener nuestro framework, ahora es momento de implementarlo. Para comenzar, necesitas un servidor web. Puedes probar con Denwer, pero puede que tengas que actualizar PHP.

Puedes descargar Denwer con PHP 5.5.20 desde esta p谩gina:

https://drupalbook.org/ru/drupal/denwer-obnovlenie-php

o desde GitHub

https://github.com/levmyshkin/denwer-php-5.5.20

El funcionamiento de nuestro framework comenzar谩 desde el archivo index.php, que devuelve instancias desde el registro, llama al controlador necesario y le pasa los resultados del registro. El controlador, a su vez, puede llamar a los modelos que necesite.

MVC

Implementaci贸n de patrones

Existen varias maneras de implementar los patrones que hemos discutido. Nosotros elegiremos una de las posibles, y m谩s adelante puedes cambiar la implementaci贸n de alg煤n patr贸n si lo deseas.

Comencemos. En uno de los art铆culos anteriores analizamos la estructura de nuestro framework, as铆 que ahora debemos crear carpetas seg煤n esa estructura.

Ahora crea el archivo Registry/registry.class.php. En este archivo escribiremos la clase de nuestro registro.

<?php
/**
 * Objeto de registro
 * Implementa el patr贸n Registry y Singleton
 *
 */
class Registry {
     
    private static $objects = array();
    private static $settings = array();
    private static $frameworkName = 'Framework version 0.1';
    private static $instance;
     
    private function __construct() { }
         
    public static function singleton()
    {
        if( !isset( self::$instance ) )
        {
            $obj = __CLASS__;
            self::$instance = new $obj;
        }
        return self::$instance;
    }
     
    public function __clone()
    {
        trigger_error( 'Clonar el registro no est谩 permitido', E_USER_ERROR );
    }

    public function storeObject( $object, $key )
    {
        require_once('objects/' . $object . '.class.php');
        self::$objects[ $key ] = new $object( self::$instance );
    }

    public function getObject( $key )
    {
        if( is_object ( self::$objects[ $key ] ) )
        {
            return self::$objects[ $key ];
        }
    }

    public function storeSetting( $data, $key )
    {
        self::$settings[ $key ] = $data;
    }

    public function getSetting( $key )
    {
        return self::$settings[ $key ];
    }

    public function getFrameworkName()
    {
        return self::$frameworkName;
    }
}
?>

驴C贸mo funciona nuestro Registro y c贸mo almacena objetos?

  • Los objetos se almacenan como un array
  • Cuando se a帽ade un nuevo objeto al registro, se incluye su archivo de clase, se instancia el objeto y se almacena en el array
  • Los objetos se recuperan pasando su clave al m茅todo getObject

驴C贸mo se evita que se cree otra copia del objeto del registro?

  • El constructor es privado, lo que impide que se cree el objeto directamente
  • Clonar el objeto genera un error
  • Si necesitas acceder al objeto de registro desde cualquier parte del framework y no puedes acceder directamente a 茅l, puedes usar el m茅todo est谩tico singleton (Registry::singleton()) para obtener la instancia del registro

Ahora que tenemos el Registro, escribamos index.php, que invocar谩 el funcionamiento del framework y acceder谩 al Registro.

Index.php

Index.php es el punto de entrada de nuestro framework.

M谩s adelante a帽adiremos la funcionalidad para generar URLs amigables (SEO) usando el archivo .htaccess. Por ahora, analicemos el c贸digo de index.php:

<?php
/**
 * Framework
 * Cargador del Framework - act煤a como 煤nico punto de acceso
 *
 */
  
session_start();

define( "APP_PATH", dirname( __FILE__ ) ."/" );
define( "FW", true );

function __autoload( $class_name )
{
    require_once('Controllers/' . $class_name . '/' . $class_name . '.php' );
}

require_once('Registry/registry.class.php');
$registry = Registry::singleton();

print $registry->getFrameworkName();

exit();
?>

Si todo es correcto, deber铆as ver el siguiente mensaje con el nombre de nuestro framework:

Framework version 0.1

Analicemos c贸mo funciona nuestro index.php actualmente:

  • Se inicia una sesi贸n, lo que permite almacenar y acceder a datos desde cualquier parte del framework
  • Definimos la carpeta ra铆z del framework, para que funcione correctamente incluso desde subcarpetas
  • Cargamos controladores usando autoload
  • Incluimos la clase del Registro
  • Y mostramos el nombre del framework