2012-08-24 17 views
6

Zastanawiam się, czy istnieje możliwość zmodyfikowania konfiguracji pakunków z innego pakietu. Powiedzmy, na przykład, używam FOSUserBundle o następującej konfiguracji:Zmodyfikuj konfigurację pakunku z innego pakietu

fos_user: 
    db_driver: orm 
    firewall_name: main 
    user_class: Acme\UserBundle\Entity\User 

A teraz chcę zmienić klasę użytkownika podczas ładowania konkretnego rozszerzenia (The AcmeFoobarExtension). Czy można zmienić konfigurację podczas ładowania the ? Na przykład:

<?php 
namespace Acme\FoobarBundle\DependencyInjection; 

// use statements for dependency injection 

class FoobarExtension extends Extension 
{ 
    public function load(array $configs, ContainerBuilder $container) 
    { 
     $container->setConfiguration(
      'fos_user.user_class', 
      'Acme\FoobarBundle\Entity\User' 
     ); 
    } 
} 

Czy coś takiego jest możliwe? Lub pokonuje go celem zastrzyk zależności?

EDIT: Podobno istnieje pull request dla Symfony 2.2, który rozwiązuje ten pomysł/problem.

EDYCJA 2: Jest teraz dostępna w Symfony 2.2 (z article in the cookbook).

+0

Jeśli masz odpowiedź, możesz opublikować odpowiedź na własne pytanie o oświecenie innych. – neontapir

Odpowiedz

1

Po zadaniu tego samego pytania na liście dyskusyjnej użytkowników Symfony (here's the question), dowiedziałem się, że istnieje otwarty pull request dla tego pomysłu.

Jest przeznaczony dla wersji 2.2 i nie został jeszcze scalony z wzorcem, ale ostatnia aktywność trwa od 3 dni, więc miejmy nadzieję na najlepsze!

6

Należy zauważyć, że jest teraz oficjalnym cechą Symfony:

http://symfony.com/doc/current/cookbook/bundles/prepend_extension.html

Pakiet może poprzedzić wartości konfiguracyjnych do globalnych parametrów konfiguracyjnych. Aby to zrobić, rozszerzenie pakietu musi implementować PrependExtensionInterface. Metoda prepend() może następnie dodać globalne wartości konfiguracyjne.

Należy jednak pamiętać, że wartości mogą zostać nadpisane przez inne pakiety oraz w pliku konfiguracyjnym.

Powiązane problemy