Una soluzione per un sito Web PHP senza un framework

2

Uno dei nostri clienti ci ha chiesto di aggiungere alcune funzionalità dinamiche a un sito Web esistente, costituito da diverse pagine HTML statiche.

Normalmente lavoriamo con un framework MVC (principalmente CodeIgniter), ma in questo caso spostare tutto su un framework richiederebbe troppo tempo.

Poiché non è un grande progetto, non avere la piena funzionalità di un framework non è un problema. Ma la domanda è come mantenere pulito il codice.

La soluzione che ho trovato è quella di dividere il codice nelle librerie (l'API dell'applicazione) e nei modelli. Quindi all'interno di HTML ci saranno solo chiamate API e la leggibilità non sarà sacrificata.

L'ho implementato con una sorta di registro statico (scusate se ho torto, non sono un esperto di pattern design):

<?php
class Custom_framework {

    //Global database instance
    private static $db;

    //Registered models
    private static $models = array();

    //Registered libraries
    private static $libraries = array();

    //Returns a database class instance
    static public function get_db(){

        if(isset(self::$db)){
            //If instance exists, returns it
            return self::$db;
        } else {
            //If instance doesn't exists, creates it
            self::$db = new DB;
            return self::$db;
        }
    }

    //Returns a model instance
    static public function get_model($model_name){

        if(isset(self::$models[$model_name])){
            //If instance exists, returns it
            return self::$models[$model_name];
        } else {
            //If instance doesn't exists, creates it
            if(is_file(ROOT_DIR . 'application/models/' . $model_name . '.php')){
                include_once ROOT_DIR . 'application/models/' . $model_name . '.php';
                self::$models[$model_name] = new $model_name;
                return self::$models[$model_name];
            } else {
                return FALSE;
            }
        }
    }

    //Returns a library instance
    static public function get_library($library_name){

        if(isset(self::$libraries[$library_name])){
            //If instance exists, returns it
            return self::$libraries[$library_name];
        } else {
            //If instance doesn't exists, creates it
            if(is_file(ROOT_DIR . 'application/libraries/' . $library_name . '.php')){
                include_once ROOT_DIR . 'application/libraries/' . $library_name . '.php';
                self::$libraries[$library_name] = new $library_name;
                return self::$libraries[$library_name];
            } else {
                return FALSE;
            }

        }
    }

}

All'interno di HTML, i metodi API sono accessibili in questo modo:

<?php echo Custom_framework::get_library('My_library')->my_method(); ?>

Mi sembra una soluzione pratica. Ma mi chiedo quali siano i suoi svantaggi e quali siano le possibili alternative.

    
posta lortabac 01.07.2012 - 18:27
fonte

1 risposta

2

Il tuo metodo è complicato se imposti solo l'autenticazione / l'autorizzazione per accedere ad alcune pagine statiche;

<?php include "check_access.php" ?>

nella parte superiore delle pagine protette sarebbe tutto ciò che serve, oltre a un modulo di accesso e al gestore del modulo.

Potresti voler usare PHP semplicemente come un meccanismo SSI per rimuovere la piastra di duplicazione HTML (cioè intestazioni, piè di pagina, ecc.) - include s potrebbe essere tutto ciò che serve, anche se potresti voler introdurre un meccanismo di template migliore.

La grande decisione è, hai intenzione di adattare le parti esistenti del sito web per essere dinamico? Quanto ancora dovrai implementare dopo aver fornito questa funzionalità?

Se non hai intenzione di fare molto lavoro sul sito esistente, ed è grande, potrebbe aver senso fare tutto nuovo usando il tuo framework / metodologia preferito. OTOH, PHP senza struttura, fa schifo, quindi rifare tutto con il tuo framework di scelta potrebbe avere senso.

In ogni caso, a meno che ciò che devi implementare sia molto semplice, ti suggerirei di farlo con un framework, anche se non tocchi le vecchie pagine.

    
risposta data 02.07.2012 - 21:28
fonte

Leggi altre domande sui tag