refactor propel configuration

This commit is contained in:
Manuel Raynaud
2013-03-26 17:25:10 +01:00
parent f8cbfbd858
commit 8433c5d555
13 changed files with 237 additions and 101 deletions

View File

@@ -0,0 +1,69 @@
<?php
/*************************************************************************************/
/* */
/* Thelia */
/* */
/* Copyright (c) OpenStudio */
/* email : info@thelia.net */
/* web : http://www.thelia.net */
/* */
/* This program is free software; you can redistribute it and/or modify */
/* it under the terms of the GNU General Public License as published by */
/* the Free Software Foundation; either version 3 of the License */
/* */
/* This program is distributed in the hope that it will be useful, */
/* but WITHOUT ANY WARRANTY; without even the implied warranty of */
/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */
/* GNU General Public License for more details. */
/* */
/* You should have received a copy of the GNU General Public License */
/* along with this program. If not, see <http://www.gnu.org/licenses/>. */
/* */
/*************************************************************************************/
namespace Thelia\Config;
use Symfony\Component\Config\Definition\ConfigurationInterface;
use Symfony\Component\Config\Definition\Builder\TreeBuilder;
class DatabaseConfiguration implements ConfigurationInterface
{
/**
* Generates the configuration tree builder.
*
* @return \Symfony\Component\Config\Definition\Builder\TreeBuilder The tree builder
*/
public function getConfigTreeBuilder()
{
$treeBuilder = new TreeBuilder();
$rootNode = $treeBuilder->root("database");
$rootNode
->children()
->arrayNode("connection")
->children()
->scalarNode("driver")
->defaultValue("mysql")
->validate()
->ifNotInArray(array("mysql", "sqlite", "pgsql"))
->thenInvalid("Invalid driver database %s")
->end()
->end()
->scalarNode("user")
->defaultValue("root")
->end()
->scalarNode("password")
->defaultValue("")
->end()
->scalarNode("dsn")
->cannotBeEmpty()
->end()
->end()
->end()
->end()
;
return $treeBuilder;
}
}

View File

@@ -0,0 +1,78 @@
<?php
/*************************************************************************************/
/* */
/* Thelia */
/* */
/* Copyright (c) OpenStudio */
/* email : info@thelia.net */
/* web : http://www.thelia.net */
/* */
/* This program is free software; you can redistribute it and/or modify */
/* it under the terms of the GNU General Public License as published by */
/* the Free Software Foundation; either version 3 of the License */
/* */
/* This program is distributed in the hope that it will be useful, */
/* but WITHOUT ANY WARRANTY; without even the implied warranty of */
/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */
/* GNU General Public License for more details. */
/* */
/* You should have received a copy of the GNU General Public License */
/* along with this program. If not, see <http://www.gnu.org/licenses/>. */
/* */
/*************************************************************************************/
namespace Thelia\Config;
use Symfony\Component\Config\Definition\Processor;
use Symfony\Component\Config\Definition\ConfigurationInterface;
class DefinePropel {
private $processorConfig;
public function __construct(ConfigurationInterface $configuration, array $propelConf)
{
$processor = new Processor();
$this->processorConfig = $processor->processConfiguration($configuration, $propelConf);
}
public function getConfig()
{
$connection = $this->processorConfig["connection"];
return $conf = array(
"datasources" =>
array(
"thelia" =>
array(
"adapter" => $connection["driver"],
"connection" =>
array(
"dsn" => $connection["dsn"],
"user" => $connection["user"],
"password" => $connection["password"]
)
)
)
);
}
/*
* $conf = array (
'datasources' =>
array (
'thelia' =>
array (
'adapter' => THELIA_DB_ADAPTER,
'connection' =>
array (
'dsn' => THELIA_DB_DSN,
'user' => THELIA_DB_USER,
'password' => THELIA_DB_PASSWORD,
),
),
),
'generator_version' => '1.6.8',
);
return $conf;
*/
}

View File

@@ -34,10 +34,14 @@ namespace Thelia\Core;
use Symfony\Component\HttpKernel\Kernel;
use Symfony\Component\Config\Loader\LoaderInterface;
use Symfony\Component\Config\Definition\Processor;
use Symfony\Component\Yaml\Yaml;
use Thelia\Core\Bundle;
use Thelia\Log\Tlog;
use Thelia\Config\DatabaseConfiguration;
use Thelia\Config\DefinePropel;
use Propel;
use PropelConfiguration;
@@ -47,27 +51,38 @@ class Thelia extends Kernel
public function init()
{
parent::init();
parent::init();
if($this->debug) {
ini_set('display_errors', 1);
}
$this->initPropel();
}
protected function initPropel()
{
if (file_exists(THELIA_ROOT . '/local/config/config_db.php') === false) {
if (file_exists(THELIA_ROOT . '/local/config/database.yml') === false) {
return ;
}
Propel::init(THELIA_CONF_DIR . "/config_thelia.php");
if ($this->isDebug()) {
Propel::setLogger(Tlog::getInstance());
$config = Propel::getConfiguration(PropelConfiguration::TYPE_OBJECT);
$config->setParameter('debugpdo.logging.details.method.enabled', true);
$config->setParameter('debugpdo.logging.details.time.enabled', true);
$config->setParameter('debugpdo.logging.details.mem.enabled', true);
$con = Propel::getConnection("thelia");
$con->useDebug(true);
if(! Propel::isInit()) {
$definePropel = new DefinePropel(new DatabaseConfiguration(),
Yaml::parse(THELIA_ROOT . '/local/config/database.yml'));
Propel::setConfiguration($definePropel->getConfig());
if ($this->isDebug()) {
Propel::setLogger(Tlog::getInstance());
$config = Propel::getConfiguration(PropelConfiguration::TYPE_OBJECT);
$config->setParameter('debugpdo.logging.details.method.enabled', true);
$config->setParameter('debugpdo.logging.details.time.enabled', true);
$config->setParameter('debugpdo.logging.details.mem.enabled', true);
$con = Propel::getConnection("thelia");
$con->useDebug(true);
}
Propel::initialize();
}
}