2013-12-18 181 views
0

我有一个Laravel安装,我希望在其上运行3个站点(附加域)。我正在使用Laravel的路由分组方法来抓取每个域。但是,我需要能够知道我在每个组内部使用哪个域。做这个的最好方式是什么?我有以下代码:将路由组中的变量传递给Laravel 4中的路由功能

Route::group(array('domain' => 'domainone.com'), function($domain = 'domainone') 
{ 
    Route::get('/', function($domain) { 
     // 
    }); 
}); 

^哪个行不通。

notes建议在URL中使用通配符,例如。

Route::group(array('domain' => '{domain}.com'), function() 
{ 
    Route::get('/', function($domain) { 
     // 
    }); 
}); 

但是,我更喜欢不同的方法,因为我在本地服务器的开发过程中无法真正使用它。有没有更像我的第一种方法,我可以手动为每个域声明一个键?

编辑:我还需要将该域变量传递给控制器​​,我也正在努力解决如何做?

谢谢。


EDIT 2

我的问题是,我不使用子域名,我使用域;我有3个独立的域,用于在Laravel的同一个安装上运行的3个姊妹站点。所以我有3个路由组,每个域有一个。此外,我不想请求域变量每次使用{domain}.com,我想要告诉 Laravel在每种情况下的域,然后将该域作为变量传递到每个组内的适当的控制器。这里是我的示例代码:

$domain1 = 'domain1.com'; 
$domain2 = 'domain2.com'; 
$domain3 = 'domain3.com'; 

Route::group(array('domain' => $domain1), function(){ 
    Route::get('/', '[email protected]'); // <-- I want to access $domain1 in my controller 
}); 
Route::group(array('domain' => $domain2), function(){ 
    Route::get('/', '[email protected]'); // <-- ...and $domain2 
}); 
Route::group(array('domain' => $domain3), function(){ 
    Route::get('/', '[email protected]'); // <-- ...and $domain3 
}); 

回答

1

这是你的第一个方法的选择:

$domain = 'domainone'; 
Route::group(array('domain' => $domain.'.com'), function() use ($domain) 
{ 
    Route::get('/', function() use ($domain) { 
     echo "$domain"; 
    }); 
}); 

你可以通过watever你喜欢你的控制器,通过组也一样,你只需要添加更多的水平。

$subdomain = 'atlanta'; 
$domain = 'domainone'; 

Route::group(array('domain' => "$subdomain.$domain.com"), function() 
{ 
    Route::group(array('domain' => '{subdomain}.{domain}.com'), function() 
    { 
     Route::get('testdomain', function($subdomain, $domain) { 
      dd("closure: subdomain: $subdomain - domain: $domain"); 
     }); 

     Route::get('testdomaincontroller', '[email protected]'); 
    }); 
}); 

这样做,你要明白,你的前两个变量传递给你的控制器动作总是被$子域和子域$。这里有一个控制器来显示它,你可以用它来过测试这些路线:

class FooController extends Controller { 

    public function index($subdomain, $domain) 
    { 
     dd("controller: subdomain: $subdomain - domain: $domain"); 
    } 
} 

你有这两种不同的路线:

http://yourdomain.dev/testdomain 
http://yourdomain.dev/testdomaincontroller 
+0

对不起,这似乎会引发一个错误:'引用行'Route :: get('/',函数($域){{ – Inigo

+0

你需要在第二个版本上做同样的工作编辑 –

+0

非常感谢安东尼奥现在正在工作只要把它包装起来,你知道我怎么会把这个变量传递给控制器​​,也就是说如果我有'Route :: get('/','PrimaryController @ index');'我将如何发送域变量到这个控制器函数?谢谢。 – Inigo

0

我做到这一点有以下两个步骤:

首先,使用Laravel文档示例,下拉子域并将其分配给{account}。

Route::group(array('domain' => '{account}.myapp.com'), function() 

从这里,你分配给路由这组内的任何控制器将在其职能注入这个{}帐户数据的能力。

注意:您的不能在构造函数中访问它。需要使用此数据的Controller中的每个函数都需要为其创建的参数。像这样:

/** 
* The $subdomain variable below will capture the data stored in 
* {account} in your route group. Note that you can name this variable 
* anything you'd like. 
*/ 
public function showCreateBankAccount($subdomain) { 

    echo "This is your subdomain: " . $subdomain; 

} 
+0

感谢您的快速响应。不幸的是,它并没有解决我的问题。请参阅编辑2到我原来的问题。 – Inigo

+0

如果你看看Antonio的上面的答案,我想要做他所做的事情,除了将'$ domain'变量传递给控制器​​,而不是他已经使用的闭包函数。 – Inigo

+1

我明白你现在得到了什么。在环境之间配置数据时,我做了类似的事情。你有没有考虑在配置文件中创建新变量,然后在整个应用程序中使用'Config :: get('app.variable_name')来简单地调用它们? –

相关问题