4
4
5
5
use Illuminate \Http \Request ;
6
6
use Spatie \LaravelData \Contracts \BaseData ;
7
+ use Spatie \LaravelData \Contracts \PropertyMorphableData ;
7
8
use Spatie \LaravelData \Enums \CustomCreationMethodType ;
8
9
use Spatie \LaravelData \Optional ;
9
10
use Spatie \LaravelData \Support \Creation \CreationContext ;
@@ -30,8 +31,8 @@ public function execute(
30
31
CreationContext $ creationContext ,
31
32
mixed ...$ payloads
32
33
): BaseData {
33
- if ($ this ->isPropertyMorphable ($ class )) {
34
- $ class = $ class ::morph (...$ payloads ) ?? $ class ;
34
+ if ($ propertyMorphableClass = $ this ->propertyMorphableClass ($ class )) {
35
+ $ class = $ propertyMorphableClass ::morph (...$ payloads ) ?? $ class ;
35
36
}
36
37
37
38
if ($ data = $ this ->createFromCustomCreationMethod ($ class , $ creationContext , $ payloads )) {
@@ -64,12 +65,16 @@ public function execute(
64
65
return $ this ->dataFromArrayResolver ->execute ($ class , $ properties );
65
66
}
66
67
67
- protected function isPropertyMorphable (string $ class ): bool
68
+ /**
69
+ * @return class-string<PropertyMorphableData>
70
+ */
71
+ protected function propertyMorphableClass (string $ class ): ?string
68
72
{
69
- $ dataClass = $ this ->dataConfig
70
- ->getDataClass ($ class );
73
+ $ dataClass = $ this ->dataConfig ->getDataClass ($ class );
71
74
72
- return $ dataClass ->isAbstract && $ dataClass ->propertyMorphable ;
75
+ return $ dataClass ->isAbstract && $ dataClass ->propertyMorphable
76
+ ? $ class
77
+ : null ;
73
78
}
74
79
75
80
protected function createFromCustomCreationMethod (
0 commit comments