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

And*_*ing 26 php routing laravel 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()
{
    ...
});
Run Code Online (Sandbox Code Playgroud)

有没有办法让多个域共享一个路由组?就像是:

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

And*_*ing 51

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);
Run Code Online (Sandbox Code Playgroud)

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

  • 我不确定@Fredrik,但那句话可能是指实际的路线实现,而不是路线的构建。在上面的示例中,如果“Route::get”引用了控制器方法,则它可能是可缓存的。 (2认同)

小智 12

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

  • 这是一个很好的提示.但请注意,domain参数将作为任何子路由的第一个参数传递:`Route :: get('users/{id}','UsersController @ show'); // id ="example.com";`为了避免这种情况,你总是可以使用环境变量:`$ domain = env('BASE_DOMAIN','example.com'); Route :: group(['domain'=>'subdomain.'.$ domain],function(){...});` (7认同)

Mar*_*rty 5

您也可以传递域名:

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 . '!';
    });
});
Run Code Online (Sandbox Code Playgroud)

以防万一您需要知道使用哪个域名调用控制器。使用 Laravel 5.6 对其进行了测试。