From 2846b28ac28041fe623d5b0b96f6dc0b4b666df0 Mon Sep 17 00:00:00 2001 From: dedensaka Date: Sat, 4 Mar 2017 23:44:32 +0700 Subject: [PATCH] [UPDATE] Support Lumen --- composer.json | 9 +++-- src/Flipbox/OrmManager/Config/orm.php | 5 +-- .../OrmManager/Consoles/ModelAutoConnect.php | 1 - .../OrmManager/Consoles/ModelBothConnect.php | 1 - .../OrmManager/Consoles/ModelConnect.php | 39 +++++++++--------- .../OrmManager/Consoles/ModelDetail.php | 20 +++++----- src/Flipbox/OrmManager/Consoles/ModelList.php | 30 +++++++------- src/Flipbox/OrmManager/DatabaseConnection.php | 21 ++++++++-- ...rovider.php => LaravelServiceProvider.php} | 25 +++++------- .../OrmManager/LumenServiceProvider.php | 40 +++++++++++++++++++ src/Flipbox/OrmManager/ModelManager.php | 34 ++++++++-------- 11 files changed, 140 insertions(+), 85 deletions(-) rename src/Flipbox/OrmManager/{OrmManagerServiceProvider.php => LaravelServiceProvider.php} (60%) create mode 100644 src/Flipbox/OrmManager/LumenServiceProvider.php diff --git a/composer.json b/composer.json index 96422f9..cfa8ba1 100644 --- a/composer.json +++ b/composer.json @@ -5,14 +5,17 @@ "license": "MIT", "authors": [ { - "name": "denmasyarikin", + "name": "Denma Syarikin", "email": "denmasyarikin@gmail.com" } ], "require": { "php": ">=5.6.4", - "laravel/framework": "^5.2", - "doctrine/dbal": "v2.5.5" + "illuminate/config": "^5.2", + "illuminate/console": "^5.2", + "illuminate/database": "^5.2", + "illuminate/support": "^5.2", + "doctrine/dbal": "^2.5" }, "autoload": { "psr-4": { diff --git a/src/Flipbox/OrmManager/Config/orm.php b/src/Flipbox/OrmManager/Config/orm.php index 70224a9..0c187a9 100644 --- a/src/Flipbox/OrmManager/Config/orm.php +++ b/src/Flipbox/OrmManager/Config/orm.php @@ -5,11 +5,10 @@ |-------------------------------------------------------------------------- | Model Base Path |-------------------------------------------------------------------------- - | base path of models should be path of folder of model - | by default is app/ + | base path of models */ - 'basepath' => app_path(), + 'basepath' => 'app', /* |-------------------------------------------------------------------------- diff --git a/src/Flipbox/OrmManager/Consoles/ModelAutoConnect.php b/src/Flipbox/OrmManager/Consoles/ModelAutoConnect.php index eb8d753..5a6c0f3 100644 --- a/src/Flipbox/OrmManager/Consoles/ModelAutoConnect.php +++ b/src/Flipbox/OrmManager/Consoles/ModelAutoConnect.php @@ -4,7 +4,6 @@ use Exception; use Illuminate\Support\Str; -use Illuminate\Config\Repository; use Flipbox\OrmManager\ModelManager; use Illuminate\Database\Eloquent\Model; use Flipbox\OrmManager\DatabaseConnection; diff --git a/src/Flipbox/OrmManager/Consoles/ModelBothConnect.php b/src/Flipbox/OrmManager/Consoles/ModelBothConnect.php index 3086506..ed65701 100644 --- a/src/Flipbox/OrmManager/Consoles/ModelBothConnect.php +++ b/src/Flipbox/OrmManager/Consoles/ModelBothConnect.php @@ -5,7 +5,6 @@ use Exception; use Illuminate\Support\Arr; use Illuminate\Support\Str; -use Illuminate\Config\Repository; use Flipbox\OrmManager\ModelManager; use Illuminate\Database\Eloquent\Model; use Flipbox\OrmManager\Exceptions\ModelNotFound; diff --git a/src/Flipbox/OrmManager/Consoles/ModelConnect.php b/src/Flipbox/OrmManager/Consoles/ModelConnect.php index b3f3fa0..5696225 100644 --- a/src/Flipbox/OrmManager/Consoles/ModelConnect.php +++ b/src/Flipbox/OrmManager/Consoles/ModelConnect.php @@ -5,7 +5,6 @@ use Exception; use Illuminate\Support\Str; use Illuminate\Console\Command; -use Illuminate\Config\Repository; use Flipbox\OrmManager\ModelManager; use Illuminate\Database\Eloquent\Model; use Flipbox\OrmManager\DatabaseConnection; @@ -20,6 +19,13 @@ class ModelConnect extends Command FontColor::paintString insteadof LocalComand; } + /** + * database + * + * @var DatabaseConnection + */ + protected $db; + /** * model manager * @@ -27,13 +33,6 @@ class ModelConnect extends Command */ protected $manager; - /** - * database - * - * @var ModelManager - */ - protected $db; - /** * The console command name. * @@ -50,17 +49,19 @@ class ModelConnect extends Command protected $description = 'Generate connections method of class model'; /** - * Create a new ModelConnect instance. - * - * @param Repository $config - * @return void - */ - public function __construct(Repository $config) - { - parent::__construct(); - $this->db = new DatabaseConnection; - $this->manager = new ModelManager($config['orm'], $this->db); - } + * Create a new queue listen command. + * + * @param DatabaseConnection $db + * @param ModelManager $manager + * @return void + */ + public function __construct(DatabaseConnection $db, ModelManager $manager) + { + parent::__construct(); + + $this->db = $db; + $this->manager = $manager; + } /** * Execute the console command. diff --git a/src/Flipbox/OrmManager/Consoles/ModelDetail.php b/src/Flipbox/OrmManager/Consoles/ModelDetail.php index 6f0788d..8416baa 100644 --- a/src/Flipbox/OrmManager/Consoles/ModelDetail.php +++ b/src/Flipbox/OrmManager/Consoles/ModelDetail.php @@ -2,9 +2,7 @@ namespace Flipbox\OrmManager\Consoles; -use ReflectionClass; use Illuminate\Console\Command; -use Illuminate\Config\Repository; use Flipbox\OrmManager\ModelManager; use Illuminate\Database\Eloquent\Model; use Flipbox\OrmManager\DatabaseConnection; @@ -17,18 +15,18 @@ class ModelDetail extends Command } /** - * model manager + * database * - * @var ModelManager + * @var DatabaseConnection */ - protected $manager; + protected $db; /** - * database + * model manager * * @var ModelManager */ - protected $db; + protected $manager; /** * The console command name. @@ -47,14 +45,16 @@ class ModelDetail extends Command /** * Create a new queue listen command. * + * @param DatabaseConnection $db + * @param ModelManager $manager * @return void */ - public function __construct(Repository $config) + public function __construct(DatabaseConnection $db, ModelManager $manager) { parent::__construct(); - $this->db = new DatabaseConnection; - $this->manager = new ModelManager($config->get('orm'), $this->db); + $this->db = $db; + $this->manager = $manager; } /** diff --git a/src/Flipbox/OrmManager/Consoles/ModelList.php b/src/Flipbox/OrmManager/Consoles/ModelList.php index 014eea7..0c5f746 100644 --- a/src/Flipbox/OrmManager/Consoles/ModelList.php +++ b/src/Flipbox/OrmManager/Consoles/ModelList.php @@ -4,7 +4,6 @@ use Exception; use Illuminate\Console\Command; -use Illuminate\Config\Repository; use Flipbox\OrmManager\ModelManager; use Flipbox\OrmManager\DatabaseConnection; use Flipbox\OrmManager\Consoles\Command as LocalComand; @@ -12,7 +11,7 @@ class ModelList extends Command { use LocalComand, FontColor { - FontColor::paintstring insteadof LocalComand; + FontColor::paintString insteadof LocalComand; } /** @@ -46,26 +45,29 @@ class ModelList extends Command /** * Create a new queue listen command. * + * @param DatabaseConnection $db + * @param ModelManager $manager * @return void */ - public function __construct(Repository $config) + public function __construct(DatabaseConnection $db, ModelManager $manager) { parent::__construct(); - $this->db = new DatabaseConnection; - $this->manager = new ModelManager($config->get('orm'), $this->db); + $this->db = $db; + $this->manager = $manager; } /** - * Execute the console command. - * - * @return mixed - */ - public function handle() - { - try { - $models = $this->manager->toArray(); - } catch (Exception $e) { + * Execute the console command. + * + * @return mixed + */ + public function handle() + { + try { + $models = $this->manager->toArray(); + } catch (Exception $e) { + dd($e); return $this->error($e->getMessage()); } diff --git a/src/Flipbox/OrmManager/DatabaseConnection.php b/src/Flipbox/OrmManager/DatabaseConnection.php index 70c21a4..40c60d0 100644 --- a/src/Flipbox/OrmManager/DatabaseConnection.php +++ b/src/Flipbox/OrmManager/DatabaseConnection.php @@ -2,14 +2,22 @@ namespace Flipbox\OrmManager; -use DB; use Exception; use Doctrine\DBAL\Schema\Table; use Doctrine\DBAL\Schema\Column; use Illuminate\Support\Collection; +use Doctrine\DBAL\Driver\PDOException; +use Illuminate\Database\DatabaseManager; class DatabaseConnection { + /** + * database manager + * + * @var DatabaseManager + */ + protected $db; + /** * check connection * @@ -36,8 +44,10 @@ class DatabaseConnection * * @return void */ - public function __construct() + public function __construct(DatabaseManager $db) { + $this->db = $db; + $this->initDoctrine(); $this->scanDatabase(); } @@ -51,11 +61,14 @@ public function __construct() protected function initDoctrine() { try { - $this->doctrine = DB::getDoctrineSchemaManager(); + $this->doctrine = $this->db->getDoctrineSchemaManager(); + $platform = $this->doctrine->getDatabasePlatform(); $platform->registerDoctrineTypeMapping('enum', 'string'); + $this->connection = true; - } catch (Exception $e) { + } catch (PDOException $e) { + echo "{$e->getMessage()}\n"; $this->connection = false; } } diff --git a/src/Flipbox/OrmManager/OrmManagerServiceProvider.php b/src/Flipbox/OrmManager/LaravelServiceProvider.php similarity index 60% rename from src/Flipbox/OrmManager/OrmManagerServiceProvider.php rename to src/Flipbox/OrmManager/LaravelServiceProvider.php index d0254f8..cffc800 100644 --- a/src/Flipbox/OrmManager/OrmManagerServiceProvider.php +++ b/src/Flipbox/OrmManager/LaravelServiceProvider.php @@ -2,10 +2,9 @@ namespace Flipbox\OrmManager; -use Flipbox\OrmManager\Console; use Illuminate\Support\ServiceProvider; -class OrmManagerServiceProvider extends ServiceProvider +class LaravelServiceProvider extends ServiceProvider { /** * Perform post-registration booting of services. @@ -24,22 +23,20 @@ public function register() { $this->mergeConfigFrom(__DIR__.'/Config/orm.php', 'orm'); - $this->registerCommand(); - } + $this->app->singleton('orm.database', function ($app) { + return new DatabaseConnection($app['db']); + }); - /** - * register commands - * - * @return void - */ - protected function registerCommand() - { - $this->commands([ + $this->app->singleton('orm.manager', function ($app) { + return new ModelManager($app['config'], $app['orm.database']); + }); + + $this->commands([ Consoles\ModelList::class, - Consoles\ModelDetail::class, + Consoles\ModelDetail::class, Consoles\ModelConnect::class, Consoles\ModelBothConnect::class, Consoles\ModelAutoConnect::class, - ]); + ]); } } diff --git a/src/Flipbox/OrmManager/LumenServiceProvider.php b/src/Flipbox/OrmManager/LumenServiceProvider.php new file mode 100644 index 0000000..d1d5914 --- /dev/null +++ b/src/Flipbox/OrmManager/LumenServiceProvider.php @@ -0,0 +1,40 @@ +mergeConfigFrom(__DIR__.'/Config/orm.php', 'orm'); + + $this->app->singleton('orm.database', function ($app) { + return new DatabaseConnection($app['db']); + }); + + $this->app->singleton('orm.manager', function ($app) { + return new ModelManager($app['config'], $app['orm.database']); + }); + + $this->commands([ + Consoles\ModelList::class, + Consoles\ModelDetail::class, + Consoles\ModelConnect::class, + Consoles\ModelBothConnect::class, + Consoles\ModelAutoConnect::class, + ]); + } +} diff --git a/src/Flipbox/OrmManager/ModelManager.php b/src/Flipbox/OrmManager/ModelManager.php index 266552f..a2d11e6 100644 --- a/src/Flipbox/OrmManager/ModelManager.php +++ b/src/Flipbox/OrmManager/ModelManager.php @@ -5,6 +5,7 @@ use Exception; use ReflectionClass; use ReflectionMethod; +use Illuminate\Config\Repository; use Illuminate\Support\Collection; use Illuminate\Database\Eloquent\Model; use Illuminate\Contracts\Support\Arrayable; @@ -24,7 +25,7 @@ class ModelManager implements Arrayable /** * config * - * @var array + * @var Repository */ protected $config; @@ -33,7 +34,7 @@ class ModelManager implements Arrayable * * @var array */ - protected $models; + protected $models = []; /** * database @@ -67,15 +68,16 @@ class ModelManager implements Arrayable /** * Create a new ModelManager instance. * - * @param array $config + * @param Repository $config + * @param DatabaseConnection $config * @return void */ - public function __construct(array $config, DatabaseConnection $db) + public function __construct(Repository $config, DatabaseConnection $db) { $this->db = $db; $this->config = $config; - $this->path = $this->config['basepath']; - + $this->path = base_path($this->config->get('orm.basepath', 'app')); + $this->scandModels(); } @@ -89,18 +91,18 @@ protected function scandModels($path=null) { try { $dirs = scandir($path = $path ?: $this->path); - } catch (Exception $e) { - // - } - foreach($this->filterDirectory($dirs) as $file) { - if (is_dir($filepath = $path.'/'.$file)) { - $this->scandModels($filepath); - } + foreach($this->filterDirectory($dirs) as $file) { + if (is_dir($filepath = $path.'/'.$file)) { + $this->scandModels($filepath); + } - if ($model = $this->makeModelFromFile($filepath)) { - $this->models[$this->getClassName($model)] = $model; + if ($model = $this->makeModelFromFile($filepath)) { + $this->models[$this->getClassName($model)] = $model; + } } + } catch (Exception $e) { + // } } @@ -114,7 +116,7 @@ protected function filterDirectory(array $dirs) { foreach ($dirs as $key => $dir) { if (in_array($dir, ['.', '..']) - OR in_array($dir, $this->config['exclude_dir'])) { + OR in_array($dir, $this->config->get('orm.exclude_dir', []))) { unset($dirs[$key]); }