PCがあれば何でもできる!

へっぽこアラサープログラマーが、覚えたての知識を得意げにお届けします

【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

続きを読む

【C#】ラムダ式、LINQ、遅延評価を理解したいときにオススメの書籍「 C#プログラムの効率的な書き方」

C#のラムダ式、LINQ、遅延評価について、詳しく知りたい方向けに、こちらの本をご紹介します。

川俣 晶さんの「【省エネ対応】 C#プログラムの効率的な書き方」という本です。

 

続きを読む