Namespaces

  • Latte
    • Loaders
    • Macros
    • Runtime
  • Nette
    • Application
      • Responses
      • Routers
      • UI
    • Bridges
      • ApplicationLatte
      • ApplicationTracy
      • CacheLatte
      • DatabaseDI
      • DatabaseTracy
      • DITracy
      • FormsLatte
      • Framework
      • HttpTracy
      • SecurityTracy
    • Caching
      • Storages
    • ComponentModel
    • Database
      • Drivers
      • Reflection
      • Table
    • DI
      • Config
        • Adapters
      • Extensions
    • Diagnostics
    • Forms
      • Controls
      • Rendering
    • Http
    • Iterators
    • Latte
    • Loaders
    • Localization
    • Mail
    • Neon
    • PhpGenerator
    • Reflection
    • Security
    • Templating
    • Utils
  • NetteModule
  • none
  • Tracy

Classes

  • DatabaseExtension
  • Overview
  • Namespace
  • Class
  • Tree
  • Deprecated
  1: <?php
  2: 
  3: /**
  4:  * This file is part of the Nette Framework (http://nette.org)
  5:  * Copyright (c) 2004 David Grudl (http://davidgrudl.com)
  6:  */
  7: 
  8: namespace Nette\Bridges\DatabaseDI;
  9: 
 10: use Nette,
 11:     Nette\DI\ContainerBuilder;
 12: 
 13: 
 14: /**
 15:  * Nette Framework Database services.
 16:  *
 17:  * @author     David Grudl
 18:  * @author     Jan Skrasek
 19:  */
 20: class DatabaseExtension extends Nette\DI\CompilerExtension
 21: {
 22: 
 23:     public $databaseDefaults = array(
 24:         'dsn' => NULL,
 25:         'user' => NULL,
 26:         'password' => NULL,
 27:         'options' => NULL,
 28:         'debugger' => TRUE,
 29:         'explain' => TRUE,
 30:         'reflection' => 'Nette\Database\Reflection\DiscoveredReflection',
 31:         'autowired' => NULL,
 32:     );
 33: 
 34: 
 35:     public function loadConfiguration()
 36:     {
 37:         $container = $this->getContainerBuilder();
 38: 
 39:         $config = $this->compiler->getConfig();
 40:         if (isset($config['nette']['database'])) { // back compatibility
 41:             $config = $config['nette']['database'];
 42:             $prefix = 'nette.';
 43:         } else {
 44:             $config = isset($config[$this->name]) ? $config[$this->name] : array();
 45:             $prefix = '';
 46:         }
 47: 
 48:         if (isset($config['dsn'])) {
 49:             $config = array('default' => $config);
 50:         }
 51: 
 52:         $autowired = TRUE;
 53:         foreach ((array) $config as $name => $info) {
 54:             if (!is_array($info)) {
 55:                 continue;
 56:             }
 57:             $this->validate($info, $this->databaseDefaults, 'database');
 58: 
 59:             $info += array('autowired' => $autowired) + $this->databaseDefaults;
 60:             $autowired = FALSE;
 61: 
 62:             foreach ((array) $info['options'] as $key => $value) {
 63:                 if (preg_match('#^PDO::\w+\z#', $key)) {
 64:                     unset($info['options'][$key]);
 65:                     $info['options'][constant($key)] = $value;
 66:                 }
 67:             }
 68: 
 69:             $connection = $container->addDefinition($prefix . $this->prefix($name))
 70:                 ->setClass('Nette\Database\Connection', array($info['dsn'], $info['user'], $info['password'], $info['options']))
 71:                 ->setAutowired($info['autowired'])
 72:                 ->addSetup('Tracy\Debugger::getBlueScreen()->addPanel(?)', array(
 73:                     'Nette\Bridges\DatabaseTracy\ConnectionPanel::renderException'
 74:                 ));
 75: 
 76:             if (!$info['reflection']) {
 77:                 $reflection = NULL;
 78:             } elseif (is_string($info['reflection'])) {
 79:                 $reflection = new Nette\DI\Statement(preg_match('#^[a-z]+\z#', $info['reflection'])
 80:                     ? 'Nette\Database\Reflection\\' . ucfirst($info['reflection']) . 'Reflection'
 81:                     : $info['reflection'], strtolower($info['reflection']) === 'discovered' ? array($connection) : array());
 82:             } else {
 83:                 $tmp = Nette\DI\Compiler::filterArguments(array($info['reflection']));
 84:                 $reflection = reset($tmp);
 85:             }
 86: 
 87:             $container->addDefinition($prefix . $this->prefix("$name.context"))
 88:                 ->setClass('Nette\Database\Context', array($connection, $reflection))
 89:                 ->setAutowired($info['autowired']);
 90: 
 91:             if ($container->parameters['debugMode'] && $info['debugger']) {
 92:                 $connection->addSetup('Nette\Database\Helpers::createDebugPanel', array($connection, !empty($info['explain']), $name));
 93:             }
 94:         }
 95:     }
 96: 
 97: 
 98:     private function validate(array $config, array $expected, $name)
 99:     {
100:         if ($extra = array_diff_key($config, $expected)) {
101:             $extra = implode(", $name.", array_keys($extra));
102:             throw new Nette\InvalidStateException("Unknown option $name.$extra.");
103:         }
104:     }
105: 
106: }
107: 
Nette 2.2.2 API API documentation generated by ApiGen 2.8.0