1

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

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

^ 这不起作用。

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

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

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

编辑:然后我还需要将该域变量传递给控制器​​,我也在努力弄清楚该怎么做?

谢谢。


编辑 2

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

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

Route::group(array('domain' => $domain1), function(){
    Route::get('/', 'PrimaryController@somefunction1');  // <-- I want to access $domain1 in my controller
});
Route::group(array('domain' => $domain2), function(){
    Route::get('/', 'PrimaryController@somefunction2');  // <-- ...and $domain2
});
Route::group(array('domain' => $domain3), function(){
    Route::get('/', 'PrimaryController@somefunction3');  // <-- ...and $domain3
});
4

2 回答 2

2

这是您的第一种方法的一个选项:

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

您也可以通过组将您喜欢的水传递给您的控制器,您只需要再添加一个级别。

$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', 'FooController@index');
    });
});

通过这样做,您必须了解传递给控制器​​操作的前两个变量将始终是 $subdomain 和 $subdomain。这是一个显示它的控制器,您也可以使用它来测试这些路由:

class FooController extends Controller {

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

您将有两条不同的路线:

http://yourdomain.dev/testdomain
http://yourdomain.dev/testdomaincontroller
于 2013-12-18T15:12:30.120 回答
0

我通过以下两个步骤完成此操作:

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

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

从这里开始,您分配给该组中路由的任何控制器都将能够将此{account}数据注入其功能。

注意:您不能在构造函数中访问它。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;

}
于 2014-04-13T16:45:42.717 回答