Symfony2 Routing - ruteunderdomener

stemmer
24

Er det en måte å sette opp vertsnavn basert ruting i Symfony2 ?

Jeg fant ikke noe om dette temaet i den offisielle dokumentasjonen.
http://symfony.com/doc/2.0/book/routing.html

Jeg ønsker å rute forespørselen basert på den gitte vertsnavn:
foo.example.com
bar.example.com
. {{Subdomene}} example.com

Så i essensen, vil kontrolleren få gjeldende underdomene sendes som en parameter.

Ligner på Zend løsning:
http://framework.zend.com/manual/en/zend.controller.router.html#zend.controller.router.routes.hostname

$hostnameRoute = new Zend_Controller_Router_Route_Hostname(
    ':username.users.example.com',
    array(
        'controller' => 'profile',
        'action'     => 'userinfo'
    )
);
$plainPathRoute = new Zend_Controller_Router_Route_Static('');

$router->addRoute('user', $hostnameRoute->chain($plainPathRoute));

Jeg håper at det er mulig og jeg savnet det liksom.
Takk på forhånd!

Publisert på 20/03/2011 klokken 01:45
kilden bruker
På andre språk...                            


6 svar

stemmer
42

Bare for å påpeke at dette er nå lagt i Symfony v2.2 - http://symfony.com/doc/master/components/routing/hostname_pattern.html .

mobile_homepage:
    path:     /
    host:     m.{domain}
    defaults: { _controller: AcmeDemoBundle:Main:mobileHomepage }
    requirements:
        domain: %domain%

homepage:
    path:  /
    defaults: { _controller: AcmeDemoBundle:Main:homepage }
Svarte 30/01/2013 kl. 17:15
kilden bruker

stemmer
24

Dette er min løsning:

I config.ymlinne app dir legge til følgende linjer:

services:
   kernel.listener.subdomain_listener:
       class: Acme\DemoBundle\Listener\SubdomainListener
       tags:
           - { name: kernel.event_listener, event: kernel.request, method: onDomainParse }

Deretter oppretter klassen SubdomainListener.phpsom:

<?php

namespace Acme\DemoBundle\Listener;

use Symfony\Component\EventDispatcher\EventDispatcher;
use Symfony\Component\EventDispatcher\Event;

class SubdomainListener
{
   public function onDomainParse(Event $event)
   {
       $request = $event->getRequest();
       $session = $request->getSession();

       // todo: parsing subdomain to detect country

       $session->set('subdomain', $request->getHost());
   }
}
Svarte 14/08/2011 kl. 10:27
kilden bruker

stemmer
2

Alternativt kan få vertsnavn i kontrolleren:

class DefaultController extends PowmaController {

  /**
   * @Route("/test")
   */
  public function testAction() {
    return new Response( 'Hostname ' . $this->getRequestHostnameString() );
  }

  function getRequestHostnameString() {
    return $this->getRequest()->getHost();
  }
Svarte 07/03/2012 kl. 21:08
kilden bruker

stemmer
2

Jeg antar at underdomene ruting i symfony2 er prosessen med å velge definert kontrolleren i henhold til underdomene del av vertsnavn, og sesjon variable er ikke bidra til å løse definert kontrolleren.

Jeg satt forespørsel attributt: _controller, i kjernen lytteren som dette

$request->attributes->set('_controller','AcmeBundle:Demo:main');

Dette er hjelp å rute til definerte kontroller, men jeg mister debug profiler i dev miljø, fortsatt jeg kan ikke registrere en årsak

Svarte 13/02/2012 kl. 15:14
kilden bruker

stemmer
1

Det er en plugin for Symfony 1.2 som legger denne funksjonaliteten. Den koden er bare et par hundre linjer i en enkelt fil, og bør ikke være for diffcult til porten til Symfony 2. Men dokumentasjonen fra Sensio er ikke helt der ennå.

Du kan heller ikke inkludere underdomene i rute og hente domenet fra kontrolleren og behandle den der. Jeg tror det er denne metoden: getHost ()

Svarte 13/04/2011 kl. 07:02
kilden bruker

stemmer
0

Her er en pakke som håndterer flere domeneområde: https://github.com/AppVentus/MultiDomainBundle

Svarte 26/06/2013 kl. 08:38
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more