Extra Block Types (EBT) - Nueva experiencia con Layout Builder❗

Extra Block Types (EBT): tipos de bloques con estilo y personalizables: Presentaciones de diapositivas, Pestañas, Tarjetas, Acordeones y muchos más. Configuraciones integradas para fondo, DOM Box y plugins de JavaScript. Experimenta hoy el futuro de la construcción de diseños.

Módulos de demostración EBT Descargar módulos EBT

❗Extra Paragraph Types (EPT) - Nueva experiencia con Paragraphs

Extra Paragraph Types (EPT): conjunto de módulos basado en párrafos de forma análoga.

Módulos de demostración EPT Descargar módulos EPT

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