Subdomínios dynamics Symfony

Estou tentando combinar subdomínios com um ID de cliente no symfony.

ie, eu tenho customer1.example.com e customer2.example.com

Os domínios são armazenados em uma tabela.

Quando um usuário vai para customer1.example.com, eu gostaria de obter o subdomínio, procure o nome do domínio no database, uma vez que corresponde, ele irá implantar a configuração do aplicativo para esse cliente e depois armazenar o customer_Id em um atributo global então eu sei exatamente com qual cliente eu estou lidando com toda a aplicação. O host virtual terá o nome do servidor curingo relevante.

Você conseguiu alcançar isso e, em caso afirmativo, como? Caso contrário, qualquer idéia seria de grande ajuda!

Estou pensando em usar um filtro para fazê-lo.

🙂

também vai precisar que você configure seu domínio como um domínio curinga, caso não seja necessário criar manualmente cada subdomínio por cliente.

outra solução que não é tão dependente da sinfonia é usar um .htaccess

 Options +FollowSymLinks Options +Indexes RewriteEngine On RewriteBase / RewriteCond %{HTTP_HOST} !www.domain.com$ [NC] RewriteCond %{HTTP_HOST} ^(www.)?([a-z0-9-]+).domain.com [NC] RewriteRule (.*) $1?sub=%2&page=$1&domain=%{HTTP_HOST} [QSA,L]  

esse código basicamente enviará para a página solicitada o subdomínio, o domínio e a página solicitada. então, no php, você pode verificar se é igual ao nome de usuário do seu cliente. e permitir que você também use domínios estacionados para seus clientes ao mesmo tempo.

Espero que ajude.

Porque você deseja carregar um aplicativo diferente, o filtro não ajudará. Basta usar o frontcontroller (index.php) para extrair o subdomínio e, se o diretório do aplicativo existir, carregue o aplicativo (exceto 404). Você pode até armazenar o id na configuração do aplicativo.

Estou fazendo algo parecido. Tenho em atenção que não tentei esta configuração exata.

 $tokens = explode('.', $_SERVER['SERVER_NAME'], 2); $app = $tokens[0] == 'www' ? 'default' : $tokens[0]; //assumes you aren't allowing www.app.example.com, change if you are try { $appConfiguration = ProjectConfiguration::getApplicationConfiguration($app, 'prod', false); } catch(InvalidArgumentException $e) //thrown if app doesn't exist { $fallbackConfiguration = ProjectConfiguration::getApplicationConfiguration('default', 'prod', false); $context = sfContext::createInstance($fallbackConfiguration); $request = $context->getRequest(); $request->setParameter('module', 'default'); //set what route you want an invalid app to go to here $request->setParameter('action', 'invalidApplication'); $context->dispatch(); } if (isset($appConfiguration)) { sfContext::createInstance($appConfiguration)->dispatch(); } 

Dê uma olhada em sfDomainRoutePlugin – faz o que deseja. No entanto, na sua versão atual você não obtém a funcionalidade Propel ou DoctrineRoute, o que significa que você deve procurar manualmente o cliente com base no parâmetro do subdomínio retornado do plugin. Exemplo:

app / frontend / config / routing.yml

 # pick up the homepage homepage: url: / class: sfDomainRoute param: { module: homepage, action: index } requirements: sf_host: [www.example.com, example.com] # catch subdomains for customers customer_subdomain: url: / class: sfDomainRoute param: { module: customer, action: index } 

app / frontend / modules / customer / actions.class.php

 public function executeIndex(sfWebRequest $request) { // get the subdomain parameter $this->subdomain = $request->getParameter('subdomain'); // retrieve customer (you have to create the retrieveBySubdomain method) $this->customer = CustomerPeer::retrieveBySubdomain($this->subdomain); } 

Este é apenas um exemplo, mas uso uma abordagem semelhante, e o plugin faz o que é anunciado. Boa sorte.

Se você é aventureiro, pode dar uma olhada no Capítulo 2 no “Mais com o livro symfony”. Isso ajudaria você a entender o código em sfDomainRoutePlugin.

Intereting Posts