![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
![]() Developer Grupa: Moderatorzy Postów: 3 045 Pomógł: 290 Dołączył: 20.01.2007 ![]() |
Witam,
czy w Symfony jest możliwość dynamicznego wyboru bazy danych? Najlepiej byłoby gdyby w pliku database.yml można by było umieścić zmienna której wartość definiowałbym w kontrolerze. Z góry dzięki za pomoc. EDIT: Znalazłem coś takiego, ale szczerze mówiąc troszkę przekombinowane. Chyba najlepszym rozwiązaniem dla mnie było by coś w stylu: Kod ...
db: {$databaseName} ... |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 94 Pomógł: 16 Dołączył: 24.07.2009 Skąd: Gdańsk Ostrzeżenie: (0%) ![]() ![]() |
Witam,
Nie możesz takiej zmiennej umieścić w kontrolerze ponieważ w symfony najpierw interpretowane są pliki yml a potem dopiero wgrywane są kontrolery. Możesz sobie wartość bazy przenieść do innych configów np Kod ... db: <?php echo sfConfig::get('sf_mydatabase') ?> możesz również użyć obługi wielu połączeń z jednej aplikacji np. wstawiasz w database.yml Kod ... all: polaczenie_1: class: sfPropelDatabase param: dsn: mysql://mojlogin:haslo@mojhost/nazwabazy polaczenie_2: class: sfPropelDatabase param: dsn: mysql://mojlogin:haslo@mojhost2/nazwabazy2 Odwołujesz się do tego w kodzie przez: Kod <?php ... $connection = Propel::getConnection('polaczenie_2'); ... $otherConnection = Propel::getConnection('polaczenie_1'); Więcej znajdziesz tutaj Ten post edytował l3l0 25.07.2009, 19:11:14 |
|
|
![]()
Post
#3
|
|
![]() Developer Grupa: Moderatorzy Postów: 3 045 Pomógł: 290 Dołączył: 20.01.2007 ![]() |
Niestety, bazy muszą być dynamicznie wybierane (generowanie pliku yml nie wchodzi w grę). Nie koniecznie z poziomu kontrolera.
P.S. Podany prze zemnie przykład nie działa. |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 879 Pomógł: 189 Dołączył: 14.06.2006 Skąd: Bytom Ostrzeżenie: (0%) ![]() ![]() |
Szczerze mówiąc nie wiem co chcesz osiągnąć, ale może uda mi się pomóc Tobie.
Najpierw musisz stworzyć instancję klasy sfDoctrineDatabase. Potem musisz dostać się do obiektu klasy sfDatabaseManager (najprościej z kontekstu) i za pomocą jego metody setDatabase wstrzyknąć obiekt stworzony na początku. To tyle. |
|
|
![]()
Post
#5
|
|
![]() Developer Grupa: Moderatorzy Postów: 3 045 Pomógł: 290 Dołączył: 20.01.2007 ![]() |
Na obecnym etapie prac nie chce chwalić się tym co piszę. Dla zilustrowania sytuacji można sobie wyobrazić system for, gdzie dla każdego użytkownika zakładana jest osobna baza danych.
~destroyerr nie bardzo znam Symfony, znalazłem podobny do omówionego przez Ciebie przykład. Na razie próbuje go wdrożyć, ale z marnym skutkiem. Byłem wdzięczny za troche bardziej szczegółowe informacje. Cytat 1. extends the sfContext, ie: myContext 2. overwrite the initialize method from the sfContext Nie wiem czy dobrze robiłem, ale próbowałem stworzyć plik /apps/myapp/lib/myContext.class.php niestety po zmianie w index.php sfContext na myContext wyskakuje błąd z informacją o braku klasy. P.S. Korzystam z Propela. EDIT: Problem z myContext rozwiązany. Następny problem pojawia się przy próbie wywołania klasy:
EDIT2: Problem rozwiązałem. Jak nie zapomnę to wieczorem podam rozwiązanie. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 19.08.2025 - 11:00 |