配列の中身を再帰的にサニタイズする関数を作成しました。
配列の中身が配列であった場合は、改めてサニタイズする関数を呼び出し、再帰的な処理をすることを想定しています。
CakePHPを使わない場合は問題なく動くのですが、CakePHP3に移すと値が取得できない(配列は帰ってくるのですが、その中身が空になっている)状態です。
「$this->mysanitize ( $val );」の再帰的に配列を呼び出す際の記述方法が間違っているのではないか、と思っているのですが、どう記述するのが正しいのでしょうか?
お教えいただけませんでしょうか?
PHP
1 public function index() { 2 : 3 : 4 $usersSani = $this->mysanitize ( $users ); 5 6 $this->set(compact('users','usersSani')); 7 $this->set('_serialize', ['users']); 8 } 9 10 11 public function mysanitize ( $input ) { 12 $_input = array (); 13 foreach ( $input as $key => $val ) { 14 if ( is_array ( $val ) ){ 15 $_input[$key] = $this->mysanitize ( $val ); 16 } else { 17 $_input[$key] = htmlspecialchars($val); 18 } 19 } 20 return $_input; 21 } 22
CakePHPから実行した場合、変数$users が意図する値になっていない可能性があります。$usersSani = $this->mysanitize ( $users ); の直前に var_dump($users); という一行を追加し、ブラウザまたはコンソールに表示された変数$users の値を質問欄に追記してみてください。
コメントありがとうございます。 $usersの中身は、下記の JSON形式になっていました。 [{"id":1,"username":"user01","master_roles_id":"2","email":"aaa@aaa.com","nickname":"\u306b\u3063\u304f\u306d\u30fc\u3080\uff10\uff11","zipcode":"0000001","created":"2017-02-21T09:55:45+00:00","modified":"2017-02-23T09:51:49+00:00"}, ...以下略 「$this->set(compact('users'));」として viewで受け取るとオブジェクトになっていますので、controllerの中の「$users」もオブジェクトなのだと思ってしまっていました。 $usersがオブジェクトじゃないということで、もう少し試してみたいと思います。
返信ありがとうございます。原因がわかったので、あと一歩で修正できそうですね。がんばってください。
回答1件
あなたの回答
tips
プレビュー