2014-09-23 13 views
11

La nostra applicazione Symfony è attualmente un'applicazione, che richiederà presto la possibilità di avere più siti che puntano allo stesso nucleo di Symfony e hanno funzionalità leggermente diverse in base a quale sito è attualmente attivo.Attiva/disattiva funzionalità in Symfony

Ad esempio, è possibile che un banner venga visualizzato su un sito ma non su un altro. Un altro esempio è un'opzione di pagamento che verrà abilitata/disabilitata sui diversi siti. O un altro è diverso campi su un modulo sui diversi siti.

Qualcuno ha avuto esperienza strutturando l'applicazione Symfony in questo modo?

risposta

3

Se si desidera "tema" dell'applicazione si può usare lo LiipThemeBundle, funziona davvero bene. Per l'attivazione/disattivazione delle funzioni si dispone anche del pacchetto FeatureToggleBundle (silenzioso recente).

Si potrebbe anche implementare un aiuto di base come questo:

/** 
* Check if a feature is activated. 
* 
* @param string $feature Name of the feature 
* 
* @throws AccessDeniedHttpException 
*/ 
protected function checkFeature($feature) 
{ 
    $features = $this->container->getParameter('app.features') 
    if (!$features[$feature]) { 
     throw new AccessDeniedHttpException(); 
    } 
} 

... 

$this->checkFeature('contact_form'); 

Con questo tipo di configurazione:

app.features: 
    contact_form: false 
2

Yess questo è il vantaggio di symfony

enter image description here

symfony usa il kernel connesso con routing e contro Ller e quindi la risposta è stata creata.

Se si desidera utilizzare più applicazioni in symfony, è possibile farlo molto facilmente e questo è un vantaggio di symfony.Per questo è sufficiente aggiungere un po 'di routing e tutto sarà fatto automaticamente.

È possibile utilizzare la classe del modulo symfony per aggiungere moduli e aggiungerli ad altre pagine con il campo richiesto senza creare nuovamente un intero modulo. Se si desidera aggiungere o rimuovere alcune funzionalità on/off, è sufficiente farlo con la classe app o creando diversi controller.

3

Devi sapere che usando il listener di eventi del kernel puoi fare gran parte del lavoro.

È possibile ad esempio in un 'CoreBundle' fare riferimento all'utente a un modello diverso a seconda del nome del dominio in cui si trova, utilizzando l'evento kernel.request.

Quindi nella tua situazione sarebbe facile per un sito mostrare un banner in un sito ma non in un altro.

Si può guardare questo articolo che spiega:

Twig templating using event listener