contaoblackforest/contao-doctrine-dbal

Contao开源内容管理系统(CMS)的Doctrine DBAL桥接器

1.2.0 2018-09-26 22:28 UTC

This package is auto-updated.

Last update: 2024-08-29 03:47:23 UTC


README

此扩展为Doctrine DBALContao开源内容管理系统(CMS)提供支持。它仅提供一个服务$container['doctrine.connection.default'],用于将默认数据库与Doctrine DBAL连接。要在Contao数据库框架中使用Doctrine连接,请使用bit3/contao-doctrine-dbal-driver

使用doctrine连接

class MyClass
{
	public function myFunc()
	{
		global $container;
		/** @var \Doctrine\DBAL\Connection $connection */
		$connection = $container['doctrine.connection.default'];

		$connection->query('...');
	}
}

Contao钩子

$GLOBALS['TL_HOOKS']['prepareDoctrineConnection'] = function(&$connectionParameters, &$config) { ... } 在连接建立之前调用。

$GLOBALS['TL_HOOKS']['doctrineConnect'] = function(&$connection) { ... } 在连接建立后调用。

定义自定义连接

我们更喜欢使用依赖注入容器:编写system/config/services.phpsystem/modules/.../config/services.php

$container['doctrine.connection.default'] = $container->share(
	function ($container) {
		$config = new \Doctrine\DBAL\Configuration();

		$connectionParameters = array(
			'dbname'   => $GLOBALS['TL_CONFIG']['dbDatabase'],
			'user'     => $GLOBALS['TL_CONFIG']['dbUser'],
			'password' => $GLOBALS['TL_CONFIG']['dbPass'],
			'host'     => $GLOBALS['TL_CONFIG']['dbHost'],
			'port'     => $GLOBALS['TL_CONFIG']['dbPort'],
		);

		switch (strtolower($GLOBALS['TL_CONFIG']['dbDriver'])) {
			// reuse connection
			case 'doctrinemysql':
				return \Database::getInstance()->getConnection();

			case 'mysql':
			case 'mysqli':
				$connectionParameters['driver']  = 'pdo_mysql';
				$connectionParameters['charset'] = $GLOBALS['TL_CONFIG']['dbCharset'];
				if (!empty($GLOBALS['TL_CONFIG']['dbSocket'])) {
					$connectionParameters['unix_socket'] = $GLOBALS['TL_CONFIG']['dbSocket'];
				}
				break;
			default:
				throw new RuntimeException('Database driver ' . $GLOBALS['TL_CONFIG']['dbDriver'] . ' not known by doctrine.');
		}

		if (!empty($GLOBALS['TL_CONFIG']['dbPdoDriverOptions'])) {
			$connectionParameters['driverOptions'] = deserialize($GLOBALS['TL_CONFIG']['dbPdoDriverOptions'], true);
		}

		return \Doctrine\DBAL\DriverManager::getConnection($connectionParameters, $config);
	}
);

配置缓存

缓存实现定义在$container['doctrine.cache.impl.default'](默认:auto)。默认情况下,缓存实现由系统自动检测,按以下顺序尝试:APC、Xcache、memcache、Redis、Array。

可能的设置有

缓存存活时间定义在$container['doctrine.cache.ttl.default'](默认:0)。

缓存键定义在$container['doctrine.cache.key.default'](默认:contao_default_connection)。

要禁用缓存,设置$container['doctrine.cache.profile.default'] = null;