假设我有以下内容:
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()
{
...
});
答案 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
});