@@ -7985,6 +7985,107 @@ public function process(ServerRequestInterface $request, RequestHandlerInterface
7985
7985
}
7986
7986
}
7987
7987
7988
+ // file: src/Tqdev/PhpCrudApi/Middleware/JsonMiddleware.php
7989
+ namespace Tqdev \PhpCrudApi \Middleware {
7990
+
7991
+ use Psr \Http \Message \ResponseInterface ;
7992
+ use Psr \Http \Message \ServerRequestInterface ;
7993
+ use Psr \Http \Server \RequestHandlerInterface ;
7994
+ use Tqdev \PhpCrudApi \Middleware \Base \Middleware ;
7995
+ use Tqdev \PhpCrudApi \RequestUtils ;
7996
+ use Tqdev \PhpCrudApi \ResponseFactory ;
7997
+
7998
+ class JsonMiddleware extends Middleware
7999
+ {
8000
+ private function convertJsonRequestValue ($ value ) /*: object */
8001
+ {
8002
+ if (is_array ($ value ) || is_object ($ value )) {
8003
+ $ value = json_encode ($ value ,JSON_UNESCAPED_UNICODE );
8004
+ }
8005
+ return $ value ;
8006
+ }
8007
+
8008
+ private function convertJsonRequest ($ object , array $ columnNames ) /*: object */
8009
+ {
8010
+ if (is_array ($ object )) {
8011
+ foreach ($ object as $ i => $ obj ) {
8012
+ foreach ($ obj as $ k => $ v ) {
8013
+ if (in_array ('all ' , $ columnNames ) || in_array ($ k , $ columnNames )) {
8014
+ $ object [$ i ]->$ k = $ this ->convertJsonRequestValue ($ v );
8015
+ }
8016
+ }
8017
+ }
8018
+ } else if (is_object ($ object )) {
8019
+ foreach ($ object as $ k => $ v ) {
8020
+ if (in_array ('all ' , $ columnNames ) || in_array ($ k , $ columnNames )) {
8021
+ $ object ->$ k = $ this ->convertJsonRequestValue ($ v );
8022
+ }
8023
+ }
8024
+ }
8025
+ return $ object ;
8026
+ }
8027
+
8028
+ private function convertJsonResponseValue (string $ value ) /*: object */
8029
+ {
8030
+ if (strlen ($ value ) > 0 && in_array ($ value [0 ],['[ ' ,'{ ' ])) {
8031
+ $ parsed = json_decode ($ value );
8032
+ if (json_last_error () == JSON_ERROR_NONE ) {
8033
+ $ value = $ parsed ;
8034
+ }
8035
+ }
8036
+ return $ value ;
8037
+ }
8038
+
8039
+ private function convertJsonResponse ($ object , array $ columnNames ) /*: object */
8040
+ {
8041
+ if (is_array ($ object )) {
8042
+ foreach ($ object as $ k => $ v ) {
8043
+ $ object [$ k ] = $ this ->convertJsonResponse ($ v , $ columnNames );
8044
+ }
8045
+ } else if (is_object ($ object )) {
8046
+ foreach ($ object as $ k => $ v ) {
8047
+ if (in_array ('all ' , $ columnNames ) || in_array ($ k , $ columnNames )) {
8048
+ $ object ->$ k = $ this ->convertJsonResponse ($ v , $ columnNames );
8049
+ }
8050
+ }
8051
+ } else if (is_string ($ object )) {
8052
+ $ object = $ this ->convertJsonResponseValue ($ object );
8053
+ }
8054
+ return $ object ;
8055
+ }
8056
+
8057
+ public function process (ServerRequestInterface $ request , RequestHandlerInterface $ next ): ResponseInterface
8058
+ {
8059
+ $ operation = RequestUtils::getOperation ($ request );
8060
+ $ controllerPath = RequestUtils::getPathSegment ($ request , 1 );
8061
+ $ tableName = RequestUtils::getPathSegment ($ request , 2 );
8062
+
8063
+ $ controllerPaths = $ this ->getArrayProperty ('controllers ' , 'records,geojson ' );
8064
+ $ tableNames = $ this ->getArrayProperty ('tables ' , 'all ' );
8065
+ $ columnNames = $ this ->getArrayProperty ('columns ' , 'all ' );
8066
+ if (
8067
+ (in_array ('all ' , $ controllerPaths ) || in_array ($ controllerPath , $ controllerPaths )) &&
8068
+ (in_array ('all ' , $ tableNames ) || in_array ($ tableName , $ tableNames ))
8069
+ ) {
8070
+ if (in_array ($ operation , ['create ' , 'update ' ])) {
8071
+ $ records = $ request ->getParsedBody ();
8072
+ $ records = $ this ->convertJsonRequest ($ records ,$ columnNames );
8073
+ $ request = $ request ->withParsedBody ($ records );
8074
+ }
8075
+ $ response = $ next ->handle ($ request );
8076
+ if (in_array ($ operation , ['read ' , 'list ' ])) {
8077
+ $ records = json_decode ($ response ->getBody ()->getContents ());
8078
+ $ records = $ this ->convertJsonResponse ($ records , $ columnNames );
8079
+ $ response = ResponseFactory::fromObject ($ response ->getStatusCode (), $ records );
8080
+ }
8081
+ } else {
8082
+ $ response = $ next ->handle ($ request );
8083
+ }
8084
+ return $ response ;
8085
+ }
8086
+ }
8087
+ }
8088
+
7988
8089
// file: src/Tqdev/PhpCrudApi/Middleware/JwtAuthMiddleware.php
7989
8090
namespace Tqdev \PhpCrudApi \Middleware {
7990
8091
@@ -11008,6 +11109,7 @@ private function setHabtmValues(ReflectedTable $t1, ReflectedTable $t2, array &$
11008
11109
use Tqdev \PhpCrudApi \Middleware \FirewallMiddleware ;
11009
11110
use Tqdev \PhpCrudApi \Middleware \IpAddressMiddleware ;
11010
11111
use Tqdev \PhpCrudApi \Middleware \JoinLimitsMiddleware ;
11112
+ use Tqdev \PhpCrudApi \Middleware \JsonMiddleware ;
11011
11113
use Tqdev \PhpCrudApi \Middleware \JwtAuthMiddleware ;
11012
11114
use Tqdev \PhpCrudApi \Middleware \MultiTenancyMiddleware ;
11013
11115
use Tqdev \PhpCrudApi \Middleware \PageLimitsMiddleware ;
@@ -11098,7 +11200,10 @@ public function __construct(Config $config)
11098
11200
case 'xml ' :
11099
11201
new XmlMiddleware ($ router , $ responder , $ properties , $ reflection );
11100
11202
break ;
11101
- }
11203
+ case 'json ' :
11204
+ new JsonMiddleware ($ router , $ responder , $ properties );
11205
+ break ;
11206
+ }
11102
11207
}
11103
11208
foreach ($ config ->getControllers () as $ controller ) {
11104
11209
switch ($ controller ) {
0 commit comments