2010-08-19 17 views
6

Abbiamo un prodotto sviluppato in framework PHP Symfony. Al momento abbiamo un paio di client per i quali gestiamo database e basi di codice diversi (MySql).Configura il progetto symfony per domini multipli

accedono loro rispettiva base di codice utilizzando sottodominio come client1.myproduct.com e client2.myproduct.com

Ora vogliamo fare un unico codice di base sia per i clienti e mantenere solo i file che sono diverse (in termini di logica) per entrambi in sottodomini separati.

Quindi entrambi i sottodomini puntano allo stesso codice base ma accedono ai file dai rispettivi sottodomini ogni volta che sono richiesti, ad esempio quando la logica è diversa per alcune funzionalità per entrambi i client.

Qualcuno può suggerire qual è il modo migliore per farlo?

risposta

4

siti: [foo.com, bar .co.uk, www.mike.es]

// index.php 
require_once(dirname(__FILE__).'/../config/ProjectConfiguration.class.php'); 

// get the domain 
$domain = $_SERVER['SERVER_NAME']; 

// get rid of www, com, es etc ... 
foreach(array('www.', '.com', '.es', '.co.uk') as $crap) { 
    $domain = str_replace($crap, '', $domain); 
} 
$confs = array(
    'foo' => 'somefoo', 
    'bar' => 'somebar', 
    'waz' => 'andwazconfig' 
); 
$cfg = (!empty($confs[$domain])) 
    ? $confs[$domain] 
    : 'default'; 

$configuration = ProjectConfiguration::getApplicationConfiguration($cfg, 'prod', false); 

sfContext::createInstance($configuration)->dispatch(); 

// End of index.php 

Spero che questo aiuti

+0

Grande, stavo anche pensando di utilizzare configurazioni di questo tipo e si hanno appena confermato per me. Mi piace il fatto che questo approccio consenta a ciascuna app di pensare che sia l'unica a renderla completamente configurabile per sito. – Ryall

0

Ho descritto l'uso di sottodomini dinamici in Symfony here usando sfDomainRoutePlugin.

Tuttavia, sarà necessario riscrivere gran parte della logica dell'applicazione esistente per supportare più client nella stessa app e inoltre è necessario unire i due vecchi database.

0

Ho richiesto le stesse informazioni e ho la possibilità di ricevere la risposta di mike's e fabien. Ecco i dettagli:

Per una logica con sottodomini: http://trac.symfony-project.org/wiki/HowToDoMultipleSitesWithSingleCore

più siti basati su configurazioni identiche Questo può essere un argomento strano, ma ho voluto configurare il nostro accesso in sottodomini, tutte con accesso SSL. Avevamo bisogno di siti diversi perché SSL impone domini virtuali basati su IP, il che significava diverse radici del documento per noi. Come ad esempio:

• siti www.mydomain.com • admin.mydomain.com • parents.mydomain.com Tuttavia, questi erano tutti con lo stesso schema di base e plugin. Il vantaggio di questa configurazione è:

• File modello condiviso: Tutte le classi XxxPeer saranno collegati tra le applicazioni Svantaggio:

• Si dispone ora di 2-n diversi cache/log da monitorare. Se si guarda a una tipica struttura di directory Symfony, che può essere suddiviso in due gruppi di tipo:

• directory comuni: ◦batch ◦config ◦data ◦doc ◦lib ◦plugins ◦test • Application directory specifiche: ◦apps ◦cache ◦log ◦web Questi sono i passi che ho preso:

• Sviluppare la www.yourdomain.com sc hema e sito. Una volta che questo inizia a riunirsi, puoi iniziare a sviluppare i siti aggiuntivi. • Nel nuovo sito, collegamento simbolico Directory comuni • Nel nuovo sito, creare le directory specifiche dell'applicazione ◦NOTA: nella directory Web, potrebbe essere necessario copiare alcuni dei contenuti originali (css, js e. i file htaccess vengono in mente). Tieni questo in mente mentre inizi a far apparire il nuovo sito. • Esegui il comando symfony fix-perms ◦NOTA: per me Virtualmin crea questi nuovi siti con nuovi nomi utente. Dovrai assicurare che tutte le directory specifiche dell'applicazione siano di proprietà di tale nome utente, quindi i comandi di cancellazione della cache e i comandi di registrazione funzionano. • Ora il progetto è configurato. Inizia facendo: ◦symfony app MYAPP ◦symfony module MYAPP MYMODULE ◦ ... • Ora troverai che le tue app/MYAPP/moduli/MYMODULE sono state create e hai accesso completo a tutto il database

Ecco di seguito una logica con nomi di domini diversi: client1.com client2.com che utilizza le stesse app.

Per una logica con domini diversi: "È possibile puntarli tutti sullo stesso controller anteriore e quindi utilizzare un filtro o una classe padre azione per eseguire operazioni come modificare il modello del sito ecc. Tuttavia, avere un controller anteriore per dominio può essere più efficiente ed è un ottimo modo per andare.

Ogni dominio può avere una propria applicazione, ma la maggior parte della logica deve essere implementata nei plugin, in modo che possano essere abilitati per ogni dominio/app che ne ha bisogno e condivisa come richiesto. Quanto è necessario il codice per applicazione dipende, immagino, da quanto diversi sono effettivamente i siti. "

Problemi correlati