2013-12-18 140 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')來簡單地調用它們? –

相關問題