From caf34a4886d063691ac1179bd86cea130a2b820b Mon Sep 17 00:00:00 2001 From: "v.khliebka" Date: Sat, 13 Aug 2022 18:18:43 +0300 Subject: [PATCH] Fixing belong to relation --- src/Http/Controllers/ImportController.php | 11 +++++-- src/Http/Requests/ImportNovaRequest.php | 39 +++++++++++++++++++++++ 2 files changed, 47 insertions(+), 3 deletions(-) create mode 100644 src/Http/Requests/ImportNovaRequest.php diff --git a/src/Http/Controllers/ImportController.php b/src/Http/Controllers/ImportController.php index 7cfbc4e..f8e0ad2 100644 --- a/src/Http/Controllers/ImportController.php +++ b/src/Http/Controllers/ImportController.php @@ -13,6 +13,7 @@ use Laravel\Nova\Actions\ActionResource; use Laravel\Nova\Http\Requests\NovaRequest; use Maatwebsite\Excel\Concerns\ToModel as ModelImporter; +use SimonHamp\LaravelNovaCsvImport\Http\Requests\ImportNovaRequest; class ImportController { @@ -27,7 +28,7 @@ public function __construct(ModelImporter $importer, Filesystem $filesystem) $this->filesystem = $filesystem; } - public function configure(NovaRequest $request, string $file): Response + public function configure(ImportNovaRequest $request, string $file): Response { $file_name = pathinfo($file, PATHINFO_FILENAME); @@ -127,7 +128,7 @@ public function preview(NovaRequest $request, string $file): Response ); } - public function import(NovaRequest $request) + public function import(ImportNovaRequest $request) { $file = $request->input('file'); @@ -140,6 +141,8 @@ public function import(NovaRequest $request) $resource_name = $config['resource']; $resource = Nova::resourceInstanceForKey($resource_name); + + $request->setImportResource(get_class($resource)); $rules = $this->extractValidationRules($resource, $request)->toArray(); $model_class = $resource->resource::class; @@ -195,7 +198,7 @@ public function review(NovaRequest $request, string $file): Response ); } - protected function getAvailableFieldsForImport(string $resource, NovaRequest $request): array + protected function getAvailableFieldsForImport(string $resource, ImportNovaRequest $request): array { $novaResource = new $resource(new $resource::$model); $fieldsCollection = collect($novaResource->creationFields($request)); @@ -207,6 +210,8 @@ protected function getAvailableFieldsForImport(string $resource, NovaRequest $re } $fields = $fieldsCollection->map(function (Field $field) use ($novaResource, $request) { + $request->setImportResource($novaResource); + return [ 'name' => $field->name, 'attribute' => $field->attribute, diff --git a/src/Http/Requests/ImportNovaRequest.php b/src/Http/Requests/ImportNovaRequest.php new file mode 100644 index 0000000..9af5f2f --- /dev/null +++ b/src/Http/Requests/ImportNovaRequest.php @@ -0,0 +1,39 @@ +importResource = $resource; + + return $this; + } + + /** + * Get the class name of the resource being requested. + * + * @return class-string<\Laravel\Nova\Resource> + * + * @throws \Symfony\Component\HttpKernel\Exception\NotFoundHttpException + */ + public function resource() + { + return tap(once(function () { + return $this->importResource; + }), function ($resource) { + abort_if(is_null($resource), 404); + }); + } +}