我可以在Laravel中的路由组中对多个域进行分组吗?

时间:2013-09-04 00:01:24

标签: php laravel routing laravel-routing

假设我有以下内容:

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

有多种方法让多个域共享一个路由组?类似的东西:

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

9 个答案:

答案 0 :(得分:46)

Laravel似乎不支持这一点。

我不确定为什么我不会更快地想到这一点,但我想一个解决办法就是在一个单独的函数中声明路由,将其传递给两个路由组。

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);

我不确定此解决方案是否会对性能产生重大影响。

答案 1 :(得分:11)

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

答案 2 :(得分:4)

对此感兴趣!我正在尝试为一个控制器操作注册本地开发+生产子域路由。

# Local Dev
Route::group(array('domain' => "{subdomain}.app.dev"), function() {
    Route::get('/{id}', 'SomeController@getShow');
});

# Production Server
Route::group(array('domain' => "{subdomain}.app.com"), function() {
    Route::get('/{id}', 'SomeController@getShow');
});

我试过了:

# Failed
Route::group(array('domain' => "{account}.app.{top_level_domain}"), function() {
    Route::get('/{id}', 'SomeController@getShow');
});

但它失败了。

不是一个巨大的问题,因为DesignerGuy提到我可以将一个函数传递给两个路径 - 但如果它们可以分组,它会更优雅:)

答案 3 :(得分:3)

签入laravel docs,如果您的主域名为myapp,则生产位置为myapp.com,而本地环境myapp.dev请尝试使用*

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

答案 4 :(得分:1)

目前你不能。我有同样的问题';我的修复方法是使用foreach遍历您的子域并注册路由。

答案 5 :(得分:1)

根据laravel document 在laravel 5.4+中,您可以使用以下方式:

this.db.collection('session').snapshotChanges()
    .pipe(map(actions => actions.map(a => a.payload.doc.id)));

答案 6 :(得分:1)

您也可以传递域名:

Route::pattern('domain', '(domain1.develop|domain2.develop|domain.com)');
Route::group(['domain' => '{domain}'], function() {
    Route::get('/', function($domain) {
        return 'This is the page for ' . $domain . '!';
    });
});

以防万一,您需要知道调用哪个域名的控制器。 在Laravel 5.6上进行了测试。

答案 7 :(得分:0)

看到这个链接。 http://laravel.com/docs/routing#sub-domain-routing

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

或使用此包。

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

它可以帮助您像这样设置组路由的位置。

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

答案 8 :(得分:0)

在有关同一主题的Laravel讨论中找到的一个更好的答案是使用宏。这对我很有效。 https://github.com/laravel/framework/issues/4017#issuecomment-267820459

Route::macro("domain", function(array $domains, \Closure $definition) {
    foreach ($domains as $domain) {
        Route::group(['domain' => $domain], $definition);
    }
});

Route::domain(['foo.bar.dev', 'foo.bar'], function($route) {
    // Do stuff
});