PCがあれば何でもできる!スマートフォン用の表示で見るPCがあれば何でもできる!へっぽこアラサープログラマーが、覚えたての知識を得意げにお届けしますこの広告は、90日以上更新していないブログに表示しています。APIを作る必要があったのでメモ。以下の3点について書いてます。PHPUnitでテストする際の注意点SecurityComponentとの絡みはまた次回。PHPUnitで、JSONの結果が取れずにハマりましたorzAPIの検証に限って言えばPHPUnitを使う必要はないですが、あれこれ使うのは嫌という方の参考になれば。レスポンスをJSONで返すコンポーネントを追加レスポンスをJSONで返す際は、RequestHandlerComponentを使うとシンプルにできます。使用するコントローラにコンポーネントを追加しましょう。マルチバイト文字のエスケープ防止このままでは、日本語のようなマルチバイト文字は自動でuXXXXの形式にエスケープされてしまいます。クライアント側でデコードすれば気にする必要はないのですが、サーバ側でデバッグしようと思うと、地味に面倒です。こんな感じにエスケープされます。\u30C6\u30B9\u30C8原因と対策uXXXXの形式にエスケープされてしまうのは、PHP標準のjson_encode関数が原因です。このjson_encode関数を通すと、自動でuXXXXの形式にエスケープされてしまいます。RequestHandlerComponentもこの関数を使用して、JSONを生成しているために現象が発生していますので、その辺りのコードをうまく書き換える必要があります。5.4以上の場合は、json_encode関数にJSON_UNESCAPED_UNICODEのオプションを付けることで、エスケープさせないようにできます。5.3以下の場合は、このオプションが存在しないため、自作の必要があります。5.4以上でも上記のメソッド使うより、uXXXXの形式にエスケープされた文字をデコードする方が、カスタマイズが少なくて済みそうです。以降、後者の手順の説明となります。今回は、こちらの記事のソースコードを使わせていただきたいと思います。オープンソースこねこねphp自体の拡張ということで、Config辺りにフォルダを切って作成してみました。Unicodeエスケープされた文字列をUTF-8文字列に戻す。"UTF-16");}さらに上記のコードをbootstrap.php辺りで読み込みます。こちらもとりあえず自分好みに書いてますが、正しい作法があればそちらに従ってください。closedir($handle);}これで、エスケープ防止用の関数ができました。JsonViewを拡張するRequestHandlerComponentでは、JsonViewというViewを使い、_serializeのデータをJSONにフォーマットしています。今回はこのJsonViewを継承し、フォーマット部分を書き換えたいと思います。ViewディレクトリにJsonView拡張用のJsonMultiByteView.phpを生成します。}}拡張したJsonMultiByteViewとJsonViewを差し替えるbeforeRenderで差し替えました。"これはサンプルです"}問題なし!もしデバッグ時のみに限定したい場合は、Configure::read('debug')の値を確認して分岐すると良いかもしれません。PHPUnitでテストする際の注意点コントローラのテストのみサンプルを記載します。通常通り、testActionメソッドが使用できますが、returnオプションを付けるという点だけ注意が必要です。}}returnオプションはcontents以外のものを指定し、$this->contentsでJSONを取得する形でも大丈夫です。returnオプションが未指定だと、$this->contentsがnullとなるのでご注意ください。将範フリーランス/エンジニア(主にサーバサイド、その他広く浅く)自宅の作業場は冷蔵庫の隣。キッチンエンジニアとして日々精進しています。(1)はてなブログをはじめよう!m_doi2さんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。