Loading...

La clase Vista usando MVC en PHP

Creado por superadmin  2014-06-05 22:35:10  Lenguajes & Codigo

MVC

Antes que nada, es importante tener claro qué es MVC.

El modelo–vista–controlador (MVC) es un patrón de arquitectura de software que separa los datos y la lógica de negocio de una aplicación de la interfaz de usuario, así como del módulo encargado de gestionar los eventos y las comunicaciones. Para ello, MVC propone la construcción de tres componentes distintos: el modelo, la vista y el controlador. Por un lado, define componentes para la representación de la información y, por otro, para la interacción del usuario. Este patrón se basa en la reutilización de código y la separación de responsabilidades, lo que facilita el desarrollo y el mantenimiento de las aplicaciones.

Fuente: Wikipedia - Modelo–vista–controlador

La clase View no es más que un contenedor de vistas o código HTML, organizadas en secciones que corresponden a las definidas en el layout. Estas se almacenan temporalmente hasta que es necesario renderizarlas en el cliente.


view.php


abstract class View {

    # Ruta donde se encuentran las vistas.
    private static $_path_view;

    # Contenedor de vistas agrupadas según la sección del layout.
    private static $_container;

    # Nombre del layout (por defecto: default).
    private static $_layout;

    # Extensión de los archivos de vista (ejemplo: .phtml o .php).
    private static $_ext = '.php';

    /**
     * Inicializa la clase y define la ruta de las vistas.
     */
    public static function initialize($path_view, $layout = 'default') {
        self::$_container = array();
        self::$_path_view = $path_view;
        self::$_layout = $layout;
    }

    /**
     * Captura una vista y la devuelve como string.
     */
    private static function _capture($file, $data) {
        ob_start();
        require (self::$_path_view . $file . self::$_ext);
        $view = ob_get_contents();
        ob_end_clean();
        return $view;
    }

    /**
     * Elimina la extensión del archivo si está presente.
     */
    private static function _removeExtention($file) {
        if (substr($file, -strlen(self::$_ext)) == self::$_ext) {
            $file = substr($file, 0, strlen($file) - strlen(self::$_ext));
        }
        return $file;
    }

    /**
     * Guarda una vista en el contenedor.
     */
    public static function keep($file, $data = array(), $alias = NULL) {
        $file = self::_removeExtention($file);
        $view = self::_capture($file, $data);

        empty($alias) ? $key = $file : $key = $alias;

        self::$_container[$key][] = $view . PHP_EOL;
    }

    /**
     * Devuelve el contenido de una vista como string.
     */
    public static function extract($file, $data) {
        $file = self::_removeExtention($file);
        return self::_capture($file, $data);
    }

    /**
     * Inserta una vista desde un string en el contenedor.
     */
    public static function insert($string, $alias, $important = FALSE) {
        if (empty(self::$_container[$alias])) {
            self::$_container[$alias] = array();
        }

        if ($important === FALSE) {
            self::$_container[$alias][] = $string;
        } else {
            array_unshift(self::$_container[$alias], $string);
        }
    }

    /**
     * Muestra una vista almacenada previamente.
     */
    public static function show($view) {
        if (key_exists($view, self::$_container)) {
            return implode('', self::$_container[$view]);
        }
    }

    /**
     * Cambia el layout por defecto.
     */
    public static function setLayout($layout) {
        $layout = self::_removeExtention($layout);
        self::$_layout = $layout;
    }

    /**
     * Renderiza la página usando el layout definido.
     */
    public static function callLayout() {
        require (self::$_path_view . 'layouts' . DIRECTORY_SEPARATOR . self::$_layout . '.php');
    }
}

Developed by Richard Collao Olivares

Software CMS Copyright © 2017 - 2026 All rights reserved