$$hashKeyのせいでCakePHPのBlackHoleに引きずり込まれたよ

(更新 2020年4月25日)

a1180_002982_mものすごーーーーーーーーーーーーーーっっっっく久しぶりにスタッフブログを書く龍司です。

最近、NetCommons3を触るようになってからCakePHPとAngularJSをよく使うようになりました。

この組み合わせでちょっとはまったのではまった点について。

CakePHPのセキュリティコンポーネントを使うとフォームからのPOSTに対して下記の様なガードが働くようになります。

一見とても便利そうなんですが、そもそも自由にフォームをつくるためにCakePHPのFormヘルパつかってませんとかになると、引っかかりまくることになります。

今回ちょっと引っかかったのはAngularJSと組み合わせて複数レコードをまとめて更新するようなフォームをつくってたときです。

CakePHPのFormヘルパで出力するフォーム名とAngularJSの変数の形をあわせていったんですが、配列のポストするときに自分では全く指定してない $$hashKeyなんてキーの値がポストされてました。

これ、調べてみたらAngularJSが配列のユニークキーとして使ってる値らしいですね。いつ追加されるかわからないですが、ng-model と関連づけるためかな?

でこの値をもったたま配列をCakePHPにPOSTしちゃうとセキュリティコンポーネントがBlackHole反応しちゃうので、POSTする前に$$hashKeyを削ってやる必要があります。

やり方は下記の様な感じ。

angular.fromJson(angular.toJson($scope.params));

一旦Json文字列にシリアライズすると$$hashKeyは削除されたJson形式の文字列になるので、そうしてからもういちど配列にもどす感じですね。

セキュリティコンポーネントのBlackHoleに吸い込まれちゃったら$$hashKeyがくっついてないか確認してみてくださいね〜

お気軽にお問い合わせください

お問い合わせはこちら