我使用laravel框架相当新。我有以下要求。我有一个域 - example.com,它的整个代码堆在laravel中运行。让我们说配置默认数据库连接是 - 'db1'
现在,如果网址变为 - example.com/country - 我希望默认数据库连接成为 - 'db2'
我还想将基本URL更改为example.com/country,因为所有模块都是相同的。这里只会改变数据库连接。
有人可以帮助我吗?
答案 0 :(得分:6)
我会按以下方式进行:
将允许的国家/地区列表放入配置文件(countries.php
)。
在routes.php
:
// choosing country
$country = '';
if (in_array(Request::segment(1), Config::get('countries'))) {
$country = Request::segment(1);
}
// making route for top level
if ($country != '') {
Route::any( '/', 'MainPage@index');
}
// making routes optionally prefixed by country
Route::group(
array('prefix' => $country,
function () {
// here all routes
});
在已定义连接的database.php
中,您可以添加其他连接,例如:
'germany' => array(
'driver' => 'mysql',
'host' => 'localhost',
'database' => 'germany_connection',
'username' => 'root',
'password' => '',
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
),
现在在同一个文件中(尽管你应该把它移到其他地方),你可以这样做:
if ($country == 'germany') {
DB::disconnect();
Config::set('database.default','germany');
DB::reconnect();
}
您当然可以在此处添加许多条件,或者如果您已为每个允许的国家/地区定义了连接,则可以执行以下操作:
if ($country != '' ) {
DB::disconnect();
Config::set('database.default', $country);
DB::reconnect();
}
它应该可行,但我还没有测试过它
答案 1 :(得分:1)
我使用环境做了类似的事情。
在检测环境时添加新规则以解析URL并将其更改为新环境。然后,您可以为设置新数据库,基本URL等的新环境添加目录。