refactoring for dependency injection and testability.
This commit is contained in:
18
laravel/database/connector/callback.php
Normal file
18
laravel/database/connector/callback.php
Normal file
@@ -0,0 +1,18 @@
|
||||
<?php namespace Laravel\DB\Connector;
|
||||
|
||||
use Laravel\DB\Connector;
|
||||
|
||||
class Callback extends Connector {
|
||||
|
||||
/**
|
||||
* Establish a PDO database connection.
|
||||
*
|
||||
* @param array $config
|
||||
* @return PDO
|
||||
*/
|
||||
public function connect($config)
|
||||
{
|
||||
return call_user_func($config['connector']);
|
||||
}
|
||||
|
||||
}
|
||||
30
laravel/database/connector/factory.php
Normal file
30
laravel/database/connector/factory.php
Normal file
@@ -0,0 +1,30 @@
|
||||
<?php namespace Laravel\DB\Connector;
|
||||
|
||||
class Factory {
|
||||
|
||||
/**
|
||||
* Create a new database connector instance for a given driver.
|
||||
*
|
||||
* @param array $config
|
||||
* @return Connector
|
||||
*/
|
||||
public static function make($config)
|
||||
{
|
||||
if (isset($config['connector'])) return new Callback;
|
||||
|
||||
switch ($config['driver'])
|
||||
{
|
||||
case 'sqlite':
|
||||
return new SQLite;
|
||||
|
||||
case 'mysql':
|
||||
return new MySQL;
|
||||
|
||||
case 'pgsql':
|
||||
return new Postgres;
|
||||
}
|
||||
|
||||
throw new \Exception("Database configuration is invalid. Please verify your configuration.");
|
||||
}
|
||||
|
||||
}
|
||||
37
laravel/database/connector/mysql.php
Normal file
37
laravel/database/connector/mysql.php
Normal file
@@ -0,0 +1,37 @@
|
||||
<?php namespace Laravel\DB\Connector;
|
||||
|
||||
use Laravel\DB\Connector;
|
||||
|
||||
class MySQL extends Connector {
|
||||
|
||||
/**
|
||||
* Establish a PDO database connection.
|
||||
*
|
||||
* @param array $config
|
||||
* @return PDO
|
||||
*/
|
||||
public function connect($config)
|
||||
{
|
||||
$dsn = $config['driver'].':host='.$config['host'].';dbname='.$config['database'];
|
||||
|
||||
if (isset($config['port']))
|
||||
{
|
||||
$dsn .= ';port='.$config['port'];
|
||||
}
|
||||
|
||||
if (isset($config['socket']))
|
||||
{
|
||||
$dsn .= ';unix_socket='.$config['socket'];
|
||||
}
|
||||
|
||||
$connection = new \PDO($dsn, $config['username'], $config['password'], $this->options);
|
||||
|
||||
if (isset($config['charset']))
|
||||
{
|
||||
$connection->prepare("SET NAMES '".$config['charset']."'")->execute();
|
||||
}
|
||||
|
||||
return $connection;
|
||||
}
|
||||
|
||||
}
|
||||
32
laravel/database/connector/postgres.php
Normal file
32
laravel/database/connector/postgres.php
Normal file
@@ -0,0 +1,32 @@
|
||||
<?php namespace Laravel\DB\Connector;
|
||||
|
||||
use Laravel\DB\Connector;
|
||||
|
||||
class Postgres extends Connector {
|
||||
|
||||
/**
|
||||
* Establish a PDO database connection.
|
||||
*
|
||||
* @param array $config
|
||||
* @return PDO
|
||||
*/
|
||||
public function connect($config)
|
||||
{
|
||||
$dsn = $config['driver'].':host='.$config['host'].';dbname='.$config['database'];
|
||||
|
||||
if (isset($config['port']))
|
||||
{
|
||||
$dsn .= ';port='.$config['port'];
|
||||
}
|
||||
|
||||
$connection = new \PDO($dsn, $config['username'], $config['password'], $this->options);
|
||||
|
||||
if (isset($config['charset']))
|
||||
{
|
||||
$connection->prepare("SET NAMES '".$config['charset']."'")->execute();
|
||||
}
|
||||
|
||||
return $connection;
|
||||
}
|
||||
|
||||
}
|
||||
31
laravel/database/connector/sqlite.php
Normal file
31
laravel/database/connector/sqlite.php
Normal file
@@ -0,0 +1,31 @@
|
||||
<?php namespace Laravel\DB\Connector;
|
||||
|
||||
use Laravel\DB\Connector;
|
||||
|
||||
class SQLite extends Connector {
|
||||
|
||||
/**
|
||||
* Establish a PDO database connection.
|
||||
*
|
||||
* @param array $config
|
||||
* @return PDO
|
||||
*/
|
||||
public function connect($config)
|
||||
{
|
||||
if ($config['database'] == ':memory:')
|
||||
{
|
||||
return new \PDO('sqlite::memory:', null, null, $this->options);
|
||||
}
|
||||
elseif (file_exists($path = DATABASE_PATH.$config['database'].'.sqlite'))
|
||||
{
|
||||
return new \PDO('sqlite:'.$path, null, null, $this->options);
|
||||
}
|
||||
elseif (file_exists($config['database']))
|
||||
{
|
||||
return new \PDO('sqlite:'.$config['database'], null, null, $this->options);
|
||||
}
|
||||
|
||||
throw new \Exception("SQLite database [".$config['database']."] could not be found.");
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user