20
20
use Doctrine \Persistence \Mapping \ClassMetadata ;
21
21
use Doctrine \Persistence \NotifyPropertyChanged ;
22
22
use Doctrine \Persistence \ObjectManager ;
23
+ use Gedmo \Exception \InvalidMappingException ;
23
24
use Gedmo \Exception \UnexpectedValueException ;
24
25
use Gedmo \Mapping \Event \AdapterInterface ;
25
26
use Gedmo \Mapping \MappedEventSubscriber ;
@@ -89,7 +90,7 @@ public function onFlush(EventArgs $args)
89
90
$ new = array_key_exists ($ field , $ changeSet ) ? $ changeSet [$ field ][1 ] : false ;
90
91
if (null === $ new ) { // let manual values
91
92
$ needChanges = true ;
92
- $ this ->updateField ($ object , $ ea , $ meta , $ field );
93
+ $ this ->updateField ($ object , $ ea , $ meta , $ field, $ config );
93
94
}
94
95
}
95
96
}
@@ -101,7 +102,7 @@ public function onFlush(EventArgs $args)
101
102
&& null === $ changeSet [$ field ][1 ];
102
103
if (!isset ($ changeSet [$ field ]) || $ isInsertAndNull ) { // let manual values
103
104
$ needChanges = true ;
104
- $ this ->updateField ($ object , $ ea , $ meta , $ field );
105
+ $ this ->updateField ($ object , $ ea , $ meta , $ field, $ config );
105
106
}
106
107
}
107
108
}
@@ -152,7 +153,7 @@ public function onFlush(EventArgs $args)
152
153
153
154
if (null === $ configuredValues || ($ singleField && in_array ($ value , $ configuredValues , true ))) {
154
155
$ needChanges = true ;
155
- $ this ->updateField ($ object , $ ea , $ meta , $ options ['field ' ]);
156
+ $ this ->updateField ($ object , $ ea , $ meta , $ options ['field ' ], $ config );
156
157
}
157
158
}
158
159
}
@@ -184,14 +185,14 @@ public function prePersist(EventArgs $args)
184
185
if (isset ($ config ['update ' ])) {
185
186
foreach ($ config ['update ' ] as $ field ) {
186
187
if (null === $ meta ->getReflectionProperty ($ field )->getValue ($ object )) { // let manual values
187
- $ this ->updateField ($ object , $ ea , $ meta , $ field );
188
+ $ this ->updateField ($ object , $ ea , $ meta , $ field, $ config );
188
189
}
189
190
}
190
191
}
191
192
if (isset ($ config ['create ' ])) {
192
193
foreach ($ config ['create ' ] as $ field ) {
193
194
if (null === $ meta ->getReflectionProperty ($ field )->getValue ($ object )) { // let manual values
194
- $ this ->updateField ($ object , $ ea , $ meta , $ field );
195
+ $ this ->updateField ($ object , $ ea , $ meta , $ field, $ config );
195
196
}
196
197
}
197
198
}
@@ -216,10 +217,11 @@ abstract protected function getFieldValue($meta, $field, $eventAdapter);
216
217
* @param AdapterInterface $eventAdapter
217
218
* @param ClassMetadata $meta
218
219
* @param string $field
220
+ * @param array $config
219
221
*
220
222
* @return void
221
223
*/
222
- protected function updateField ($ object , $ eventAdapter , $ meta , $ field )
224
+ protected function updateField ($ object , $ eventAdapter , $ meta , $ field, array $ config = [] )
223
225
{
224
226
$ property = $ meta ->getReflectionProperty ($ field );
225
227
$ oldValue = $ property ->getValue ($ object );
@@ -235,7 +237,18 @@ protected function updateField($object, $eventAdapter, $meta, $field)
235
237
}
236
238
}
237
239
238
- $ property ->setValue ($ object , $ newValue );
240
+ if (!empty ($ config ['setterMethod ' ][$ field ])) {
241
+ $ reflectionClass = $ meta ->getReflectionClass ();
242
+ $ setterName = $ config ['setterMethod ' ][$ field ];
243
+
244
+ if (!$ reflectionClass ->hasMethod ($ setterName )) {
245
+ throw new InvalidMappingException ("Setter method - [ {$ setterName }] does not exist in class - {$ meta ->getName ()}" );
246
+ }
247
+
248
+ $ reflectionClass ->getMethod ($ setterName )->invoke ($ object , $ newValue );
249
+ } else {
250
+ $ property ->setValue ($ object , $ newValue );
251
+ }
239
252
240
253
if ($ object instanceof NotifyPropertyChanged) {
241
254
$ uow = $ eventAdapter ->getObjectManager ()->getUnitOfWork ();
0 commit comments