如何在 laravel 5.3 中创建自定义配置文件
How to do a custom config file in laravel 5.3
我正在尝试从数据库中获取值并传递给自定义 settings.php 文件,在 laravel 4 中,我可以从模型中设置值:$settings = Setting::find( 1);但是在 laravel 5.3 的 config 文件夹中它是 app 文件夹。
获取值并传递给 settings.php 文件的最佳方法是什么?
也许添加服务提供商?我怎样才能做到这一点?
class 设置服务提供商...
public function register()
{
$settings = Setting::find(1);
Config::set('settings.company', $settings->company);
return $settings;
}
也许在 .env 中写入?但是如果用户想要更新这些值,我如何从用户界面更新 .env?
请帮忙!
提前致谢。
这是我在 middleware
中用来连接数据库的示例
我已经创建了 Config
中间件并在路由中使用它。就我而言,我有一个多租户应用程序,我相信它也会对您有所帮助。 例子是:
创建名为 Config
的中间件
namespace App\Http\Middleware;
use App\Sites;
use Closure;
class config
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
$site_url = $_SERVER['SERVER_NAME'];
$site = Sites::where('site_url',$site_url)->first();
$config = array();
if(!is_null($site)){
$config['id'] = $site["id"];
$config['site_url'] = $site["site_url"];
$config['theme'] = $site["theme"];
$config['host'] = $site["host"];
$config['db_name'] = $site["database"];
$config['user'] = $site["user"];
$config['password'] = $site["password"];
$config['prefix'] = $site["prefix"];
}else{
//default values
$config['id'] = "0";
$config['site_url'] = "demo.local";
$config['theme'] = "theme";
$config['host'] = "localhost";
$config['db_name'] = "dbname";
$config['user'] = "username";
$config['password'] = "password";
$config['prefix'] = "tbl";
}
//dd($config);
// \Session::put('config', $config);
\Config::set('database.connections.mysql.host', $config['host'] );
\Config::set('database.connections.mysql.database', $config['db_name'] );
\Config::set('database.connections.mysql.username', $config['user']);
\Config::set('database.connections.mysql.password', $config['password']);
\Config::set('database.connections.mysql.prefix', $config['prefix']);
\Config::set('database.connections.mysql.theme', $config['theme']);
\DB::reconnect();
return $next($request);
}
}
现在在路由中,您要应用该配置的地方,请按照以下步骤操作
Route::group(['middleware' => 'config'],function (){
Route::get('/', ['uses' => 'HomeController@page']);
});
我正在尝试从数据库中获取值并传递给自定义 settings.php 文件,在 laravel 4 中,我可以从模型中设置值:$settings = Setting::find( 1);但是在 laravel 5.3 的 config 文件夹中它是 app 文件夹。 获取值并传递给 settings.php 文件的最佳方法是什么? 也许添加服务提供商?我怎样才能做到这一点?
class 设置服务提供商...
public function register()
{
$settings = Setting::find(1);
Config::set('settings.company', $settings->company);
return $settings;
}
也许在 .env 中写入?但是如果用户想要更新这些值,我如何从用户界面更新 .env?
请帮忙! 提前致谢。
这是我在 middleware
中用来连接数据库的示例
我已经创建了 Config
中间件并在路由中使用它。就我而言,我有一个多租户应用程序,我相信它也会对您有所帮助。 例子是:
创建名为 Config
的中间件
namespace App\Http\Middleware;
use App\Sites;
use Closure;
class config
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
$site_url = $_SERVER['SERVER_NAME'];
$site = Sites::where('site_url',$site_url)->first();
$config = array();
if(!is_null($site)){
$config['id'] = $site["id"];
$config['site_url'] = $site["site_url"];
$config['theme'] = $site["theme"];
$config['host'] = $site["host"];
$config['db_name'] = $site["database"];
$config['user'] = $site["user"];
$config['password'] = $site["password"];
$config['prefix'] = $site["prefix"];
}else{
//default values
$config['id'] = "0";
$config['site_url'] = "demo.local";
$config['theme'] = "theme";
$config['host'] = "localhost";
$config['db_name'] = "dbname";
$config['user'] = "username";
$config['password'] = "password";
$config['prefix'] = "tbl";
}
//dd($config);
// \Session::put('config', $config);
\Config::set('database.connections.mysql.host', $config['host'] );
\Config::set('database.connections.mysql.database', $config['db_name'] );
\Config::set('database.connections.mysql.username', $config['user']);
\Config::set('database.connections.mysql.password', $config['password']);
\Config::set('database.connections.mysql.prefix', $config['prefix']);
\Config::set('database.connections.mysql.theme', $config['theme']);
\DB::reconnect();
return $next($request);
}
}
现在在路由中,您要应用该配置的地方,请按照以下步骤操作
Route::group(['middleware' => 'config'],function (){
Route::get('/', ['uses' => 'HomeController@page']);
});