Aplikacja umożliwiająca automatyzację pracy z aplikacjami Propel i DBDesigner
Opisywane już na naszych łamach narzędzia
DBDesigner oraz Propel znacznie upraszczają
implementację aplikacji internetowej
stosującej bazę danych. W celu dalszej automatyzacji
współpracy DBDesignera i Propela opracowałem
skrypt dbframe. Dzięki dbframe utworzenie
bazy danych oraz wygenerowanie aktywnych
rekordów ORM sprowadza się do edycji jednego
pliku konfiguracyjnego oraz uruchomienia skryptu
wsadowego run.bat.
Program DBDesigner służy do wizualnego
tworzenia modelu bazy danych. Wykorzystując
metodę \”przeciągnij i upuść\” oraz okna dialogowe,
ustalamy strukturę bazy danych: tabele, kolumny
oraz relacje. Druga aplikacja, Propel, generuje na
podstawie odpowiedniego pliku XML tzw. aktywne
rekordy – klasy PHP, które umożliwiają łatwy
dostęp do bazy danych.
DBDesigner i Propel mogą współpracować.
Umożliwia to opracowana przez Jonathana Grahama
transformacja XSLT. Ponieważ często wykorzystuję
te narzędzia, opracowałem skrypt dbframe,
który automatyzuje całe zadanie.
dbframe – instrukcja użytkownika
Zadania skryptu dbframe
Skrypt dbframe wykonuje następujące zadania:
- konwertuje format modelu bazy danych opracowanego
w programie DBDesigner do formatu
aplikacji Propel, - uruchamia aplikację Propel i generuje obiekty
ORM dla zadanego modelu, - tworzy na serwerze MySQL bazę danych odpowiadającą
zadanemu modelowi, - tworzy na serwerze MySQL konto dostępu do
nowej bazy danych.
Pliki wejściowe
Plikami wejściowymi skryptu dbframe są:
- input/conf.ini
- model bazy danych np. input/db.xml
Plik conf.ini zawiera informacje konfiguracyjne:
;database
database = dbframe
username = dbframeadmin
password = dbframepass
filename = db.xml
;MySQL root
root = root
rootpassword = AX1BY2CZ3
Rola parametrów jest następująca:
- database – nazwa tworzonej bazy danych
- username – konto dostępu do tworzonej bazy danych
- password – hasło konta username
- filename – nazwa pliku XML opracowanego w DBDesigner
- root – nazwa konta administratora serwera MySQL
- rootpassword – hasło konta root serwera MySQL
Wyniki
Skrypt run.bat utworzy plik {stala}create-db.bat{/stala}, pliki
w folderze {stala}output/propel{/stala} oraz bazę danych.
Plik {stala}create-db.bat{/stala} służy do utworzenia nowej,
pustej bazy danych na serwerze MySQL. Folder
output/propel zawiera wyniki pracy generatora
Propel. Na serwerze MySQL zostanie następnie
utworzona pusta baza danych o podanej nazwie
(w przykładzie: dbframe) oraz konto dostępu
{stala}dbframeadmin{/stala} o haśle {stala}dbframepass{/stala}.
UWAGA! Jeśli baza o podanej nazwie istniała,
to została usunięta. W jej miejsce tworzona jest
nowa baza danych, odpowiadająca modelowi
zawartemu w pliku model.xml.
Przykłady
Analiza pliku log
Baza danych przedstawiona na rysunku 1
przechowuje informacje o frazach, które spowodowały
wizyty w naszym serwisie za pośrednictwem
wyszukiwarki Google. Korzystając z programu
DBDesigner, narysuj ten model (z rysunku 1).
Zapisz go do pliku o nazwie {stala}analiza-log.xml{/stala} (plik
ten należy umieścić w folderze {stala}input/{/stala}).
Następnie w pliku {stala}conf.ini{/stala} wprowadź następujące
dane:
;database
database = log
username = logadmin
password = logpass
filename = analiza-log.xml
;MySQL root
root = root
rootpassword = AX1BY2CZ3
Oczywiście parametr rootpassword musi być
zgodny z hasłem administratora na twoim serwerze
MySQL.
Uruchom teraz skrypt run.bat. W folderze
{stala}output/propel/build/classes{/stala} powstanie folder log/.
Znajdziesz w nim klasy wygenerowane przez Propel.
Na serwerze MySQL pojawi się baza danych
o nazwie log (rysunek 2).
Pamiętaj, by przed uruchomieniem skryptu run.bat uruchomić serwer MySQL.
Angaże
Przygotuj model bazy danych przedstawiony na
rysunku 3. Baza ta zawiera informacje o pracownikach
uniwersytetu i podziale zajęć dydaktycznych.
Przygotowany projekt zapisz do pliku {stala}angaze.xml{/stala}.
W pliku conf.ini wprowadź dane:
;database
database = angaze
username = angazeadmin
password = angazepass
filename = angaze.xml
Po uruchomieniu skryptu run.bat, na serwerze
MySQL pojawi się baza danych o nazwie
angaze (rysunek 4). Klasy ORM modelu angaze.
xml znajdziesz w folderze {stala}output/propel/build/classes/angaze{/stala}.
Artykuły
Przygotuj bazę danych widoczną na rysunku
5.
Baza przechowuje informacje o artykułach
publikowanych na łamach czasopisma Magazyn
INTERNET. Przygotowany projekt zapisz do pliku
artykuly-mi.xml.
W pliku conf.ini wprowadź dane:
database = artykulymi
username = amiadmin
password = amipass
filename = artykuly-mi.xml
Po uruchomieniu skryptu run.bat, na serwerze
MySQL pojawi się baza danych o nazwie artykulymi
(rysunek 6). Klasy ORM modelu artykulymi.xml
znajdziesz w folderze {stala}output/propel/build/classes/artykulymi{/stala}.
Dane o płytach i wykonawcach
Wykonaj model bazy danych {stala}rock.xml{/stala} widoczny
na rysunku 7.
W pliku conf.ini wprowadź dane:
database = rock
username = rockadmin
password = rockpass
filename = rock.xml
Po uruchomieniu skryptu run.bat na serwerze
MySQL pojawi się baza danych rock (rysunek 8).
Klasy ORM modelu rock.xml znajdziesz w folderze
{stala}output/propel/build/classes/rock{/stala}.
Dostosowywanie
Skrypt dbframe działa w oparciu o szablony
Smarty. Wszystkie szablony znajdziesz w folderze
{stala}app/templates{/stala}. W każdym szablonie dostępna jest
tablica asocjacyjna {stala}$conf{/stala} o indeksach database,
username, password, root oraz rootpassword:
$conf[\'database\']
$conf[\'username\']
$conf[\'password\']
$conf[\'root\']
$conf[\'rootpassword\']
Zatem w plikach .tpl możesz korzystać ze
zmiennych:
{$conf.database}
{$conf.username}
{$conf.password}
{$conf.root}
{$conf.rootpassword}
W ten sposób możesz dostosować kod SQL
skryptu tworzącego pustą bazę danych, konfigurację
Propela oraz plik {stala}create-db.bat{/stala} odpowiedzialny
za tworzenie pustej bazy danych. Listing 1 zawiera
szablon odpowiedzialny za tworzenie pustej bazy
danych.
SET NAMES utf8 COLLATE utf8_polish_ci;
DROP DATABASE IF EXISTS {$conf.database};
CREATE DATABASE
{$conf.database}
DEFAULT CHARACTER SET
utf8 COLLATE utf8_polish_ci;
GRANT
INSERT, DELETE, UPDATE, SELECT
ON
{$conf.database}.*
TO
{$conf.username}@localhost
IDENTIFIED BY
\'{$conf.password}\';
FLUSH PRIVILEGES;
USE {$conf.database};