我想通过多个域访问单个 Laravel 应用程序。
对于路由,我使用了 Laravel 路由模式,例如。
$appRoutes = function() {
Route::group(['namespace'=>"Interface1"], function(){
/** route for index page and User authentication pages **/
Route::get('/', 'LoginController@showLoginForm')->name('login');
});
};
Route::group(array('domain' => 'example1.com'), $appRoutes);
Route::group(array('domain' => 'example2.com'), $appRoutes);
Run Code Online (Sandbox Code Playgroud)
现在,对于每个域,我已经替换了 AppServiceProvider.php 注册方法中的配置变量值:
if(isset($_SERVER['HTTP_HOST']) && !empty($_SERVER['HTTP_HOST']) ){
if($_SERVER['HTTP_HOST']=='example1.com'){
$configArray = [
'APP_NAME' => 'Application 1',
'APP_URL' => 'http://example1.com',
];
}else{
$configArray = [
'APP_NAME' => 'Application 2',
'APP_URL' => 'http://example2.com,
];
}
config($configArray);
}
Run Code Online (Sandbox Code Playgroud)
但我仍然没有使用正确的域名网址url(config('app.url'))
如何加载.env每个域的所有变量覆盖?
小智 7
对于当前的Laravel 7.x. 在撰写本文时,您可以在bootstrap/app.php文件中的语句之前添加以下代码return $app。
// bootstrap/app.php
// ...
/*
|-----------------------------------------------
| Load domain-specific .env file if it exists
|-----------------------------------------------
*/
if(isset($_SERVER['HTTP_HOST']) && !empty($_SERVER['HTTP_HOST'])){
$domain = $_SERVER['HTTP_HOST'];
}
if (isset($domain)) {
$dotenv = Dotenv\Dotenv::createImmutable(base_path(), '.env.'.$domain);
try {
$dotenv->load();
} catch (\Dotenv\Exception\InvalidPathException $e) {
// No custom .env file found for this domain
}
}
// ...
return $app;
Run Code Online (Sandbox Code Playgroud)
接下来,您应该有一个.env以下格式的每个域的文件.env.example1.com .env.example2.com。对于缺少显式文件的域,您可以保留原始文件.env作为后备.env。
对于 Laravel5.x或 Laravel ,您可以从原始解决方案6.x中找到更多内容。
config()设置配置设置,但不设置环境设置。
您必须执行以下操作:
if(isset($_SERVER['HTTP_HOST']) && !empty($_SERVER['HTTP_HOST']) ){
if($_SERVER['HTTP_HOST']=='example1.com'){
$configArray = [
'app.name' => 'Application 2',
'app.url' => 'http://example2.com',
]; ;
}else{
$configArray = [
'app.name' => 'Application 2',
'app.url' => 'http://example2.com',
];
}
config($configArray);
}
Run Code Online (Sandbox Code Playgroud)
然后您可以通过以下方式检索值:
config("app.name");
config("app.url");
Run Code Online (Sandbox Code Playgroud)
据我所知,在实际加载配置之前无法修改环境变量,因为配置是在服务提供者注册之前加载并读取环境变量的。
还要注意使用HTTP_HOST,因为它是客户端设置的标头,可能不可靠。
| 归档时间: |
|
| 查看次数: |
8446 次 |
| 最近记录: |