Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [Symfony] Dynamiczny wybór bazy danych
webdice
post
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}
...
Go to the top of the page
+Quote Post
l3l0
post
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
Go to the top of the page
+Quote Post
webdice
post
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.
Go to the top of the page
+Quote Post
destroyerr
post
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.
Go to the top of the page
+Quote Post
webdice
post
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:

  1. <?php
  2. $database = new sfPropelDatabase();
  3. ?>


EDIT2: Problem rozwiązałem. Jak nie zapomnę to wieczorem podam rozwiązanie.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.08.2025 - 11:00