Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Symfony][Symfony2][SF2][SF3] Dynamiv DB Connection
Forum PHP.pl > Forum > PHP > Frameworki
Pyton_000
Co potrzebuję.

1 domyślne połączenie które musi być nawiązanie z BD (dane pobierane z parameters.yml)
Tam pobieram niezbędne dane które później muszą być zapisane np. w sesii

2 połączenie które ma być nawiązywane (może być zastępowane poprzednie).
Dane będą pobierane z plików konfiguracyjnych na podstawie adresu URL.

Czyli w url mam: http://domain.com/conn1/....

Parametr "conn1" będzie zawsze obecny w URL, bo na jego podstawie będę się przełączał przez BD.

Jak? Człowiek dostał S3 do nauki i takie problemy wink.gif
ohm
Bardzo prosto i przyjemnie
https://symfony.com/doc/current/cookbook/do...y_managers.html + jakiś listener wybierający odpowiednie połączenie.
Pyton_000
Ahh kurcze, pod latarnią najciemniej biggrin.gif

A możesz naprowadzić na jakieś rozwiązanie ? Symfony to jeszcze czarna magia smile.gif
Pomyślałem nad nadpisaniem getManager() ale to nie jest chyba zbyt dobry pomysł. Choć może stworzenie swojego wrappera na doctrine do pobierania managera to nie głupi pomysł.

PS. A czy przypadkiem nie będzie się pluł o brakujące properties '%database_driver2%' itd? bo chyba tak miałem jak próbowałem różnych rozwiązań z sieci.
ohm
Chodziło mi o rozwiązanie mniej więcej coś w tym stylu
https://stackoverflow.com/questions/1510873...585284#24585284
Wyłapujesz requesta, zmieniasz połączenie na jakie chcesz i puszczasz dalej smile.gif

Co do nadpisywania getManagera, to raczej niebardzo, ale parametry możesz ewentualnie zmieniać (chociaż to też może się to zemścić po czasie wink.gif ), ewentualni tak jak piszesz, że jakiś wrapper/manager połączeń też powinien się sprawdzić.
Pyton_000
Oh yeaaa biggrin.gif

To mi się sprawdzi idealnie w sumie.
Chociaż tak na prawdę to nawet nie potrzebuję 2 połączeń, a jedynie podmianę domyślnego na inne po pobraniu niezbędnych danych z 1-szego połączenia.

Tak więc bajera smile.gif Dzięki smile.gif
uirapuru
Poczytaj o ConnectionWrapper w Doctrine. napisałem nawet do tego symfonowego bundla, plus mogę dostarczyć nieco kodu poglądowego smile.gif Daj znać. Ta technika ("przełączalna baza") to multitenant database sie ogolnie nazywa chyba. w swoim projekcie mam jedną podstawową bazę dla wszystkich subdomen projektu oraz po jednej bazie na każdą subdomene. dwa połączenia, dwa entity menagery, dużo baz danych smile.gif
Pyton_000
Bardzo chętnie zobaczyłbym Twoje rozwiązanie.
uirapuru
dwa linki:

https://github.com/gyman/app
https://github.com/UirapuruDende/MultidatabaseBundle

nie mam zbyt wiele czasu, wiec naprędce napisze tylko; po pierwsze to wszystko sie nadal tworzy, jest brzydkie i uzywane tylko przeze mnie smile.gif

multidatabase bundle dostarcza kilka rzeczy:
1) klasę connection wrapper, której używam w configu doctrine w gyman/app.
2) dostarcza też listener dla "command" - są commandy doctrinowe (schema, fixtury), które musisz wykonać na pewnej konkretnej bazie - listener do wskazanych commandów dodaje parametr, według którego możesz wyłapać sobie interesujacą Cię baze i przeprowadzić na niej operacje. jesli tego nie zrobisz - zadziała jak zwykle na podstawowej. potrzebne do tego rzeczy również w config.yml w gyman/app siedzą

bundle wymaga by dostarczyc mu serwis, który dostarczy tzw. Tenanta. W moim przypadku (w gyman/app) jest request listener, który odczytuje subdomene i na jej podstawie tworzy tenanta i przekazuje go do multidatabase bundle, który przełącza na podstawie tych danych connection. Nie widze problemu, by napisać własną klasę, która te dane pobierze np. z encji usera, czy innego miejsca.

generalnie zasada działania jest prosta. pozostało mi otestować, uporządkować, odokumentować i dodać może coś co pozwoli hurtowo przelecieć wszystkie bazy tą samą operacją (np. migracją).

do testów też warto mieć to rozwiązane tak, by test sie uruchamiał na odpowiednich ustawieniach (tak w moim wypadku jest, testy gyman/app lecą na "drugim" połączeniu zafiksowanym w config_test.yml na sqlite).

To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.