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
Chcę dodać komentarzanielka23-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.