【CakePHP 2.x】REST APIの構築+マルチバイト文字のエスケープ防止(uXXXXの形式になるのを防止)
CakePHP 2.xでREST APIを作る必要があったのでメモ。
以下の3点について書いてます。
1. レスポンスをJSONで返す 2. マルチバイト文字のエスケープ防止 3. PHPUnitでテストする際の注意点
SecurityComponentとの絡みはまた次回。
特にPHPUnitで、JSONの結果が取れずにハマりましたorz
APIの検証に限って言えばPHPUnitを使う必要はないですが、あれこれ使うのは嫌という方の参考になれば。
【jQuery】Formの2重投稿を防ぐ方法(submitボタンが2つ以上ある場合)
Formの2重投稿はサーバ側でも防止するべきですが、UIを考えるとフロント側でも防止出来たほうが嬉しいですよね。
まず、submitボタンが1つの場合によくあるのは、submitボタンにdisableをかける方法。
例えばこんな感じ。
<!-- フォーム --> <form id="sample_form"> <button type="submit">submit</button> </form> <!-- スクリプト(jQuery読込前提) --> <script> $(function(){ $('#sample_form').on('submit', function(){ // submitボタンにdisabledをかける $(this).find('button[type="submit"]') .attr('disabled', 'disabled') .text('登録中…'); }); }); </script>
cssメソッドでopacityをかけたり、pointer-eventsを切ったりすると、見た目も無効っぽくなります。
ただ、この方法だと2つ以上submitボタンが有る場合に問題が出てきます。
一般的にはsubmitボタンに別々のvalue属性を付けることで、submit時に押したボタンのvalueが送信されるため、どちらのボタンを押したかをサーバ側で判別できます。
しかし、submitボタンにdisabledをかけてしまうと、submit時に押したボタンのvalueが送信されません^^;
そこで、disabledをかけるのをやめ、submitイベント側で2回目以降はsubmitを中断させることで対応。
<!-- フォーム --> <form id="sample_form"> <button type="submit" name="submit" value="1">submit1</button> <button type="submit" name="submit" value="2">submit2</button> </form> <!-- スクリプト(jQuery読込前提) --> <script> $(function(){ $('#sample_form').on('submit', function(){ // 一度submitされていればsubmitをキャンセル if ($(this).data('submitted')) { return false; } // submitボタンのテキスト変更 $(this).find('button[type="submit"]') .text('登録中…'); // submit済のフラグを立てる $(this).data('submitted', true); }); }); </script>
他にいい方法あれば教えて下さい!
【jQuery】getScriptでの非同期js読み込みで、読み込み順を制御したい
ただの再帰処理ですが。 依存関係があり読み込み順が重要な場合にどうぞ。
// 読み込み用メソッドを定義 (function($) { $.getScriptsSequencial = function(scripts, callback) { var f = function(i) { $.getScript(scripts[i], function(){ if (i+1 < scripts.length) { f(i+1); } else { callback(); } }); }; f(0); }; })(jQuery); $(function() { var scripts = [ 'http://twitter.github.com/bootstrap/assets/js/google-code-prettify/prettify.js', 'http://twitter.github.com/bootstrap/assets/js/bootstrap-transition.js', 'http://twitter.github.com/bootstrap/assets/js/bootstrap-alert.js' ]; //シーケンシャルに読み込み(上から順に1つずつ読み込みます) $.getScriptsSequencial(scripts, function() { console.log('done!'); }); });
おまけ
非同期の読み込みのまま、一気にjsファイルを指定したいという方は、こちらが参考になります。
jquery.getMultiScripts - jsdo.it - Share JavaScript, HTML5 and CSS
【CakePHP 2.x】Paginatorコンポ―ネントのorderやlimitの設定が効かずに困った話
CakePHP Cookbook 2.x ドキュメントを見て書いてみたのですが、orderやlimitの設定をしても、デフォルトの設定で動いてしまい、だいぶハマりました^^;
続きを読む【OS X Yosemite(EI Capitan)】phpenv+phpbuild+apache2でPHPのバージョン切り替え
2015/11/20 追記
EI Capitanにアップデートすると/usr
の書き込み権限がなくなったため、apache2上で動作するPHPのバージョン切り替え
から先の手順を変えました。
今日から、とある会社に転職するつもりが、ひょんな事からフリーランスになりました。
今後の予定は一応決まっているのですが、進展があったらまた書きたいと思います!
早速、今日はPHPを触るきっかけがあったのですが、PHPの環境構築時に、せっかくならrbenvっぽくバージョン管理したいなと思い、phpenvに手を出してみました。
で、気軽に始めてみたものの、まさかここまでハマることになろうとは…。
ざっくりですが、インストールした手順をメモっておきます。
続きを読むUbuntu 14.04(Kernel 3.13)にPLANEXの無線LAN子機GW-900Dのドライバをインストール
昨年から、Ubuntu 12.04の入ったデスクトップ端末は、無線LAN子機でネットに繋いでおりました。
ただ、最近になって大分環境も汚くなってきたので、OSを再インストールしよう。 そしてついでに、Ubuntuを14.04にアップグレードしよう。
そう思ったのが事の始まりでした。
子機のドライバが入らねぇ…、ネットに繋がらねぇ… orz
続きを読む