Настройка проекта Symfony для нескольких доменов - PullRequest
6 голосов
/ 19 августа 2010

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

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

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

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

Кто-нибудь может подсказать, как лучше всего это сделать?

Ответы [ 4 ]

4 голосов
/ 11 октября 2010

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

Надеюсь, это поможет

2 голосов
/ 19 августа 2010

Да, вы можете сделать это.Symfony Routing может справиться с этим вариантом использования, но это не одна из самых простых задач.Подробное описание можно найти в документации Symfony: http://www.symfony -project.org / more-with-symfony / 1_4 / ru / 02-Advanced-Routing

0 голосов
/ 23 августа 2010

Я запросил ту же информацию и получил возможность получить ответ Майка и Фабьена. Вот подробности:

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

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

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

• Файлы общей модели: все классы XxxPeer будут связаны между приложениями. Недостаток:

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

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

• Разработка схемы и сайта www.yourdomain.com. Как только это начинает собираться вместе, вы можете приступить к разработке дополнительных сайтов. • На новом сайте символическая ссылка на Общие каталоги • На новом сайте создайте каталоги для конкретных приложений. ◦ПРИМЕЧАНИЕ. В веб-каталоге вам может потребоваться скопировать оригинальное содержимое (на ум приходят файлы css, js и .htaccess). Имейте это в виду, когда вы начинаете поднимать новый сайт. • Запустите команду symfony fix-perms Примечание: для меня VirtualMin создает эти новые сайты с новыми именами пользователей. Вам нужно будет убедиться, что все каталоги для конкретных приложений принадлежат этому имени пользователя, чтобы ваши команды очистки кэша и команды регистрации работали. • Теперь у вас есть настроенный проект. Вы начинаете с того, что делаете: ◦symfony приложение MYAPP Модуль fsymfony MYAPP MYMODULE ◦ ... • Теперь вы обнаружите, что ваши приложения / MYAPP / modules / MYMODULE созданы, и у вас есть полный равноправный доступ ко всей базе данных

Ниже приведено описание одной логики с разными именами доменов: client1.com client2.com с использованием одних и тех же приложений.

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

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

0 голосов
/ 19 августа 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...