Я использую Propel для подключения и запроса базы данных и после обновления от symfony 2.7 до symfony 2.8. Я столкнулся с странной проблемой. Когда я полностью удалить содержимое каталога кэша, а затем запустить app/console
команду я получил это исключение:Содержит ли symfony 2.8 пакеты и сервисы в правильном порядке во время разминки?
[PropelException] Нет Информация о соединении в файле конфигурации среды выполнения для источника данных [по умолчанию]
Это также происходит каждый раз, когда я изменяю файлы конфигурации или перевода, а затем обновляю страницу. Когда я делаю это снова, он работает нормально.
я понял, что это вызвано одной из моей службы, которая передается прут в качестве глобальной переменной, как это в app/config/config.yml
:
# Twig Configuration
twig:
debug: "%kernel.debug%"
strict_variables: "%kernel.debug%"
globals:
settings: @app.settings
Служба попытаться загружает данные из базы данных в конструкторе:
<?php
namespace AppBundle\Services;
use AppBundle\Propel\SettingsQuery;
class PropelSettings {
private $settings = array();
public function __construct() {
$this->initialize();
}
public function initialize() {
$settings = SettingsQuery::create()
->select(array('key', 'value'))
->find();
foreach ($settings as $s) {
$this->settigns[$s['key']] = $s['value'];
}
}
public function get($key, $default = null) {
return isset($this->settings[$key]) ? $this->settings[$key] : $default;
}
}
, но это происходит до конфигурации загрузки пропеллера, вызвав метод boot() в vendor/propel/propel-bundle/Propel/PropelBundle/PropelBundle.php
, что означает, что symfony пытается создать экземпляр службы, прежде чем он загрузит все пакеты во время разминки. Это не проблема в Symfony 2.7 и более ранних версиях. Этого можно легко избежать, не запрашивая базу данных во время построения службы, но верно ли это поведение Symfony 2.8? Есть ли способ заставить движок загружаться до того, как symfony создаст любой экземпляр службы?
Спасибо, действительно, я проверил тот же пример сервиса, но на этот раз я использовал доктрину, и он отлично работает, поэтому, вероятно, PropelBundle нуждается в исправлениях для совместимости с symfony 2.8 – KarasQ