PHP – Prosty framewework – Część 2

PHP – Prosty framewework – Część 2

W części pierwszej napisaliśmy podstawowe elementy frameworka. Pora zająć się rozbudową naszego projektu. Do efektywnej pracy potrzebne są dodatkowe moduły zapewniające obsługę baz danych, sesji czy operacji wejścia. Poniżej opiszę je pokrótce.

Dodatkowe moduły

system/libraries/database.php

Moduł zapewniający obsługę baz danych. Zwrócone dane przekazywane są w postaci obiektów.

<?php

class database_core
{
    protected $config;

    public static function & instance()
    {
        static $instance;
        if(!isset($instance))
        {
            $instance = new database();
        }
        return $instance;
    }

    protected function __construct() {}

    public function connect($config=array())
    {
        $this->config=(object)$config;
        mysql_connect($this->config->host, $this->config->user, $this->config->password);
        @mysql_select_db($this->config->dbname);
        mysql_query("SET NAMES 'utf8'");
    }

    public function query($sql = '')
    {
        $result = mysql_query($sql);
        if(mysql_num_rows($result) > 0)
        {
            $temp = array();
            while($r = mysql_fetch_object($result))
            $temp[]=$r;
            return $temp;
        }
        else false;
    }

    public function execute($sql = '')
    {
        mysql_query($sql);
    }

    public function last_id()
    {
        return mysql_insert_id();
    }
}

system/libraries/session.php

Moduł tworzy sesję. Ponadto dostarcza metody umożliwiające zapisywanie, pobieranie oraz usuwanie wartości.

<?php

class session_core
{
    public static function & instance()
    {
        static $instance;
        if(!isset($instance))
        {
            $instance = new session();
            session_start();
        }
        return $instance;
    }

    protected function __construct() { }

    public function set($key,$value)
    {
        $_SESSION[$key]=$value;
    }

    public function get($key,$default=false)
    {
        if (isset($_SESSION[$key]))
            return $_SESSION[$key];
        else
            return $default;
    }

    public function delete($key)
    {
        unset($_SESSION[$key]);
    }
}

system/libraries/input.php

Moduł wejścia. Zapewnia dostęp do zmiennych $_POST, $_GET. Warto go wzbogacić o funkcje zarządzające bezpieczeństwem.

<?php

class input_core
{
    public static function & instance()
    {
        static $instance;
        if(!isset($instance))
        {
            $instance = new input();
        }
        return $instance;
    }

    public function post($key)
    {
        return $_POST[$key];
    }

    public function get($key)
    {
        return $_GET[$key];
    }
}

Status

Mamy do dyspozycji już wystarczająco kompletne narzędzie by wykonać całą stronę internetową. Zgodnie z tradycją udostępniłem przykład w załączniku. Dalszych inspiracji w rozbudowie frameworka polecam poszukiwać również w innych projektach. Napiszę na ten temat coś jeszcze jeśli spotkam się z zainteresowaniem.

Komentarze

  • anielka23-07-2009

    Fajnie widzieć, że ktoś nowy zabiera się do dzielenia wiedzą. sam jakiś czas temu się za to zabierałem, ale nie starczyło czasu (i zapału). widzę, że dysponujesz dużą praktyczną wiedzą i pomożesz wielu początkującym wiele zrozumieć.. starzy wyjadacze może niewiele się nauczą, ale też z tego co widzę znajdą pomoc w podbramkowej sytuacji i może poszerzą horyzonty myślowe. mnie się podoba, będziesz więc śledzon ;D ps. zmień token, bo ten rozpracuje początkujący – proponuję losową odległość i obrót cyfr o losowy kąt, by trudniej było analizować token programowo.

  • Marcin Baszczewski23-07-2009

    Dziękuję za komentarz. Twoje słowa zachęcają do dalszej pracy. Oczywiście będę kontynuował prowadzenie bloga i w najbliższym czasie możesz się spodziewać kolejnych notatek. Pozdrawiam.

  • Lupinek27-07-2009

    Twoje artykuły są naprawdę dobrze napisane i profesjonalnie przygotowane, czekam na kolejne :) I po cichu liczę na coś o QT4, nie tylko same źródła ;) I token w ogóle bym zlikwidował – utrudnia życie wyłącznie ludziom, botom wcale. Zamiast tego parsowanie komentarzy skryptem na przykład sblam.

  • Marcin Baszczewski28-07-2009

    Dziękuję. Jestem zwolennikiem biblioteki QT więc w w przyszłości możesz oczekiwać materiałów na ten temat. Co do tokena: to zabezpieczenie wydało mi się najszybsze w implementacji dlatego z niego skorzystałem. Możliwe że je zmienię.

  • Maciej01-02-2010

    Artykuł super, będzie jakaś kontynuacja? Jest to temat dość szeroki i rzadko poruszany na podstawowym stopniu trudności, aby się czegoś nauczyć trzeba zaczynać u źródła, lecz większość tego nie rozumie albo pisze o tyle zawile, że nie idzie pojąć.

  • Marcin Baszczewski07-02-2010

    Maciek jeśli sobie tego życzysz mógłbym dodać tu jeszcze jedną notkę. Kwestia pomysłów. Wiesz może o czym chciałbyś poczytać?

  • Planetmr20-12-2011

    Dzięki za czas, opis bardzo prof. Fajnie jak by zrobić trzecią część z następnym poziomem np. prezentacja produktu ?
    Dzięki i pozdro

  • Marcin Baszczewski20-12-2011

    Hej Planetmr. Możesz dokładniej opisać co masz na myśli? Zobaczę co da się zrobić.

  • Planetmr21-12-2011

    Siemka,
    Nie wiem czy zbyt ambitnie ale np. obsługę kategorii , tworzenie drzew.

  • Zuberek25-12-2011

    Świetna sprawa, bardzo pomocne przy tworzeniu własnego frameworka. Ja bym natomiast prosił o rozbudowę go o system logowania i panelu administratora. Ale taki porządny, dobrze zabezpieczony przed SQL Injection i innymi atakami. Bardzo przydają się również opisy kodu, dlaczego jest tak, a nie inaczej. No a chociaż komentarze.
    Pozdrawiam i czekam na kolejną część! ;) Święta świętami, ale przyjemnie jest sobie czasami „pokodzić” ;)

  • Zuberek25-12-2011

    To jeszcze może przykład właśnie tego, o co prosił @Planetmr – czyli przykładowe pokazanie katalogu produktów, sposób ich wyświetlania i edytowania/dodawania.

Chcę dodać komentarz