Skip to content

Commit 997dd2a

Browse files
committed
1 parent e7825de commit 997dd2a

File tree

2 files changed

+48
-4
lines changed

2 files changed

+48
-4
lines changed

src/Http/Controllers/ImportController.php

+9-4
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
use Laravel\Nova\Actions\ActionResource;
1414
use Laravel\Nova\Http\Requests\NovaRequest;
1515
use Maatwebsite\Excel\Concerns\ToModel as ModelImporter;
16+
use SimonHamp\LaravelNovaCsvImport\Http\Requests\ImportNovaRequest;
1617

1718
class ImportController
1819
{
@@ -27,7 +28,7 @@ public function __construct(ModelImporter $importer, Filesystem $filesystem)
2728
$this->filesystem = $filesystem;
2829
}
2930

30-
public function configure(NovaRequest $request, string $file): Response
31+
public function configure(ImportNovaRequest $request, string $file): Response
3132
{
3233
$file_name = pathinfo($file, PATHINFO_FILENAME);
3334

@@ -127,7 +128,7 @@ public function preview(NovaRequest $request, string $file): Response
127128
);
128129
}
129130

130-
public function import(NovaRequest $request)
131+
public function import(ImportNovaRequest $request)
131132
{
132133
$file = $request->input('file');
133134

@@ -140,6 +141,8 @@ public function import(NovaRequest $request)
140141
$resource_name = $config['resource'];
141142

142143
$resource = Nova::resourceInstanceForKey($resource_name);
144+
145+
$request->setImportResource(get_class($resource));
143146
$rules = $this->extractValidationRules($resource, $request)->toArray();
144147
$model_class = $resource->resource::class;
145148

@@ -195,7 +198,7 @@ public function review(NovaRequest $request, string $file): Response
195198
);
196199
}
197200

198-
protected function getAvailableFieldsForImport(string $resource, NovaRequest $request): array
201+
protected function getAvailableFieldsForImport(string $resource, ImportNovaRequest $request): array
199202
{
200203
$novaResource = new $resource(new $resource::$model);
201204
$fieldsCollection = collect($novaResource->creationFields($request));
@@ -207,6 +210,8 @@ protected function getAvailableFieldsForImport(string $resource, NovaRequest $re
207210
}
208211

209212
$fields = $fieldsCollection->map(function (Field $field) use ($novaResource, $request) {
213+
$request->setImportResource($novaResource);
214+
210215
return [
211216
'name' => $field->name,
212217
'attribute' => $field->attribute,
@@ -323,4 +328,4 @@ protected function getDisk(): ?string
323328
{
324329
return config('csv-import.disk');
325330
}
326-
}
331+
}
+39
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
<?php
2+
3+
namespace SimonHamp\LaravelNovaCsvImport\Http\Requests;
4+
5+
use Laravel\Nova\Http\Requests\NovaRequest;
6+
7+
class ImportNovaRequest extends NovaRequest
8+
{
9+
/**
10+
* @var
11+
*/
12+
protected $importResource;
13+
14+
/**
15+
* @param mixed $resource
16+
*/
17+
public function setImportResource($resource): self
18+
{
19+
$this->importResource = $resource;
20+
21+
return $this;
22+
}
23+
24+
/**
25+
* Get the class name of the resource being requested.
26+
*
27+
* @return class-string<\Laravel\Nova\Resource>
28+
*
29+
* @throws \Symfony\Component\HttpKernel\Exception\NotFoundHttpException
30+
*/
31+
public function resource()
32+
{
33+
return tap(once(function () {
34+
return $this->importResource;
35+
}), function ($resource) {
36+
abort_if(is_null($resource), 404);
37+
});
38+
}
39+
}

0 commit comments

Comments
 (0)