Skip to content

Commit 97add59

Browse files
committed
Add missing import for nested controllers
1 parent 1c67e37 commit 97add59

File tree

6 files changed

+26
-7
lines changed

6 files changed

+26
-7
lines changed

src/Generators/ControllerGenerator.php

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,10 @@ public function output(array $tree): array
4141
foreach ($tree['controllers'] as $controller) {
4242
$this->addImport($controller, 'Illuminate\\Http\\Request');
4343

44+
if ($controller->fullyQualifiedNamespace() !== 'App\\Http\\Controllers') {
45+
$this->addImport($controller, 'App\\Http\\Controllers\\Controller');
46+
}
47+
4448
$path = $this->getPath($controller);
4549

4650
if (!$this->files->exists(dirname($path))) {
@@ -121,10 +125,10 @@ private function buildMethods(Controller $controller)
121125
$body .= self::INDENT . $statement->output() . PHP_EOL;
122126
} elseif ($statement instanceof EloquentStatement) {
123127
$body .= self::INDENT . $statement->output($controller->prefix(), $name) . PHP_EOL;
124-
$this->addImport($controller, config('blueprint.namespace') . '\\' . ($controller->namespace() ? $controller->namespace() . '\\' : '') . $this->determineModel($controller, $statement->reference()));
128+
$this->addImport($controller, $this->determineModel($controller, $statement->reference()));
125129
} elseif ($statement instanceof QueryStatement) {
126130
$body .= self::INDENT . $statement->output($controller->prefix()) . PHP_EOL;
127-
$this->addImport($controller, config('blueprint.namespace') . '\\' . ($controller->namespace() ? $controller->namespace() . '\\' : '') . $this->determineModel($controller, $statement->model()));
131+
$this->addImport($controller, $this->determineModel($controller, $statement->model()));
128132
}
129133

130134
$body .= PHP_EOL;
@@ -165,13 +169,21 @@ private function buildImports(Controller $controller)
165169
private function determineModel(Controller $controller, ?string $reference)
166170
{
167171
if (empty($reference) || $reference === 'id') {
168-
return Str::studly(Str::singular($controller->prefix()));
172+
return $this->fullyQualifyModelReference($controller->namespace(), Str::studly(Str::singular($controller->prefix())));
169173
}
170174

171175
if (Str::contains($reference, '.')) {
172-
return Str::studly(Str::before($reference, '.'));
176+
return $this->fullyQualifyModelReference($controller->namespace(), Str::studly(Str::before($reference, '.')));
173177
}
174178

175-
return Str::studly($reference);
179+
return $this->fullyQualifyModelReference($controller->namespace(), Str::studly($reference));
180+
}
181+
182+
private function fullyQualifyModelReference(string $sub_namespace, string $model_name)
183+
{
184+
// TODO: get model_name from tree.
185+
// If not found, assume parallel namespace as controller.
186+
// Use respond-statement.php as test case.
187+
return config('blueprint.namespace') . '\\' . ($sub_namespace ? $sub_namespace . '\\' : '') . $model_name;
176188
}
177189
}

tests/fixtures/controllers/controller-configured.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
namespace Some\App\Other\Http;
44

5+
use App\Http\Controllers\Controller;
56
use Illuminate\Http\Request;
67
use Some\App\Http\Requests\UserStoreRequest;
78
use Some\App\User;

tests/fixtures/controllers/nested-components.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
use App\Admin\User;
66
use App\Events\NewUser;
7+
use App\Http\Controllers\Controller;
78
use App\Http\Requests\Admin\UserStoreRequest;
89
use App\Jobs\BuildAccount;
910
use App\Mail\InviteNotification;

tests/fixtures/controllers/respond-statements.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
namespace App\Http\Controllers\Api;
44

55
use App\Api\Post;
6+
use App\Http\Controllers\Controller;
67
use Illuminate\Http\Request;
78

89
class PostController extends Controller

tests/fixtures/definitions/nested-components.bp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ models:
55
controllers:
66
Admin/User:
77
index:
8-
query: all:users
8+
query: all
99
render: admin.user.index with:users
1010

1111
store:

tests/fixtures/definitions/respond-statements.bp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
1+
models:
2+
Post:
3+
title: string
4+
15
controllers:
26
Api/Post:
37
index:
4-
query: all:posts
8+
query: all
59
respond: posts
610
store:
711
respond: 204

0 commit comments

Comments
 (0)