Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Symfony] Dynamiczny wybór bazy danych
Forum PHP.pl > Forum > PHP > Frameworki
webdice
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}
...
l3l0
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
webdice
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.
destroyerr
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.
webdice
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.
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.