From 23a0bf274a6927c8168b33ec3904c858b1be131c Mon Sep 17 00:00:00 2001 From: Toon Van den Bos Date: Fri, 23 Aug 2019 15:45:13 +0200 Subject: [PATCH] Fixed HasMediaLibrary trait (resource creation was broken). Closes #33 --- src/Concerns/HasMediaLibrary.php | 9 ++++++- src/Flexible.php | 40 ++++++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+), 1 deletion(-) diff --git a/src/Concerns/HasMediaLibrary.php b/src/Concerns/HasMediaLibrary.php index 9397d473..337b821d 100644 --- a/src/Concerns/HasMediaLibrary.php +++ b/src/Concerns/HasMediaLibrary.php @@ -2,6 +2,7 @@ namespace Whitecube\NovaFlexibleContent\Concerns; +use Whitecube\NovaFlexibleContent\Flexible; use Spatie\MediaLibrary\MediaRepository; use Spatie\MediaLibrary\HasMedia\HasMedia; use Spatie\MediaLibrary\HasMedia\HasMediaTrait; @@ -21,7 +22,13 @@ trait HasMediaLibrary { */ protected function getMediaModel() : HasMedia { - return resolve(NovaRequest::class)->findModelOrFail(); + $model = Flexible::getOriginModel(); + + if(is_null($model) || !($model instanceof HasMedia)) { + throw new \Exception('Origin HasMedia model not found.'); + } + + return $model; } /** diff --git a/src/Flexible.php b/src/Flexible.php index 8cf1182d..08568122 100644 --- a/src/Flexible.php +++ b/src/Flexible.php @@ -50,6 +50,13 @@ class Flexible extends Field */ protected static $validatedKeys = []; + /** + * All the validated attributes + * + * @var \Illuminate\Database\Eloquent\Model + */ + public static $model; + /** * Create a fresh flexible field instance * @@ -212,6 +219,8 @@ public function resolve($resource, $attribute = null) { $attribute = $attribute ?? $this->attribute; + $this->registerModel($resource); + $this->buildGroups($resource, $attribute); $this->value = $this->resolveGroups($this->groups); @@ -232,6 +241,8 @@ protected function fillAttribute(NovaRequest $request, $requestAttribute, $model $attribute = $attribute ?? $this->attribute; + $this->registerModel($model); + $this->buildGroups($model, $attribute); $callbacks = collect($this->syncAndFillGroups($request, $requestAttribute)); @@ -493,4 +504,33 @@ public static function getValidationKey($key) { return static::$validatedKeys[$key] ?? null; } + + /** + * Registers a reference to the origin model for nested & contained fields + * + * @param mixed $model + * @return void + */ + protected function registerModel($model) + { + if(is_a($model, \Laravel\Nova\Resource::class)) { + $model = $model->model(); + } + + if(!is_a($model, \Illuminate\Database\Eloquent\Model::class)) { + return; + } + + static::$model = $model; + } + + /** + * Return the previously registered origin model + * + * @return null|\Illuminate\Database\Eloquent\Model + */ + public static function getOriginModel() + { + return static::$model; + } }