2012-11-03 1 views
0

У нас есть веб-сайт, разработанный в рамках платформы symfony 1.4. Этот веб-сайт должен иметь несколько доменов. У каждого домена есть своя специальная страница и все остальное. Фактически, домен должен быть таким параметром для каждого действия, которое согласно ему, действие получает данные из базы данных и показывает их.Как настроить проект Symfony 1.4 для нескольких доменов?

Например, у нас есть страница о нас. Мы сохраняем наше содержимое в таблице about_us. В этой таблице есть site_id. Мы храним информацию о веб-сайте в таблице веб-сайта. Пусть это:

website (id, title, domain) 
about_us (id, content, website_id) 

сайт Содержание:

(1, 'foo', 'http://www.foo.com') and (2, 'bar', 'http://www.bar.com') 

about_us содержание:

(1, 'some foo', 1) and (2, 'some bar', 2) 

Вопрос заключается в том, как я должен настроить свой проект Symfony, чтобы быть в состоянии сделать, как это? получить домен как параметр и использовать его в действиях Symfony?

+1

Кроме того, гляньте на этот вопрос [] (http://stackoverflow.com/questions/3521049/configure-symfony-project-for-multiple-domains) и [это один] (HTTP://stackoverflow.com/questions/2989528/symfony-dynamic-subdomains). – j0k

+0

@ j0k Спасибо, я видел эти вопросы раньше, но моя проблема другая. – samra

ответ

1

Вы можете создать свой собственный класс маршрута, расширяющий sfRoute. Этот маршрут будет добавлен параметр 'домен' на все запросы:

//apps/frontend/lib/routing/myroute.class.php 

class myRoute extends sfRoute 
{ 

    public function matchesUrl($url, $context = array()) 
    { 
     // first check if it is a valid route: 
     if (false === $parameters = parent::matchesUrl($url, $context)) 
     { 
      return false; 
     } 

     $domain = $context['host']; 

     // add the $domain parameter: 
     return array_merge(array(
      'domain' => $domain 
      ), $parameters); 
    } 
} 

routing.yml (пример):

default_module: 
    class: myRoute 
    url: /:module/:action/:id 
    ... 

В вашем действии вы получаете домен с:

$request->getParameter('domain'); 
+0

Спасибо! Это именно то, что я хотел – samra

1

Есть много способов сделать это. Вы можете расширить sfFrontWebController и добавить дополнительный код в метод dispatch().

# app/myapp/config/factories.yml 
all: 
    controller: 
    class: myController 


// lib/myController.class.php 
class myController extends sfFrontWebController 
{ 
    public function dispatch() 
    { 
     $selectedSite = SiteTable::retrieveByDomain($_SERVER['HTTP_HOST']); // Example 

     if (!$selectedSite) { 
      throw new sfException('Website not found'); 
     } 

     // Store any site value in parameter 
     $this->context->getRequest()->setParameter('site_id',$selectedSite->getId()); 

     parent::dispatch(); 
    } 
} 
+0

Спасибо, я думаю, это тоже сработает. – samra

 Смежные вопросы

  • Нет связанных вопросов^_^