我的目标是从配置文件中获取与应用程序相关的设置,并将它们加载到DataSource并在应用程序中使用它。在从配置文件加载的过程中,我想验证它们,如果它们失败,Laravel应该停止它的启动。我猜,听起来有些混乱。希望以下示例有所帮助:
我的配置文件appSettings.php
位于app/config
,只是一个示例:
return array(
'color' => '',
'texture' => 'mixed',
'layers' => 3
);
我的DataSource类DataSource.php
位于source/DataSource.php
中,只是一个示例:
public class DataSource {
public static function load() {
if (Config::get('appSettings.color').empty()) {
return false;
}
// Do other validations etc..
return true;
}
public function getColorForRoom($roomId) {
return something;
}
}
现在,我调用方法DataSource::load()
的正确位置是什么? DataSource
将在应用程序中用于获取某些数据,例如调用getColorForRoom($roomId)
函数。
也许在初学者或我可以做的某个地方:
if (!DataSource::load()) {
// Stop booting up Laravel
}
但是我不知道究竟要把它放在哪里以及如何阻止应用程序启动。
可能的解决方案
我不确定这是否是正确的方法,但这似乎是一个好方法:
在我的bootstrap/start.php:
require $app['path.base'] . '/app/source/DataSource.php';
if (!DataSource::load()) {
Log::error("Failed to load datasource");
throw new ApplicationBootException();
}
同样,我对此并不完全确定。这是一个糟糕的解决方案还是有其他更好的解决方案?
其他可能的解决方案是从路由或过滤器加载DataSource,如下面的答案中所述。
答案 0 :(得分:1)
好吧 - 你可以把它放在filters.php文件中
App::before(function($request)
{
if (!DataSource::load()) {
App::abort(500, 'Config is not correctly set');
}
});
答案 1 :(得分:0)
为什么不抛出自定义异常?然后你可以捕获这个异常并重定向到一个类似404的视图但是你的应用程序是自定义的吗?
public class DataSource {
public static function load() {
if (Config::get('appSettings.color').empty()) {
throw new ApplicationBootException();
}
// Do other validations etc..
return true;
}
}
您可以将其放在路线文件中。
App::error(function(ApplicationBootException $exception, $code){
//.. your code here to handle the exception
});
请注意我只是以ApplicationBootException
为例。您必须创建此类并使其扩展Exception