File tree Expand file tree Collapse file tree 3 files changed +45
-0
lines changed Expand file tree Collapse file tree 3 files changed +45
-0
lines changed Original file line number Diff line number Diff line change 2121 "php" : " ^7.3|^8.0"
2222 },
2323 "require-dev" : {
24+ "nesbot/carbon" : " ^2.61" ,
2425 "pestphp/pest" : " ^1.21.3" ,
2526 "phpstan/phpstan" : " ^1.8.2" ,
2627 "symfony/var-dumper" : " ^5.4.11"
Original file line number Diff line number Diff line change 33namespace Laravel \SerializableClosure \Serializers ;
44
55use Closure ;
6+ use DateTimeInterface ;
67use Laravel \SerializableClosure \Contracts \Serializable ;
78use Laravel \SerializableClosure \SerializableClosure ;
89use Laravel \SerializableClosure \Support \ClosureScope ;
@@ -460,6 +461,12 @@ protected function mapByReference(&$data)
460461
461462 $ instance = $ data ;
462463
464+ if ($ data instanceof DateTimeInterface) {
465+ $ this ->scope [$ instance ] = $ data ;
466+
467+ return ;
468+ }
469+
463470 if ($ data instanceof UnitEnum) {
464471 $ this ->scope [$ instance ] = $ data ;
465472
Original file line number Diff line number Diff line change 11<?php
22
3+ use Carbon \Carbon ;
4+ use Carbon \CarbonImmutable ;
35use Laravel \SerializableClosure \SerializableClosure ;
46use Laravel \SerializableClosure \Serializers \Signed ;
57use Laravel \SerializableClosure \Support \ReflectionClosure ;
@@ -401,6 +403,41 @@ function () {
401403 expect ($ f (new Model ))->toBeInstanceOf (Model::class);
402404})->with ('serializers ' );
403405
406+ test ('serializes used dates ' , function ($ _ , $ date ) {
407+ $ closure = function () use ($ date ) {
408+ return $ date ;
409+ };
410+
411+ $ u = s ($ closure );
412+ $ r = $ u ();
413+
414+ expect ($ r )->toEqual ($ date );
415+ })->with ('serializers ' )->with ([
416+ new DateTime ,
417+ new DateTimeImmutable ,
418+ new Carbon ,
419+ new CarbonImmutable ,
420+ ]);
421+
422+ test ('serializes with used object date properties ' , function ($ _ , $ date ) {
423+ $ obj = new ObjSelf ;
424+ $ obj ->o = $ date ;
425+
426+ $ closure = function () use ($ obj ) {
427+ return $ obj ;
428+ };
429+
430+ $ u = s ($ closure );
431+ $ r = $ u ();
432+
433+ expect ($ r ->o )->toEqual ($ date );
434+ })->with ('serializers ' )->with ([
435+ new DateTime ,
436+ new DateTimeImmutable ,
437+ new Carbon ,
438+ new CarbonImmutable ,
439+ ]);
440+
404441class A
405442{
406443 protected static function aStaticProtected ()
You can’t perform that action at this time.
0 commit comments