Opisujemy strukturę bazy danych w pliku config/schema.yml
Następnie tworzymy bazę: mysqladmin -uroot -pmYsEcret create jobeet
Wywołujemy polecenie:
php symfony configure:database "mysql:host=localhost;dbname=jobeet" root mYsEcret
które tak na prawdę zapisuje informacje o dostępie do bazy w pliku config/databases.yml co możemy wszak wykonać ręcznie :)
Wykonujemy polecenie: php symfony propel:build-sql
które przygotowuje dla nas skrypty SQL tworzące strukturę naszej bazy danych. Wyniki przechowywane w katalogu data/sql/ - tutaj data/sql/lib.model.schema.sql
Ostatecznie wywołujemy: php symfony propel:insert-sql
które tworzy naszą bazę danych. Należy uważać (choć jest stosowny alert) - wykonanie tego polecenia usuwa dotychczasowe tabele.
Na marginesie: opis polecenia uzyskamy przez zastowanie parametru help np. php symfony help propel:insert-sql
Generujemy klasy PHP mapujące naszą relacyjną bazę danych na obiekty: php symfony propel:build-model
W wyniku powyższego w katalogu lib/model/ tworzone są skrypty zawierające po cztery klasy na każdą z tabel naszej bazy danych.
Np. dla tabeli jobeet_job:
- JobeetJob - obiekt tej klasy to pojedyńczy rekord tabeli
- BaseJobeetJob - klasa z której dziedziczy klasa JobeetJob. Za każdym wywołaniem propel:build-model klasa ta jest nadpisywana, więc wszystkie modyfikacje muszą znajdować się w ramach JobeetJob
- JobeetJobPeer - klasa zawierająca statyczne metody zwracające kolekcje rekordów
- BaseJobeetJobPeer - analogicznie dla klasy BaseJobeetJob
Edycja kolumn dla rekordów odbywa się poprzez wywoływanie metod get/set:
$job = new JobeetJob();
$job->setPosition('Web developer');
$job->save();
echo $job->getPosition();
$job->delete();
Definiowanie kluczy obcych (złączeń?) odbywa się poprzez linkowanie obiektów:
$category = new JobeetCategory();
$category->setName('Programming');
$job = new JobeetJob();
$job->setCategory($category);
Wracając do głównego wątku, dwa powyższe kroki oraz inne użyteczne wyniki można uzyskać prościej i bez konieczności potwierdzenia poprzez:
php symfony propel:build-all --no-confirmation
Jedną z zalet Symfony jest ponoć brak konieczności korzystania z instrukcji require / include. Koszt jaki trzeba za to udogodnienie ponieść jest niewielki, ale trzeba pamiętać że za każdym razem gdy dodamy nową klasę należy wyczyścić cache frameworka. Ponieważ wygenerowaliśmy sporo klas, wykonajmy:
php symfony cache:clear
lub w skrócie:
php symfony cc
Potrzebujemy jeszcze wstępnie wypełnionych tabel. Do tego celu możemy zastosować "skrypty" YAML umieszczane w katalogu data/fixtures/ oraz zadanie propel:data-load
Kiedy potworzymy już odpowiednie pliki wywołujemy: php symfony propel:data-load
Ewentualni zakładamy combo: propel:build-all-load wykonuje nam akcje propel:build-all oraz propel:data-load
Podział obowiązujący w ramach naszego dzieła: projekt -> aplikacje -> moduły
gdzie moduł to zestaw kodu PHP realizujący jakieś pojedyńcze zadanie np. zestaw operacji jakie użytkownik może wykonać na obiekcie reprezentującym zestaw danych z bazy.
Poznawany framework potrafi automatycznie generować moduły umożliwiające podstawowe operacje na danych z bazy w ramach wskazanego modelu:
php symfony propel:generate-module --with-show --non-verbose-templates frontend job JobeetJob
Powyższe utworzyło moduł job w ramach aplikacji frontend application dla modelu danych JobeetJob. W katalogu apps/frontend/modules/job/ utworzone zostały podkatalogi: actions/ oraz templates/
Plik actions/actions.class.php zawiera definicje wszystkich możliwych akcji dla modułu job:
index wyświetla rekordy tabeli
show wyświetla pola i ich wartości dla wskazanego rekordu
new wyświetla formularz do założenia nowego rekordu
create tworzy nowy rekord
edit wyświetla formularz do edycji istniejącego rekordu
update aktualizuje rekord w oparciu o wprowadzone dane
delete usuwa rekord z bazy
W dosłownym tłumaczeniu (zrozumienie zostawiam sobie na później):
Symfony potrzebuje tekstowej reprezentacji kategorii. Reprezentacja obiektu PHP jest definiowana przy pomocy metody magicznej__toString() i powinna być zdefiniowana dla każdej klasy modelu np. dla JobeetCategory:
// lib/model/JobeetCategory.php
class JobeetCategory extends BaseJobeetCategory
{
public function __toString()
{
return $this->getName();
}
}
czwartek, 15 stycznia 2009
Subskrybuj:
Komentarze do posta (Atom)
Archiwum bloga
-
►
2012
(16)
- ► października (2)
-
►
2011
(51)
- ► października (1)
-
▼
2009
(190)
- ► października (2)
-
▼
stycznia
(27)
- Logowanie ruchu sieciowego
- IPSec - tutorial
- Linux full backup & restore w praktyce 2
- Instalacja PHPList
- Certyfikaty Microsoft
- Photoshop i inne - dobry zestaw tutoriali
- Różne CMS'y
- Newsletter dla całej firmy
- HTML Url Encoding Reference
- Linux full backup & restore w praktyce
- BT3, kismet, airodump-ng i TP-Link TL-WN551G
- BackTrack 3 - instalacja na dysku twardym
- Problem - odbiorca wiadomości z Outlooka otrzymuje...
- Wardriving w teorii
- Jak sprawdzić kod produktu / klucz instalacyjny np...
- Identyfikacja i testowanie sprzętu PC pod Linuksem
- Jak nie powinna wyglądać domena?
- Squid - jak wyczyścić cache
- Symfony - dzień drugi
- A gdy już założę własną Firmę ...
- Hyper-V w kontekście mapowania portów COM -> Named...
- Symfony - dzień pierwszy
- Sendmail - naprowadzenie na założenie nowego konta
- Podstawowe typy ataków na strony WWW
- Hyper-V Manager - Access Denied - o co chodzi?
- Squid Transparent Proxy - przykładowa konfiguracja...
- Jak wyłączyć wyszukiwanie drukarek w Windows XP?
Brak komentarzy:
Prześlij komentarz