Blog Leszczynowa

PHP

Propel - porady jak rozwiązać podstawowe problemy

Propel - porady jak rozwiązać podstawowe problemy Propel, najbardziej popularny system mapowania relacyjno-obiektowego w PHP skraca cykl produkcyjny aplikacji internetowej. Poradnik zawiera zestawienie popularnych problemów, z którymi borykają się początkujący użytkownicy Propela.

Włodzimierz Gajda

Porada 1: Kodowanie znaków

Klasy dostępu do bazy danych mogą stosować dowolne kodowanie znaków, niezależne od ustawień serwera.

Przed uruchomieniem generatora Propel (tj. skryptu propel-gen.bat) w pliku runtime-conf.xml ustalamy kodowanie znaków dla połączenia:

[+]
 
XML
Pobierz
1. <connection>
2.   ...
3.   <encoding>utf8</encoding>
4. </connection>

Wygenerowane klasy będą stosowały podane kodowanie. Rozwiązanie takie ma dwie zalety:

  • skrypty PHP korzystające z klas nie muszą zawierać żadnych instrukcji ustalających kodowanie,
  • konfiguracja kodowania znaków serwera MySQL nie ma wpływu na skrypty.

Porada 2: Korzystanie z kilku baz danych

Skrypt PHP może - za pośrednictwem propelowych obiektów - łączyć się z wieloma bazami danych.

Przed uruchomieniem generatora klas (tj. skryptu propel-gen.bat) w pliku runtime-conf.xml należy wymienić wszystkie bazy danych:

[+]
 
XML
Pobierz
 1. <datasources default="osoby">
 2.   <datasource id="osoby">
 3.     <adapter>mysql</adapter>
 4.     <connection>
 5.       <phptype>mysqli</phptype>
 6.       <hostspec>localhost</hostspec>
 7.       <database>osoby</database>
 8.       <username>osobyadm</username>
 9.       <password>osobypass</password>
10.       <encoding>utf8</encoding>                    
11.     </connection>
12.   </datasource>
13.   <datasource id="wyrazy">
14.     <adapter>mysql</adapter>
15.     <connection>
16.       <phptype>mysqli</phptype>
17.       <hostspec>localhost</hostspec>
18.       <database>wyrazy</database>
19.       <username>wyrazyadm</username>
20.       <password>wyrazypass</password>
21.       <encoding>utf8</encoding>                    
22.     </connection>
23.   </datasource>            
24. </datasources>

Dla każdego wymienionego źródła danych przygotowujemy osobny plik XML z opisem struktury bazy, np.:

[+]
 
 
Pobierz
1. wyrazy-schema.xml
2. osoby-schema.xml

Tak skonfigurowany Propel wygeneruje plik konfiguracyjny -conf.php, umożliwiający łączenie się obiektów z wieloma bazami, przy czym wszystkie wygenerowane klasy trafią do jednego folderu.

Jeśli w pliku build.properties dodamy wpis:

 
 
 
Pobierz
propel.packageObjectModel = true

zaś w plikach -schema.xml umieścimy atrybut package:

 
 
 
Pobierz
<database package="wyrazy" name="wyrazy" ... >

to generowane klasy zostaną umieszczone w osobnych folderach. Atrybut package zawierający kropkę:

 
 
 
Pobierz
package="core.system"

spowoduje dalszy podział generowanych folderów na podfoldery:

 
 
 
Pobierz
core/system

W skrypcie PHP, który korzysta z kilku połączeń, należy najpierw wywołać metodę init():

 
 
 
Pobierz
Propel::init('dwiebazy-conf.php');

a następnie utworzyć zmienne umożliwiające korzystanie z połączeń:

[+]
 
PHP
Pobierz
1. $con_osoby = Propel::getConnection('osoby');
2. $con_wyrazy = Propel::getConnection('wyrazy');

Metody pobierające rekordy z baz danych otrzymają dodatkowy parametr ustalający połączenie:

[+]
 
PHP
Pobierz
1. $wyrazy = WyrazPeer::doSelect(new Criteria, $con_wyrazy);
2. $osoby = OsobaPeer::doSelect(new Criteria, $con_osoby);

Pierwsza z powyższych instrukcji pobiera dane z bazy o nazwie wyrazy, a druga z bazy o nazwie osoby.

Utworzone obiekty nie wymagają podawania połączenia. Korzystamy z nich identycznie jak w skryptach, które stosowały jedną bazę danych:

[+]
 
PHP
Pobierz
1. echo $osoby[0]->getImie()
2.  
3. $wyrazy[0]->setWyraz('Lorem');
4. $wyrazy[0]->save();
17 września 2008

Powiązane publikacje

Aplikacje internetowe framedb do Propela i DBD Designer

Aplikacje internetowe framedb do Propela i DBD Designer

Propel - operacje na plikach

Propel - operacje na plikach

 
Skomentuj
ten artykuł

Brak komentarzy

Kod obrazkowy
(Kliknij, aby zmienić)
 

Autor

Włodzimierz Gajda

Artykuły tego autora:

Załączniki

Newsletter

Jesli chcesz być na bieżąco z tym co się dzieje na stronie magazynu INTERNET Maker zapisz się do naszego newslettera.