Laravel: загрузка начального класса пользовательских настроек
Моя цель состоит в том, чтобы извлечь соответствующие настройки приложения из файла конфигурации и загрузить их в источник данных и использовать его в приложении. В процессе загрузки из конфигурационного файла я хотел бы проверить их, и если они не сработают, Laravel должен остановить загрузку. Звучит немного запутанно, я думаю. Надеюсь, что следующий пример поможет:
Мой конфигурационный файл appSettings.php
находится в app/config
, просто пример:
return array(
'color' => '',
'texture' => 'mixed',
'layers' => 3
);
Мой класс источников данных 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)
.
Может быть, в intializers или где-нибудь я мог бы сделать:
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();
}
Опять же, я не совсем уверен в этом. Это плохое решение или есть другие лучшие решения?
Другие возможные решения-загрузка источника данных из маршрутов или фильтров, как указано в приведенных ниже ответах.
2 ответа:
Почему бы вам не создать собственное исключение? Затем вы можете поймать это исключение и перенаправить на представление, которое похоже на 404, но настроено для вашего приложения?
public class DataSource { public static function load() { if (Config::get('appSettings.color').empty()) { throw new ApplicationBootException(); } // Do other validations etc.. return true; } }
Вы можете поместить это в файл routes.
Пожалуйста, обратите внимание, что я просто используюApp::error(function(ApplicationBootException $exception, $code){ //.. your code here to handle the exception });
ApplicationBootException
в качестве примера. Вам придется создать этот класс и расширить егоException