Laravel: загрузка начальных классов пользовательских настроек

Моя цель — извлечь настройки, относящиеся к приложению, из файла конфигурации, загрузить их в источник данных и использовать их в приложении. В процессе загрузки из конфигурационного файла я хотел бы проверить их, и если они потерпят неудачу, 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();
}

Опять же, я не совсем уверен в этом. Это плохое решение или есть другие лучшие решения?

Другие возможные решения — загрузка источника данных из маршрутов или фильтров, как указано в ответах ниже.

2

Решение

Почему бы вам не бросить пользовательское исключение? Тогда вы можете поймать это исключение и перенаправить в представление, похожее на 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

0

Другие решения

Хорошо — вы можете поместить его в файл filters.php

App::before(function($request)
{
if (!DataSource::load()) {
App::abort(500, 'Config is not correctly set');
}
});
1

По вопросам рекламы [email protected]