2013-09-04 7 views
19

Diciamo che ho il seguente:Posso raggruppare più domini in un gruppo di routing in Laravel?

Route::group(array('domain' => array('admin.example.com')), function() 
{ 
    ... 
}); 

Route::group(array('domain' => array('app.example.com')), function() 
{ 
    ... 
}); 

Route::group(array('domain' => array('dev.app.example.com')), function() 
{ 
    ... 
}); 

C'è un modo per avere più domini condividono un gruppo di routing? Qualcosa di simile:

Route::group(array('domain' => array('dev.app.example.com','app.example.com')), function() 
{ 
    ... 
}); 

risposta

40

Laravel sembra non supportare questo.

Non sono sicuro del motivo per cui non ci ho pensato prima, ma credo che una soluzione sarebbe semplicemente dichiarare i percorsi in una funzione separata come passare a entrambi i gruppi di rotte.

Non sono sicuro se ci sia un impatto significativo sulle prestazioni di questa soluzione.

+0

Qualcuno ha mai considerato l'impatto sulle prestazioni? – FooBar

+0

Grazie per questo. Penso che non ci sia alcun impatto sulle prestazioni a causa del fatto che lo stai semplicemente archiviando in una variabile di array e lo stai semplicemente sostituendo alla dichiarazione 2. Saluti! – marknt15

+1

Grazie per avermi aiutato ... –

1

Attualmente non è possibile. Ho avuto lo stesso problema'; la mia soluzione è quella di scorrere i sottodomini con un foreach e registrare i percorsi.

4

Interessato anche a questo! Sto provando a registrare un percorso di sottodominio di sviluppo + produzione locale, per l'azione del controller singolo.

cioè

# Local Dev 
Route::group(array('domain' => "{subdomain}.app.dev"), function() { 
    Route::get('/{id}', '[email protected]'); 
}); 

# Production Server 
Route::group(array('domain' => "{subdomain}.app.com"), function() { 
    Route::get('/{id}', '[email protected]'); 
}); 

ho provato:

# Failed 
Route::group(array('domain' => "{account}.app.{top_level_domain}"), function() { 
    Route::get('/{id}', '[email protected]'); 
}); 

Ma non è riuscito.

Non è un problema enorme, come accennato DesignerGuy posso solo passare in una funzione per entrambe le vie - ma sarebbe solo essere più elegante se potessero essere raggruppati :)

+0

Sto tentando di risolvere un problema simile. Vale a dire, avere un "ui.dominio.com" e un "api.dominio.com" in produzione, ma consentire al mio team di sviluppo di avere "ui.dominio.locale" e "api.dominio.locale" per il loro sviluppo locale ambienti. Supporto per una wild card dopo che il sottodominio avrebbe fatto il trucco. Il problema di base è che il mio obiettivo è risolvere i percorsi in conflitto. Ad esempio, ui.domain.com/messages deve restituire HTML e api.domain.com/messages deve restituire JSON. così due gruppi con 'dominio' => 'api. (: Qualsiasi)' e 'dominio' => 'ui. (: Qualsiasi)' sarebbe l'ideale –

0

vedere questo link. http://laravel.com/docs/routing#sub-domain-routing

Route::group(array('domain' => '{subdomain}.example.com'), function() 
{ 
    ... 
}); 

o Utilizzare questo pacchetto.

https://github.com/jasonlewis/enhanced-router

lo aiuterà è possibile impostare in cui il gruppo di routing come questo.

Route::group(array('domain' => '{maindomain}'), function() 
{ 
    ... 
})->where('maindomain', '.+\.example\.com$'); 
+0

questo non funziona Route::group(array('domain' => '{maindomain}'), function() { ... })->where('maindomain', '.+\.example\.com$'); Ivan

2

check-in laravel docs, se del dominio principale è myapp, nella produzione è myapp.com e in ambiente locale è myapp.dev provare a utilizzare un *

Route::group(array('domain' => '{subdomain}.myapp.*'), 
function() 
{ 
    ... 
}); 
9

laravel 5,1

 

Route::pattern('subdomain', '(dev.app|app)'); 
Route::group(['domain' => '{subdomain}.example.com'], function() { 
    ... 
}); 
 
 

Route::pattern('subdomain', '(dev.app|app)'); 
Route::pattern('domain', '(example.com|example.dev)'); 
Route::group(['domain' => '{subdomain}.{domain}'], function() { 
    ... 
}); 
 
+5

Questa è una grande punta. Si noti, tuttavia, che il parametro del dominio verrà passato come primo parametro di qualsiasi route figlio: 'Route :: get ('users/{id}', 'UsersController @ show'); // id = "example.com"; ' Per evitare questo, è sempre possibile utilizzare variabili di ambiente: ' $ dominio = env ('BASE_DOMAIN', 'esempio.com'); Route :: group (['dominio' => 'sottodominio.'. $ Dominio], function() { ... }); ' –