Skip to content

Commit cf0e841

Browse files
authored
Merge pull request #199 from RonasIT/fix-generate-nova-resource-sub-folder
fix: Correct NovaResource and NovaTest generation in subfolders
2 parents 23f100d + 68f996c commit cf0e841

File tree

6 files changed

+29
-8
lines changed

6 files changed

+29
-8
lines changed

src/Generators/EntityGenerator.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -300,4 +300,9 @@ protected function prepareRelations(): array
300300

301301
return $result;
302302
}
303+
304+
protected function pathToNamespace(string $name): string
305+
{
306+
return Str::replace('/', '\\', $name);
307+
}
303308
}

src/Generators/ModelGenerator.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,7 @@ protected function shouldImportRelation(string $relation): bool
193193
protected function generateClassNamespace(string $className, ?string $folder = null): string
194194
{
195195
$path = $this->getNamespace('models', $folder);
196-
$psrPath = Str::replace('/', '\\', $className);
196+
$psrPath = $this->pathToNamespace($className);
197197

198198
return "{$path}\\{$psrPath}";
199199
}

src/Generators/NovaResourceGenerator.php

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -85,8 +85,8 @@ public function generate(): void
8585
'model' => $this->model,
8686
'fields' => $novaFields,
8787
'types' => array_unique(data_get($novaFields, '*.type')),
88-
'modelNamespace' => $this->getNamespace('models', $this->modelSubFolder),
89-
'namespace' => $this->getNamespace('nova')
88+
'imports' => $this->getImports(),
89+
'namespace' => $this->getNamespace('nova', $this->modelSubFolder),
9090
]);
9191

9292
$this->saveClass('nova', "{$this->model}Resource", $fileContent, $this->modelSubFolder);
@@ -108,12 +108,12 @@ protected function prepareNovaFields(): array
108108
} else if (Arr::has($this->specialFieldNamesMap, $field->name)) {
109109
$result[$field->name] = [
110110
'type' => $this->specialFieldNamesMap[$field->name],
111-
'is_required' => $field->isRequired
111+
'is_required' => $field->isRequired,
112112
];
113113
} else {
114114
$result[$field->name] = [
115115
'type' => $fieldTypesMap[$field->type],
116-
'is_required' => $field->isRequired
116+
'is_required' => $field->isRequired,
117117
];
118118
}
119119
}
@@ -178,4 +178,17 @@ protected function getColumnList(string $table, ?string $connectionName = null):
178178
->createSchemaManager()
179179
->listTableColumns($table);
180180
}
181+
182+
protected function getImports(): array
183+
{
184+
$imports = [
185+
"{$this->getNamespace('models', $this->modelSubFolder)}\\{$this->model}",
186+
];
187+
188+
if (!empty($this->modelSubFolder)) {
189+
$imports[] = "{$this->getNamespace('nova')}\\Resource";
190+
}
191+
192+
return $imports;
193+
}
181194
}

src/Generators/NovaTestGenerator.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ protected function doesNovaResourceExists(): bool
120120

121121
foreach ($possibleNovaModelNames as $modelName) {
122122
if ($this->classExists('nova', $modelName)) {
123-
$this->novaModelName = $modelName;
123+
$this->novaModelName = $this->pathToNamespace($modelName);
124124

125125
return true;
126126
}

stubs/nova_resource.blade.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
namespace {{ $namespace }};
22

33
@inject('str', 'Illuminate\Support\Str')
4-
use {{ $modelNamespace }}\{{ $model }};
4+
@foreach($imports as $import)
5+
use {{ $import }};
6+
@endforeach
57
use Illuminate\Http\Request;
68
@foreach($types as $fieldType)
79
use Laravel\Nova\Fields\{{ $fieldType }};

tests/fixtures/CommandTest/subfolder/nova_resource.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
<?php
22

3-
namespace App\Nova;
3+
namespace App\Nova\Forum;
44

55
use RonasIT\Support\Tests\Support\Command\Models\Forum\Post;
6+
use App\Nova\Resource;
67
use Illuminate\Http\Request;
78
use Laravel\Nova\Fields\ID;
89
use Laravel\Nova\Fields\Text;

0 commit comments

Comments
 (0)