From 20b95abaa515283e7fcc2b333af84bb7ac7d38e4 Mon Sep 17 00:00:00 2001 From: Tan Nguyen Date: Sun, 26 Feb 2023 22:36:26 +0700 Subject: [PATCH 1/2] create config repository --- src/Exceptions/LaravelGeneratorException.php | 18 ++++++ src/Repositories/ConfigRepository.php | 65 ++++++++++++++++++++ 2 files changed, 83 insertions(+) create mode 100644 src/Exceptions/LaravelGeneratorException.php create mode 100644 src/Repositories/ConfigRepository.php diff --git a/src/Exceptions/LaravelGeneratorException.php b/src/Exceptions/LaravelGeneratorException.php new file mode 100644 index 0000000..5184dcc --- /dev/null +++ b/src/Exceptions/LaravelGeneratorException.php @@ -0,0 +1,18 @@ +mergeConfig($defaults, $generators[$generatorName]); + } + + /** + * @param array $defaults + * @param array $generatorName + * + * @return array + */ + private function mergeConfig(array $defaults, array $generatorName): array + { + $merged = $defaults; + + foreach ($generatorName as $key => &$value) { + if (isset($defaults[$key]) + && $this->isAssociativeArray($defaults[$key]) + && $this->isAssociativeArray($value) + ) { + $merged[$key] = $this->mergeConfig($defaults[$key], $value); + continue; + } + + $merged[$key] = $value; + } + + return $merged; + } + + /** + * @param mixed $key + * + * @return bool + */ + private function isAssociativeArray(mixed $key): bool + { + return is_array($key) && count(array_filter(array_keys($key), 'is_string')) > 0; + } +} \ No newline at end of file From 2264beda024cee47813c1f63b0227dcc417f42db Mon Sep 17 00:00:00 2001 From: Tan Nguyen Date: Sun, 26 Feb 2023 22:56:28 +0700 Subject: [PATCH 2/2] create env to config route --- composer.json | 8 ++++++-- config/laravel-generator.php | 14 +++++++++++++- routes/web.php | 9 +++++++-- src/Repositories/ConfigRepository.php | 6 ++++++ 4 files changed, 32 insertions(+), 5 deletions(-) diff --git a/composer.json b/composer.json index d1232f0..13a872f 100755 --- a/composer.json +++ b/composer.json @@ -11,7 +11,12 @@ "migration", "model", "controller", - "repository" + "repository", + "request", + "resource", + "factory", + "seeder", + "action" ], "autoload": { "psr-4": { @@ -27,7 +32,6 @@ } ], "minimum-stability": "dev", - "prefer-stable": true, "require": { "php": "^8.0" }, diff --git a/config/laravel-generator.php b/config/laravel-generator.php index 035fcd5..4336bd8 100644 --- a/config/laravel-generator.php +++ b/config/laravel-generator.php @@ -1,5 +1,17 @@ 'default', + 'generators' => [ + 'default' => [ + 'path' => 'app', + + 'routes' => [ + /* Route for laravel generator tool */ + 'tool' => env('TH_LARAVEL_GENERATOR_URL', 'laravel-generator'), + ], + ], + ], + + 'defaults' => [], ]; \ No newline at end of file diff --git a/routes/web.php b/routes/web.php index b9dce78..39597ec 100644 --- a/routes/web.php +++ b/routes/web.php @@ -1,10 +1,15 @@ group(function () { - Route::prefix('laravel-generator')->group(function () { +Route::namespace('TanHongIT\LaravelGenerator\Http\Controllers')->group(function (Router $router) { + $configRepository = resolve(ConfigRepository::class); + $generatorConfig = $configRepository->generatorConfig(); + + Route::prefix($generatorConfig['routes']['tool'])->group(function (Router $router) { Route::get('/', [LaravelGeneratorController::class, 'index'])->name('laravel_generator.index'); }); }); \ No newline at end of file diff --git a/src/Repositories/ConfigRepository.php b/src/Repositories/ConfigRepository.php index bc72095..8d373bf 100644 --- a/src/Repositories/ConfigRepository.php +++ b/src/Repositories/ConfigRepository.php @@ -7,6 +7,8 @@ class ConfigRepository { /** + * Get config + * * @param string|null $generatorName * * @return array @@ -29,6 +31,8 @@ public function generatorConfig(?string $generatorName = null): array } /** + * Merge config + * * @param array $defaults * @param array $generatorName * @@ -54,6 +58,8 @@ private function mergeConfig(array $defaults, array $generatorName): array } /** + * Check is associative key array + * * @param mixed $key * * @return bool