18
18
use Doctrine \Persistence \Mapping \ClassMetadata ;
19
19
use Doctrine \Persistence \NotifyPropertyChanged ;
20
20
use Doctrine \Persistence \ObjectManager ;
21
+ use Gedmo \Exception \InvalidMappingException ;
21
22
use Gedmo \Exception \UnexpectedValueException ;
22
23
use Gedmo \Mapping \Event \AdapterInterface ;
23
24
use Gedmo \Mapping \MappedEventSubscriber ;
@@ -82,7 +83,7 @@ public function onFlush(EventArgs $args)
82
83
$ new = array_key_exists ($ field , $ changeSet ) ? $ changeSet [$ field ][1 ] : false ;
83
84
if (null === $ new ) { // let manual values
84
85
$ needChanges = true ;
85
- $ this ->updateField ($ object , $ ea , $ meta , $ field );
86
+ $ this ->updateField ($ object , $ ea , $ meta , $ field, $ config );
86
87
}
87
88
}
88
89
}
@@ -94,7 +95,7 @@ public function onFlush(EventArgs $args)
94
95
&& null === $ changeSet [$ field ][1 ];
95
96
if (!isset ($ changeSet [$ field ]) || $ isInsertAndNull ) { // let manual values
96
97
$ needChanges = true ;
97
- $ this ->updateField ($ object , $ ea , $ meta , $ field );
98
+ $ this ->updateField ($ object , $ ea , $ meta , $ field, $ config );
98
99
}
99
100
}
100
101
}
@@ -145,7 +146,7 @@ public function onFlush(EventArgs $args)
145
146
146
147
if (null === $ configuredValues || ($ singleField && in_array ($ value , $ configuredValues , true ))) {
147
148
$ needChanges = true ;
148
- $ this ->updateField ($ object , $ ea , $ meta , $ options ['field ' ]);
149
+ $ this ->updateField ($ object , $ ea , $ meta , $ options ['field ' ], $ config );
149
150
}
150
151
}
151
152
}
@@ -173,14 +174,14 @@ public function prePersist(EventArgs $args)
173
174
if (isset ($ config ['update ' ])) {
174
175
foreach ($ config ['update ' ] as $ field ) {
175
176
if (null === $ meta ->getReflectionProperty ($ field )->getValue ($ object )) { // let manual values
176
- $ this ->updateField ($ object , $ ea , $ meta , $ field );
177
+ $ this ->updateField ($ object , $ ea , $ meta , $ field, $ config );
177
178
}
178
179
}
179
180
}
180
181
if (isset ($ config ['create ' ])) {
181
182
foreach ($ config ['create ' ] as $ field ) {
182
183
if (null === $ meta ->getReflectionProperty ($ field )->getValue ($ object )) { // let manual values
183
- $ this ->updateField ($ object , $ ea , $ meta , $ field );
184
+ $ this ->updateField ($ object , $ ea , $ meta , $ field, $ config );
184
185
}
185
186
}
186
187
}
@@ -205,10 +206,11 @@ abstract protected function getFieldValue($meta, $field, $eventAdapter);
205
206
* @param AdapterInterface $eventAdapter
206
207
* @param ClassMetadata $meta
207
208
* @param string $field
209
+ * @param array $config
208
210
*
209
211
* @return void
210
212
*/
211
- protected function updateField ($ object , $ eventAdapter , $ meta , $ field )
213
+ protected function updateField ($ object , $ eventAdapter , $ meta , $ field, array $ config = [] )
212
214
{
213
215
$ property = $ meta ->getReflectionProperty ($ field );
214
216
$ oldValue = $ property ->getValue ($ object );
@@ -224,7 +226,18 @@ protected function updateField($object, $eventAdapter, $meta, $field)
224
226
}
225
227
}
226
228
227
- $ property ->setValue ($ object , $ newValue );
229
+ if (!empty ($ config ['setterMethod ' ][$ field ])) {
230
+ $ reflectionClass = $ meta ->getReflectionClass ();
231
+ $ setterName = $ config ['setterMethod ' ][$ field ];
232
+
233
+ if (!$ reflectionClass ->hasMethod ($ setterName )) {
234
+ throw new InvalidMappingException ("Setter method - [ {$ setterName }] does not exist in class - {$ meta ->getName ()}" );
235
+ }
236
+
237
+ $ reflectionClass ->getMethod ($ setterName )->invoke ($ object , $ newValue );
238
+ } else {
239
+ $ property ->setValue ($ object , $ newValue );
240
+ }
228
241
229
242
if ($ object instanceof NotifyPropertyChanged) {
230
243
$ uow = $ eventAdapter ->getObjectManager ()->getUnitOfWork ();
0 commit comments