雑想空間スマートフォン用の表示で見る雑想空間この広告は、90日以上更新していないブログに表示しています。2011-07-15yiiでJSONを返すAPI的なものを作るいいいーーー。yiiってのがあるらしいです。frameworkです。Framework軽量で使いやすそうで、MVCらしいので、とりあえず使ってみる事に。やりたい事は、param受け取ったら、処理して、結果をJSONで返すAPI的なもの。Frameworkそして、解凍すれば準備は完了。testdrive※apacheでも何でも良いですが、Webから見れる箇所をWebRootと便宜上記述してますhttp://hostname/testdrive/index.phpこれで見れるはず。errorが出ました。insteadこれは、単純に、date関数使うなら、timezone指定せー、と言っているだけなので、指定すると解決する。date_default_timezone_set('Asia/Tokyo');で、直ります。この状態で、問い合わせメールも飛ぶし、ログイン機能も使えます。JSONを返す基本的に全部render()的な関数が自動で呼ばれてしまうので、json返そうとすると、ちょいっといじらないといけません。controllerの基本的な使い方を見ると、メソッドの最後にrender関数を呼んでます。}今回の修正には関係ないですが、処理フローを理解するためも、render関数を探してみましょう。APIの記述を、testdrive/protected/controllers/ApiController.phpに書く事にします。controllerの継承はyii/framework/web/CBaseController.php↓yii/framework/web/CController.php↓testdrive/protected/components/Controller.php↓testdrive/protected/controllers/ApiController.phpというような感じになっていて、render関数は、CController.phpにあります。overrideするか、renderJSON関数を作ってあげましょう。今回は後者の対応にしました。}まずはlayoutをfalseに設定しつつ、json用のheaderを吐きます。jsonへのencodeは、標準関数でjson_encode($arr);としても良いですが、frameworkがCJavaScriptというクラスを用意してくれているので、その関数を使ってみました。最後に、endで、よけいな処理が続かないようにします。便利な関数なので、よく使わせてもらっています。前のバージョンの場合に少し困る事があります。autoincrementを利用していた場合に、LAST_INESRT_ID()の返す値が意図した値ではない場合があります。下記のようなテーブル構造の場合を考えてみましょう。(`test_id`));さて、データをinsertしてみます。sec)これは意図した通りの動きですね。DUPLICATEを使ってみます。sec)これも意図した通り、最後にinsertされた2というidが帰ってきました。問題は次のパターンです。LAST_INSERT_ID();この場合、UNIQUE_KEYが設定されているtest_idの値(2)はすでに存在するため、insert処理ではなく、update処理がかかります。update処理をしたはずなのに、LAST_INSERT_IDの値は、incrementされてますね。sec)2件しかありません。解決方法できればinsertした場合も、updateした場合も、最後に処理したidを返してもらいたいもの。これを実現するには、SQLを下記のように修正します。LAST_INSERT_ID();試してみましょう。sec)意図した動きになりました。ま、mysqlのversionをさっさとあげろって話かもしれませんが、仕事上そう簡単にversionあげれない方もいると思うので。こちらに詳しく書いてあります。時における、LAST_INSERT_ID()の挙動Tweet広告を非表示にするもっと読むコメントを書く2011-05-12Gihyo.jpの記事を印刷モードにするGreaseMonekyGreaseMonkey勉強用に印刷したかったけど、印刷モードなかったので、グリモンでぐりぐりしてみた。印刷モードと言っても、適当にいらない項目消しただけですが。user.js使い方ごめんなさい。エレメント追加すんの面倒で、かなり手抜きました。サブタイトルをクリックすると印刷モードになります。@ITここの言う通りにすれば良いのだけど、ちょこちょこバージョン違うので思い通り行かないところあったので、メモ。スクリーンショットは面倒でとってないので、自分用メモかな。SDKまずはダウンロード。Accountアカウント設定が必要だが、それはダウンロード後の初回起動時でよい。Developerを起動。アカウント設定をしたら、とりあえずおk。4.3】と書いてあるリンクからダウンロード4Gぐらいあるので、DL中は他の事やったほうがよい。ダウンロード後はinstall。DevelopersここからMac版を落とす。download後は、解凍して、解凍したフォルダ毎、適当な場所に置く。type】に【mobile】を指定。SDKを自動で探してくれる。Developerが自動認識してくれる。そのままだとエラーになるので、PATHを指定してやる必要がある。SDK】の部分を選択。SDKの解凍したフォルダを指定する。エラーさて、ここからエラーが出たので、解法を下記に。name]/dev/android-sdk/tools/にコピーすればOKとのこと。ディレクトリが空な事に気づく。なんかまだ根本的に間違っている事がある見たいよ。いうわけで、ぐぐって、下記サイト様に出会うダウンロードしたら解凍してできたフォルダを任意の場所に移す。今回はアプリケーションフォルダにした。コマンドラインは今回一切必要ない。