123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150 |
- <?php
- class sfDatabaseConfigHandler extends sfYamlConfigHandler
- {
-
- public function execute($configFiles)
- {
- list($includes, $data) = $this->parse($configFiles);
- foreach ($includes as $i => $include)
- {
- $includes[$i] = sprintf("require_once('%s');", $include);
- }
- foreach ($data as $name => $database)
- {
- $data[$name] = sprintf("\n'%s' => new %s(%s),", $name, $database[0], var_export($database[1], true));
- }
-
- return sprintf("<?php\n".
- "// auto-generated by sfDatabaseConfigHandler\n".
- "// date: %s\n%s\nreturn array(%s);\n",
- date('Y/m/d H:i:s'), implode("\n", $includes), implode("\n", $data));
- }
- public function evaluate($configFiles)
- {
- list($includes, $data) = $this->parse($configFiles);
- foreach ($includes as $i => $include)
- {
- require_once($include);
- }
- $databases = array();
- foreach ($data as $name => $database)
- {
- $databases[$name] = new $database[0]($database[1]);
- }
- return $databases;
- }
- protected function parse($configFiles)
- {
-
- $config = self::getConfiguration($configFiles);
-
- $data = array();
- $databases = array();
- $includes = array();
-
- foreach ($config as $name => $dbConfig)
- {
-
- if (in_array($name, $databases))
- {
-
- throw new sfParseException(sprintf('Configuration file "%s" specifies previously registered category "%s".', $configFiles[0], $name));
- }
-
- $databases[] = $name;
-
- if (!isset($dbConfig['class']))
- {
-
- throw new sfParseException(sprintf('Configuration file "%s" specifies category "%s" with missing class key.', $configFiles[0], $name));
- }
- if (isset($dbConfig['file']))
- {
-
- if (!is_readable($dbConfig['file']))
- {
-
- throw new sfParseException(sprintf('Configuration file "%s" specifies class "%s" with nonexistent or unreadable file "%s".', $configFiles[0], $dbConfig['class'], $dbConfig['file']));
- }
-
- $includes[] = $dbConfig['file'];
- }
-
- $parameters = array();
- if (isset($dbConfig['param']))
- {
- $parameters = $dbConfig['param'];
- }
- $parameters['name'] = $name;
-
- $data[$name] = array($dbConfig['class'], $parameters);
- }
- return array($includes, $data);
- }
-
- static public function getConfiguration(array $configFiles)
- {
- $config = self::replaceConstants(self::flattenConfigurationWithEnvironment(self::parseYamls($configFiles)));
- foreach ($config as $name => $dbConfig)
- {
- if (isset($dbConfig['file']))
- {
- $config[$name]['file'] = self::replacePath($dbConfig['file']);
- }
- }
- return $config;
- }
- }
|