2010-09-26 6 views
9

Chciałbym zintegrować Propel z Zend framework. Widziałem integrację doktryny w przeszłości, ale this post mówi, że wydaje się, że napęd jest wykonywany nieco inaczej.Jak Zend Framework z Propelem ORM

Propel ma dwie rzeczy będzie dla niego już: pierwszy jest to, że Propel zawiera własny autoloader, co oznacza, że ​​nie trzeba próbować i siła Propel w strukturze systemu plików Zend Framework „s. Druga to to, że Propel jest zaprojektowany tak, aby umożliwić łatwe umieszczanie plików w dowolnym miejscu, o ile prawidłowo aktualizujesz swój include path. To znacznie ułatwiło proces, niż myślałem.

Ale wpis nie zawiera szczegółowych informacji na temat jego zakończenia. Zgaduję, że muszę zmodyfikować ZendBootstrap.php i application.ini (używam najnowszego Zend 1.10.8), ale trudno jest znaleźć wpis na najnowszej wersji Zend z najnowszą wersją Propel.

Ktoś może skomentować, jak to zrobić w najpłynniejszy możliwy sposób?

inne pytanie: czy Propel ma interfejs wiersza poleceń, czy też nie potrzebuję interfejsu wiersza poleceń dla napędu, jeśli używam interfejsu wiersza poleceń Zend?

Odpowiedz

11

I miałaś użyciu Propel poza Symfony ale z tego co wiem od Propelu ale pomyśli coś jak następuje będzie działać dla rzeczy wykonawczych:

W swojej bootstrap

public function initPropel() 
{ 
    require_once 'Propel.php'; 
    Propel::init($this->getOptions('propelConfig')); 

    // so we can get the connection from the registry easily 
    return Propel::getConnection(); 
} 

W swojej application.xml (dostosowanie do INI jeśli to, co wolisz)

<applicationConfiguration xmlns:zf="http://framework.zend.com/xml/zend-config-xml/1.0/"> 
    <production> 
    <!-- other stuff --> 
    <includePaths> 
     <propelRuntime><zf:const zf:name="APPLICATION_PATH" />/../library/propel/runtime</propelRuntime> 
    </includePaths> 
    <propelConfig><zf:const zf:name="APPLICATION_PATH" />/configs/propel-runtime.php</propelConfig> 
    <!-- other stuff --> 
    </production> 
</applicationConfiguration> 

Oczywiście to existing naprawdę pełna integracja miarę im dana ... ale powinno wystarczyć, abyś mógł bez problemu pracować. Jeśli jest to warte inwestycji dla ciebie w tym projekcie, chciałbym pójść dalej i utworzyć Zasób Aplikacji. Uruchom kompilację napędu i spójrz na skompilowaną tablicę php. Następnie zamapuj to na xml lub ini i umieść je bezpośrednio w pliku konfiguracyjnym aplikacji. Następnie zmodyfikować initPropel obsłużyć to lubią:

public function initPropel() 
{ 
    require_once 'Propel.php'; 
    Propel::setConfiguration($this->getOptions('propelConfig')); 
    Propel::initialize(); 

    // so we can get the connection from the registry easily 
    return Propel::getConnection(); 
} 

Jeśli chciałeś można nawet nie bezpośrednio załadować tablicę jako analizowany z pliku konfiguracyjnego, ale zamiast tworzyć PropelConfiguration obiekt i rozwiązań programowych ustawić wszystkie parametry, a następnie przekazać, że do setConfiguration.

Jeśli chodzi o narzędzia do budowania, znalazłem integrację z Zend_Tool jako próbę, więc polegam na phing lub niestandardowych skryptach powłoki dla tego wszystkiego. Jeśli nie planujesz używać Propela w wielu projektach, prawdopodobnie nie nadszedł czas na wdrożenie tego poziomu integracji.Zrobiłem to z Doctrine 1.xa, a powrót zajęło mi kilka tygodni, aby rozwiązać wszystkie problemy :-)

+0

Jak dostosować się do ini? Nie mam pojęcia –

+0

@rodrigo: powinno to być dość łatwe tłumaczenie, ponieważ struktura nie jest skomplikowana ... myślę, że możesz parsować stałe bezpośrednio w INI, więc wszystko co musisz zrobić to użyć par wartości klucza w poprawnej sekcji . Z drugiej strony mogę się mylić, nigdy nie używam formatu INI. Jeśli nie możesz tego wymyślić, zamieściłbym nowe pytanie na ten temat ... dostaniesz więcej odpowiedzi w ten sposób :-) – prodigitalson

1

Umieszczam bibliotekę Propel w "Twoim Zend_Project/library" z folderem o nazwie Propel, który ma znajduje się w nim folder runtime.

Następnie umieszczam ten fragment kodu w moim bootstrap.php.

protected function _initPropel() 
{ 
    //require Propel Library 
    require '../library/Propel/runtime/lib/Propel.php'; 

    //initialize Propel configuration 
    Propel::init(APPLICATION_PATH . '/configs/orm-conf.php'); 

    //initialize Propel connection 
    Propel::initialize(); 

    //return Propel Connection 
    return Propel::getConnection(); 

} 

My Propel config pliki są w "Twój Zend projektu/application/configs"

też trzeba zmodyfikować plik index.php więc będzie znaleźć modele ORM wygenerowaniu:

set_include_path (implode (PATH_SEPARATOR array ( realpath (APPLICATION_PATH '/../library') realpath (APPLICATION_PATH '/'), modele get_include_path() ))..);

Umieszczasz swoje modele w nazwie "Zend Project/application/Models/database", która jest ustawiona w schema.xml przez właściwość xml w znaczniku "database name =" orm "".

1

Po prostu spróbuj dodać init of propel do pliku index.php, ale PRZED konfiguracją procesu automatycznego ładowania. W tym przypadku Zend_Autoloader nie może wchodzić w interakcję z mechanizmem automatycznego ładowania Propel. Dla mnie działa dobrze, ale nie jestem pewien, czy to dobry projekt ...)