File tree Expand file tree Collapse file tree 7 files changed +261
-41
lines changed Expand file tree Collapse file tree 7 files changed +261
-41
lines changed Original file line number Diff line number Diff line change @@ -33,6 +33,11 @@ class Action extends \yii\base\Action
3333 */
3434 public $ paramsPassMethod ;
3535
36+ /**
37+ * @var array Whether JSON parse should parse objects in `params` as associate arrays or objects
38+ */
39+ public $ requestParseAsArray ;
40+
3641 /**
3742 * Parses json body.
3843 * @param $rawBody
@@ -101,6 +106,7 @@ public function runWithParams($params)
101106 try {
102107 $ request = new JsonRpcRequest ();
103108 $ request ->paramsPassMethod = $ this ->paramsPassMethod ;
109+ $ request ->parseAsArray = $ this ->requestParseAsArray ;
104110
105111 $ request ->load (ArrayHelper::toArray ($ requestData ), '' );
106112 if ($ request ->validate ()) {
Original file line number Diff line number Diff line change @@ -23,12 +23,18 @@ class Controller extends \yii\web\Controller
2323 */
2424 public $ paramsPassMethod = self ::JSON_RPC_PARAMS_PASS_FUNCARGS ;
2525
26+ /**
27+ * @var array Whether JSON parse should parse objects in `params` as associative arrays or objects
28+ */
29+ public $ requestParseAsArray = true ;
30+
2631 public function actions ()
2732 {
2833 return [
2934 'index ' => [
3035 'class ' => Action::class,
3136 'paramsPassMethod ' => $ this ->paramsPassMethod ,
37+ 'requestParseAsArray ' => $ this ->requestParseAsArray
3238 ]
3339 ];
3440 }
Original file line number Diff line number Diff line change @@ -28,6 +28,7 @@ class JsonRpcRequest extends Model
2828 public $ params = [];
2929
3030 public $ paramsPassMethod ;
31+ public $ parseAsArray ;
3132
3233 /**
3334 * @inheritdoc
@@ -166,14 +167,21 @@ public function execute()
166167 if ($ this ->paramsPassMethod == Controller::JSON_RPC_PARAMS_PASS_BODY ) {
167168 $ app ->request ->setBodyParams ($ this ->params );
168169 $ app ->request ->setRawBody (Json::encode ($ this ->params ));
169- $ result = $ app ->runAction ($ routeParsed, $ params );
170+ $ result = $ app ->runAction ($ routeParsed );
170171 } else {
171172 if (ArrayHelper::isAssociative ($ this ->params )) {
172173 $ params += $ this ->params ;
173174 } else {
174175 // allow non-named parameters
175176 $ params += $ this ->bindParamsArray ($ routeParsed , $ this ->params );
176177 }
178+
179+ if (is_array ($ params ) && !$ this ->parseAsArray ) {
180+ foreach ($ params as $ key => $ value ) {
181+ $ params [$ key ] = Json::decode (Json::encode ($ value ), false );
182+ }
183+ }
184+
177185 $ result = $ app ->runAction ($ routeParsed , $ params );
178186 }
179187 } catch (JsonRpcException $ e ) {
Original file line number Diff line number Diff line change @@ -16,6 +16,31 @@ public function actionSomeMethod()
1616 return "Some response " ;
1717 }
1818
19+ /**
20+ * @param $params
21+ * @return mixed
22+ */
23+ public function actionEcho (array $ params )
24+ {
25+ return [
26+ 'params ' => $ params ,
27+ 'type ' => gettype ($ params )
28+ ];
29+ }
30+
31+ public function actionEchoObject ($ params )
32+ {
33+ return [
34+ 'params ' => $ params ,
35+ 'type ' => gettype ($ params )
36+ ];
37+ }
38+
39+ public function actionObjectFoo ($ object )
40+ {
41+ return $ object ->foo ;
42+ }
43+
1944 /**
2045 * @param $foo
2146 * @param $bar
Original file line number Diff line number Diff line change 1+ <?php
2+
3+ namespace app \controllers ;
4+
5+ use \georgique \yii2 \jsonrpc \Controller ;
6+
7+ class ObjectParamsJsonRpcController extends Controller
8+ {
9+ // Disable CSRF validation for JSON-RPC POST requests
10+ public $ enableCsrfValidation = false ;
11+
12+ public $ requestParseAsArray = false ;
13+ }
You can’t perform that action at this time.
0 commit comments