Php 生产和开发中的Laravel域路由

Php 生产和开发中的Laravel域路由,php,laravel,laravel-routing,Php,Laravel,Laravel Routing,我有一个正在工作的Laravel 5.2项目,使用我在本地(homestead)和生产中运行的子域路由(forge在AWS上配置了通配符子域路由)。我的本地项目具有admin.project.app的主机文件条目,并成功路由到admin.project。app,而我的生产版本路由到admin.project。com 我的local.env文件具有变量APP_env=local,而forge上的My.env具有变量APP_env=production。到目前为止,一切顺利 我遇到的问题是,我希望L

我有一个正在工作的Laravel 5.2项目,使用我在本地(homestead)和生产中运行的子域路由(forge在AWS上配置了通配符子域路由)。我的本地项目具有admin.project.app的主机文件条目,并成功路由到admin.project。app,而我的生产版本路由到admin.project。com

我的local.env文件具有变量APP_env=local,而forge上的My.env具有变量APP_env=production。到目前为止,一切顺利

我遇到的问题是,我希望Laravel根据我在本地(扩展名为.app)或在生产中(扩展名为.com)使用这种类型的通配符路由规则来解析域:

Route::group(['domain' => 'admin.project.*'], function()
{
    Route::get('/', 'HomeController@index');

});
我遇到的问题是,无论是Laravel、Ngnix、AWS还是Forge都要求我像这样显式地路由,这似乎是完全多余的:

if (App::environment('local')) {
    Route::group(['domain' => 'admin.project.app'], function()
    {
        Route::get('/', 'HomeController@index');

    });
}else{
    Route::group(['domain' => 'admin.project.com'], function()
    {
        Route::get('/', 'HomeController@index');

    });

}

或许我的期望是错的;)任何关于我可能做错了什么的指点,我们都非常感激

路由参数
{}
而不是
*
会发生同样的情况吗?我不确定laravel routing是否支持*:

Route::group(['domain' => 'admin.project.{tld}'], function()
{
    Route::get('/', 'HomeController@index');
});

或者,如果您只是将域用作一个ENV变量呢?在本地环境文件中,添加:

APP\u DOMAIN=admin.project.APP

然后在路由文件中:

Route::group(['domain' => env("APP_DOMAIN","admin.project.com")],function(){

});

真正简单的解决方案是使用三元运算符来确定TLD,并在组的
属性中使用:

Route::group(['domain' => 'admin.project.' . ((env('APP_ENV') == 'production') ? 'com' : 'app')], function()
{
    Route::get('/', 'HomeController@index');
});

避免代码重复和添加额外的环境变量。

第二种解决方案是一种很好的解决方案。然而,当路线有自己的参数时,第一种方法肯定会造成混乱。因为如果您有这样的路由定义
route::get('user/{name}','UsersController@show');
,操作方法将接收两个参数
show($tld,$name)
,因此所有具有自己参数的路由操作最终都需要添加额外的
$tld
参数。我喜欢这样,并尝试过,但显然Laravel不喜欢这样动态地组合域属性。我不敢相信我必须在拉雷维尔一起破解一些东西来解释TLD。Yuk@Gunnar这种方法很有效,我过去也用过,但答案中的代码有一个小问题。我已经对它进行了更新,将TLD表达式封装在括号中,否则字符串串联将无法正常工作,因为三元运算符上的算术运算符,例如
,因此,在求值时,它尝试将字符串与条件的结果连接起来,条件是
true
false
,而不是表达式的结果
com
app