2010-08-19 4 views
6

У нас есть продукт, разработанный в рамках PHP Symfony. Сейчас у нас есть несколько клиентов, для которых мы поддерживаем разные базы кода и базы данных (MySql).Настройка проекта symfony для нескольких доменов

Они получить доступ к их соответствующий базовый код, используя субдомен как client1.myproduct.com и client2.myproduct.com

Теперь мы хотим сделать одну кодовую базу для обоих клиентов и только хранить файлы, которые отличаются (в термины логики) для обоих из них в отдельных поддоменах.

Таким образом, оба поддомена будут указывать на одну и ту же базовую базу кода, но при необходимости будут обращаться к файлам из своих соответствующих поддоменов, когда всякая логика отличается для некоторой функции для обоих клиентов.

Может ли кто-нибудь предложить, что является лучшим способом для этого?

ответ

4

сайты: [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 

Надеется, что это помогает

+0

Отлично, я также думал использовать конфиги, как это и вы только подтвердили это для меня. Мне нравится, что этот подход позволяет каждому приложению думать, что он единственный, делая его полностью настраиваемым для каждого сайта. – Ryall

0

Я описал использование динамических поддоменов в Symfony here с использованием sfDomainRoutePlugin.

Однако вам потребуется переписать большую часть существующей логики приложения для поддержки нескольких клиентов в одном приложении, и вы также должны объединить две старые базы данных.

0

Я просил ту же информацию и получил возможность получить ответы от mike's и fabien. Вот подробности:

Для одна логики с поддоменами: http://trac.symfony-project.org/wiki/HowToDoMultipleSitesWithSingleCore

несколько сайтов на основе идентичного конфигураций Это может быть странно темой, но я хотел бы настроить наш доступ в субдомены, все с доступом SSL. Нам нужны разные сайты, потому что SSL заставляет виртуальные домены на основе IP, что означает для нас разные корни документов. Такие, как:

• www.mydomain.com • admin.mydomain.com • parents.mydomain.com Однако, это были все сайты с той же базовой схеме и плагинов. Преимущество этой конфигурации:

• Shared файлов модель: Все классы XxxPeer будут связаны между приложениями Недостатками:

• Теперь у вас есть 2-п различных кэшей/журналы для мониторинга. Если вы посмотрите на типичную структуру каталогов Symfony, он может быть разбит на две группы типа:

• Общие каталоги: ◦batch ◦config ◦data ◦doc ◦lib ◦plugins ◦test • специализированные каталоги: ◦apps ◦cache ◦log ◦web Вот шаги, которые я взял:

• развивать www.yourdomain.com СБН гема и сайт. Как только это начинает объединяться, вы можете начать разработку дополнительных сайтов. • На новом сайте символическая ссылка Общие каталоги • На новом сайте создайте каталоги конкретных приложений ◦НЕТ. В веб-каталоге может потребоваться скопировать некоторые исходные материалы (css, js, and. htaccess файлы приходят на ум). Держите это в глубине своего разума, когда начинаете поднимать новый сайт. • Запустить команду symfony fix-perms ◦NOTE: Для меня Virtualmin создает эти новые сайты с новыми именами пользователей. Вы должны будете гарантировать, что все каталоги конкретных приложений принадлежат этому имени пользователя, поэтому ваши команды с четким кэшем и команды ведения журнала работают. • Теперь у вас настроен проект. Вы начинаете с: ◦symfony app MYAPP ◦symfony module MYAPP MYMODULE ◦ ... • Теперь вы обнаружите, что ваши приложения/MYAPP/modules/MYMODULE созданы, и у вас есть полный равноправный доступ ко всей базе данных

Здесь вы найдете информацию о одной логике с разными именами доменов: client1.com client2.com, используя те же приложения.

Для одной логики с разными доменами: «Вы можете указать их все на одном фронт-контроллере, а затем использовать фильтр или родительский класс действия, чтобы делать такие вещи, как изменение шаблона сайта и т. Д. Однако наличие переднего контроллера на один домен может быть более эффективным, и это отличный способ пойти.

Каждый домен может иметь собственное приложение, но основная часть логики должна быть реализована в плагинах, поэтому их можно включить для каждого домена/приложения которые нуждаются в них, и разделяют по мере необходимости. Сколько кода требуется для каждого приложения, зависит, насколько я знаю, от того, насколько разные сайты на самом деле. »