Skip to content
This repository was archived by the owner on Jan 15, 2024. It is now read-only.

Commit 6ed0a1c

Browse files
authored
Merge pull request #3 from tanhongit/develop
Develop
2 parents 11f1679 + 14ea76b commit 6ed0a1c

File tree

5 files changed

+115
-5
lines changed

5 files changed

+115
-5
lines changed

composer.json

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,12 @@
1111
"migration",
1212
"model",
1313
"controller",
14-
"repository"
14+
"repository",
15+
"request",
16+
"resource",
17+
"factory",
18+
"seeder",
19+
"action"
1520
],
1621
"autoload": {
1722
"psr-4": {
@@ -27,7 +32,6 @@
2732
}
2833
],
2934
"minimum-stability": "dev",
30-
"prefer-stable": true,
3135
"require": {
3236
"php": "^8.0"
3337
},

config/laravel-generator.php

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,17 @@
11
<?php
22

33
return [
4-
//
4+
'default' => 'default',
5+
'generators' => [
6+
'default' => [
7+
'path' => 'app',
8+
9+
'routes' => [
10+
/* Route for laravel generator tool */
11+
'tool' => env('TH_LARAVEL_GENERATOR_URL', 'laravel-generator'),
12+
],
13+
],
14+
],
15+
16+
'defaults' => [],
517
];

routes/web.php

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,15 @@
11
<?php
22

33
use Illuminate\Support\Facades\Route;
4+
use Illuminate\Routing\Router;
45
use TanHongIT\LaravelGenerator\Http\Controllers\LaravelGeneratorController;
6+
use TanHongIT\LaravelGenerator\Repositories\ConfigRepository;
57

6-
Route::namespace('TanHongIT\LaravelGenerator\Http\Controllers')->group(function () {
7-
Route::prefix('laravel-generator')->group(function () {
8+
Route::namespace('TanHongIT\LaravelGenerator\Http\Controllers')->group(function (Router $router) {
9+
$configRepository = resolve(ConfigRepository::class);
10+
$generatorConfig = $configRepository->generatorConfig();
11+
12+
Route::prefix($generatorConfig['routes']['tool'])->group(function (Router $router) {
813
Route::get('/', [LaravelGeneratorController::class, 'index'])->name('laravel_generator.index');
914
});
1015
});
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
<?php
2+
3+
namespace TanHongIT\LaravelGenerator\Exceptions;
4+
5+
use Exception;
6+
7+
class LaravelGeneratorException extends Exception
8+
{
9+
/**
10+
* @param string $message
11+
* @param int $code
12+
* @param Exception|null $previous
13+
*/
14+
public function __construct(string $message = '', int $code = 0, Exception $previous = null)
15+
{
16+
parent::__construct($message, $code, $previous);
17+
}
18+
}
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
<?php
2+
3+
namespace TanHongIT\LaravelGenerator\Repositories;
4+
5+
use TanHongIT\LaravelGenerator\Exceptions\LaravelGeneratorException;
6+
7+
class ConfigRepository
8+
{
9+
/**
10+
* Get config
11+
*
12+
* @param string|null $generatorName
13+
*
14+
* @return array
15+
* @throws LaravelGeneratorException
16+
*/
17+
public function generatorConfig(?string $generatorName = null): array
18+
{
19+
if ($generatorName === null) {
20+
$generatorName = config('laravel-generator.default');
21+
}
22+
23+
$defaults = config('laravel-generator.defaults', []);
24+
$generators = config('laravel-generator.generators', []);
25+
26+
if (! isset($generators[$generatorName])) {
27+
throw new LaravelGeneratorException('Generator name not found');
28+
}
29+
30+
return $this->mergeConfig($defaults, $generators[$generatorName]);
31+
}
32+
33+
/**
34+
* Merge config
35+
*
36+
* @param array $defaults
37+
* @param array $generatorName
38+
*
39+
* @return array
40+
*/
41+
private function mergeConfig(array $defaults, array $generatorName): array
42+
{
43+
$merged = $defaults;
44+
45+
foreach ($generatorName as $key => &$value) {
46+
if (isset($defaults[$key])
47+
&& $this->isAssociativeArray($defaults[$key])
48+
&& $this->isAssociativeArray($value)
49+
) {
50+
$merged[$key] = $this->mergeConfig($defaults[$key], $value);
51+
continue;
52+
}
53+
54+
$merged[$key] = $value;
55+
}
56+
57+
return $merged;
58+
}
59+
60+
/**
61+
* Check is associative key array
62+
*
63+
* @param mixed $key
64+
*
65+
* @return bool
66+
*/
67+
private function isAssociativeArray(mixed $key): bool
68+
{
69+
return is_array($key) && count(array_filter(array_keys($key), 'is_string')) > 0;
70+
}
71+
}

0 commit comments

Comments
 (0)