logo

Dodatni tipovi blokova (EBT) - Novo iskustvo rada sa Layout Builder-om❗

Dodatni tipovi blokova (EBT) – stilizovani, prilagodljivi tipovi blokova: slajdšouvi, kartice sa tabovima, kartice, akordeoni i mnogi drugi. Ugrađena podešavanja za pozadinu, DOM Box, javascript dodatke. Iskusite budućnost kreiranja rasporeda već danas.

Demo EBT moduli Preuzmite EBT module

❗Dodatni tipovi pasusa (EPT) – Novo iskustvo rada sa pasusima

Dodatni tipovi pasusa (EPT) – analogni skup modula zasnovan na pasusima.

Demo EPT moduli Preuzmite EPT module

Scroll

1.4. Pristupamo pisanju MVC-frameworka

26/05/2025, by Ivan

Već smo dovoljno razradili šta treba da imamo u našem framework-u, vreme je da implementiramo naš framework. Za početak vam je potreban web server. Možete probati Denwer, ali možda ćete morati da ažurirate PHP.

Denwer sa PHP 5.5.20 možete preuzeti sa ove stranice:

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

ili sa GitHub-a:

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

Rad našeg framework-a počinje fajlom index.php, koji vraća instance iz registra, poziva odgovarajući kontroler i prosleđuje mu rezultate registra. Kontroler potom može pozivati modele koji su mu potrebni.

MVC

Implementacija paterna

Postoji nekoliko načina da se implementiraju paterni koje smo diskutovali. Izabraćemo jedan od mogućih pristupa, a u budućnosti možete promeniti implementaciju nekog od paterna.

Hajde da počnemo. U jednom od prethodnih članaka smo razmotrili strukturu našeg framework-a, pa sada treba da kreiramo foldere u skladu sa tom strukturom.

Sada napravite fajl Registry/registry.class.php. U ovom fajlu ćemo napisati klasu našeg registra.

<?php
/**
 * Objekt registra
 * Implementira patern Registar i Singleton klasu
 *
 */
class Registry {
     
    /**
     * Niz naših objekata
     * @access private
     */
    private static $objects = array();
     
    /**
     * Niz naših podešavanja
     * @access private
     */
    private static $settings = array();
     
    /**
     * Čitljivo ime našeg framework-a
     * @access private
     */
    private static $frameworkName = 'Framework version 0.1';
     
    /**
     * Instanca našeg registra
     * @access private
     */
    private static $instance;
     
    /**
     * Konstruktor registra
     * @access private
     */
    private function __construct()
    {
     
    }
         
    /**
     * Singleton metod za pristup objektu
     * @access public
     * @return
     */
    public static function singleton()
    {
        if( !isset( self::$instance ) )
        {
            $obj = __CLASS__;
            self::$instance = new $obj;
        }
         
        return self::$instance;
    }
     
    /**
     * Sprečava kloniranje objekta: baca grešku ako dođe do toga
     */
    public function __clone()
    {
        trigger_error( 'Kloniranje registra nije dozvoljeno', E_USER_ERROR );
    }
     
    /**
     * Čuva objekat u registru
     * @param String $object ime objekta
     * @param String $key ključ za niz
     * @return void
     */
    public function storeObject( $object, $key )
    {
        require_once('objects/' . $object . '.class.php');
        self::$objects[ $key ] = new $object( self::$instance );
    }
     
    /**
     * Dohvata objekat iz registra
     * @param String $key ključ niza
     * @return object
     */
    public function getObject( $key )
    {
        if( is_object ( self::$objects[ $key ] ) )
        {
            return self::$objects[ $key ];
        }
    }
     
    /**
     * Čuva podešavanja registra
     * @param String $data
     * @param String $key ključ niza
     * @return void
     */
    public function storeSetting( $data, $key )
    {
        self::$settings[ $key ] = $data;
    }
     
    /**
     * Dohvata podešavanja registra
     * @param String $key ključ niza
     * @return void
     */
    public function getSetting( $key )
    {
        return self::$settings[ $key ];
    }
     
    /**
     * Dohvata ime framework-a
     * @return String
     */
    public function getFrameworkName()
    {
        return self::$frameworkName;
    }
}
?>

Kako naš Registar radi i kako čuva naše objekte?

  • Objekti se čuvaju u nizu
  • Kada se novi objekat doda u registar, fajl klase se učitava, kreira se instanca objekta i dodaje u niz
  • Objekat se vraća pozivom getObject metode sa odgovarajućim ključem

Kako se sprečava kreiranje druge instance registra?

  • Konstruktor je privatni, što onemogućava direktno kreiranje objekta
  • Kloniranje objekta baca grešku
  • Ako želite da pristupite registru iz bilo kog dela framework-a, a nemate instancu, koristite statički metod singleton (Registry::singleton()) da dobijete instancu registra

Sada kada imamo Registar, napišimo index.php koji će pokretati framework i pristupati Registru.

Index.php

Index.php je početna tačka našeg framework-a.

Kasnije ćemo dodati mogućnost za čitljive URL-ove (ČPU) putem .htaccess fajla. Za sada hajde da pogledamo kod index.php:

<?php
/**
 * Framework
 * Loader framework-a - centralna tačka pristupa framework-u
 *
 */
  
// pokrećemo sesiju
session_start();
 
// definišemo konstante
// Definišemo korenski folder framework-a da bismo mogli lako da ga koristimo u bilo kom skriptu
define( "APP_PATH", dirname( __FILE__ ) ."/" );
// Koristićemo ovu konstantu da sprečimo pozivanje skripti van našeg framework-a
define( "FW", true );
 
/**
 * Magična metoda za automatsko učitavanje klasa
 * Omogućava pozivanje potrebnog kontrolera kada je potrebno
 * @param String ime klase
 */
function __autoload( $class_name )
{
    require_once('Controllers/' . $class_name . '/' . $class_name . '.php' );
}
 
// učitavamo naš registar
require_once('Registry/registry.class.php');
$registry = Registry::singleton();
 
// prikazujemo ime framework-a da proverimo da li sve radi
print $registry->getFrameworkName();
 
exit();
?>

Ako je sve u redu, biće prikazan tekst sa imenom našeg framework-a:

Framework version 0.1

Kako index.php trenutno funkcioniše:

  • Pokreće sesiju da bismo mogli čuvati i dobijati podatke u bilo kom delu framework-a
  • Definiše korenski folder framework-a, što omogućava rad i ako framework nije u korenu sajta
  • Učitava kontrolere pomoću automatskog učitavanja
  • Učitava klasu registra
  • Prikazuje ime framework-a