2013-09-04 11 views
19

Sagen wir, ich habe folgendes:Kann ich mehrere Domains in einer Routinggruppe in Laravel gruppieren?

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() 
{ 
    ... 
}); 

Gibt es eine Möglichkeit, mehrere Domänen eine Routing haben Gruppe teilen? Etwas wie:

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

Antwort

40

Laravel scheint dies nicht zu unterstützen.

Ich bin mir nicht sicher, warum ich nicht früher darüber nachgedacht habe, aber ich denke, eine Lösung wäre, die Routen in einer separaten Funktion zu deklarieren, die sie an beide Routengruppen weitergibt.

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

$appRoutes = function() { 
    Route::get('/',function(){ 
     ... 
    }); 
}; 

Route::group(array('domain' => 'app.example.com'), $appRoutes); 
Route::group(array('domain' => 'dev.app.example.com'), $appRoutes); 

Ich bin mir nicht sicher, ob es signifikante Auswirkungen auf die Leistung dieser Lösung gibt.

+0

Hat jemand jemals die Auswirkungen auf die Leistung in Betracht gezogen? – FooBar

+0

Danke dafür. Ich denke, das hat keine Auswirkungen auf die Performance, weil Sie es nur in einer Array-Variablen speichern und es nur auf die 2-Deklaration auffüllen. Prost! – marknt15

+1

Danke, das war nützlich für mich ... –

1

Derzeit können Sie nicht. Ich hatte das gleiche "Problem"; Meine Lösung ist es, mit einer foreach durch die Subdomains zu fahren und die Routen zu registrieren.

4

Auch daran interessiert! Ich versuche, eine lokale Subdomain-Route für Entwicklung und Produktion für die eine Controller-Aktion zu registrieren.

heißt

# 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]'); 
}); 

Ich habe versucht:

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

Aber es ist fehlgeschlagen.

keine großes Problem, wie DesignerGuy erwähnte ich nur in einer Funktion auf beiden Routen passieren kann - aber es wäre nur eleganter, wenn sie gruppiert :)

+0

Ich versuche ein ähnliches Problem zu lösen. Nämlich, um ein "ui.domain.com" und ein "api.domain.com" in der Produktion zu haben, aber meinem Entwicklungsteam zu erlauben, "ui.domain.local" und "api.domain.local" für ihre lokale Entwicklung zu haben Umgebungen. Die Unterstützung für eine Joker-Karte nach der Sub-Domain würde den Zweck erfüllen. Das grundlegende Problem ist, dass ich versuche zu lösen ist Konfliktlinien zu lösen. Zum Beispiel sollte ui.domain.com/messages HTML zurückgeben und api.domain.com/messages sollte JSON zurückgeben. also zwei Gruppen mit 'Domain' => 'api. (: Jeder)' und 'Domain' => 'ui. (: Jeder)' Ideal wäre –

0

siehe diesen Link werden könnte. http://laravel.com/docs/routing#sub-domain-routing

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

oder Dieses Paket verwenden.

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

Es hilft Ihnen, wo auf Gruppe wie diese Routing einstellen.

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

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

2

Check in laravel docs, wenn Sie Haupt-Domain myapp ist, ist in der Produktion myapp.com und in der lokalen Umgebung ist myapp.dev versuchen, einen mit *

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

Dies ist ein guter Tipp. Beachten Sie jedoch, dass der Domänenparameter als erster Parameter aller untergeordneten Routen übergeben wird: 'Route :: get ('users/{id}', 'UsersController @ show'); // id = "example.com"; ' Um dies zu vermeiden, können Sie stattdessen immer Umgebungsvariablen verwenden: ' $ domain = env ('BASE_DOMAIN', 'example.com'); Route :: group (['domain' => 'subdomain.'. $ Domain], function() { ... }); ' –

Verwandte Themen