CakePHP

CakePHP2のPaginateでCASE式などを使ったフィールドを指定してソートする方法

CakePHP2で、CASEやCONCATなどを使ってテーブルに存在しないフィールド名でソートを行う場合、例えば下記のようにすると思います。 ['CASE WHEN User.age >= 20 then 1 else 0 END AS adult'], 'order' => ['adult DESC'] ]; find('all', $params); 通常のf…

CakePHP3のfind結果はdebug関数で見ると良い

CakePHP3を触り始めています。Cake3からfind()の結果がオブジェクトになりました。 Cake2までは配列だったのでpr関数で見ても問題なかったのですが、オブジェクトになるとprは辛くなります。CakePHP3からはdebug関数を使うと下記のようにリレーション先のデ…

CakePHP2にTwilio SMSを使った2要素認証機能を追加

CakePHPアドベントカレンダー2014の2日目の記事です。12/1に @K1LoWさんが突然アドベントを始めたので乗り遅れないように2日目を担当します。まだアドベントカレンダーは空いているので皆様も是非。そうそう、12/10にCakePHP2実践入門が電子書籍として発売さ…

CakePHPのfind()で取得したデータが全てstring型になるのを、DBのカラムの型に合わせてint型で値を取得する方法(mysql)

CakePHP2からはPDOを使ってDBアクセスするようになりました。PDO(mysql)では、デフォルト設定でデータをfetchするとint型のカラムでもstring型として結果が返ってきます。CakePHPもこの影響を受けており、jsonデータなどに変換する際や、型を厳密に扱いたい…

CakePHP1.2から2.3にアップデートしたらサーバの負荷が半減した

あるプロジェクトでCakePHP1.2を使っていたのですが、そろそろサポート期間も終わりそうな気がしたのでCakePHP2.3の最新版にアップデートしました。 サイトは月に数百万PVぐらいの規模で、DBテーブル数は80ぐらい、それに加えてViewテーブルやストアドプロシ…

(2013/4/28) CakePHPのPaginatorコンポーネントに脆弱性、すぐにバージョンアップを!

CakePHP1.2, 1.3, 2.xのPaginatorコンポーネントに脆弱性があり、最悪はSQLインジェクションが起こる可能性があるとのこと。 http://bakery.cakephp.org/articles/markstory/2013/04/28/security_release_-_cakephp_1_2_12_1_3_16_2_2_8_and_2_3_4 早急にア…

CakePHPのレールの外し方(CakePHP勉強会 uluru 2013/04/19)

株式会社うるるで開催された、第1回CakePHP勉強会で発表してきました。 今回のお題は、「エンジニアとデザイナーの協業」でした。 デザイナー向けというのは、実は3回目ぐらいなので何を話そうかなと悩んでました。悩んだ末に、プログラマがどこまでデザイ…

FacebookでCakePHPの日本用グループができました

正確には数ヶ月前からグループは出来てたんだけど、野良っぽい感じだった。 今は、CakePHPコアチームの人も参加してるし、名前もCakePHP Japanというグループ名になり、正式っぽくなった感じ。https://www.facebook.com/groups/304490963004377/日本のフォー…

CakePHPコアデベロッパーMarkStoryさんのインタビュー動画

CakePHP1.3からコアデベロッパーになったMarkStoryさんのインタビュー動画が公開されてます。http://twit.tv/show/floss-weekly/244動画はダウンロードできます。 また、音声のみでもダウンロードできるので、それをiPhoneに入れて聴いてました。彼の人柄が…

Cake1からCake2に移行した際に、Call to a member function body() on a non-objectエラーが出る場合の対応

Cake1.2からCake2に乗せ換えしていてはまった話。 エラーログに下記のようなメッセージが出てうまく表示できない場合、コントローラのresponseオブジェクトが存在しないのが原因。$this->response->body()をCakeのコアコードで呼び出すのでその時にresuponse…

CakePHP Adventカレンダー2012が開催されます

今年もCakePHP Adventカレンダー開催! http://www.adventar.org/calendars/40ハッシュタグは #cakeadvent2012 ですネタは何でも良いので、まずは登録して正座しながら担当日を迎えましょう!

CakePHP3.0の片鱗が見えてきた

まだまだCakePHP3.0のリリースには時間がかかると思いますが(たぶんあと1年ぐらい)、だんだんと3.0の形が見えてきました。CakePHP3からはPHP5.4以上が必須になるようなので、ホスティング環境にかなり左右されそうです。さくらインターネットが今日ホステ…

CakePHP2 実践入門が発売されました!

技術評論社より、「CakePHP2 実践入門」が発売されました。 http://gihyo.jp/book/2012/978-4-7741-5324-72012/9/29に発売なのに、お前はなぜ今頃という感じではありますが、宣伝したいと思います。 いや、最初は在庫切れを心配してあまり宣伝しなかったんで…

CakeFest2012が開催されました

9/1,2とイギリスのマンチェスターで CakeFest2012のカンファレンスが開催されました。今年は去年と同じ場所でした。 今年も発表しようかと思ってたけど、色々な要因で参加しないことにして、その代わり、ライブ配信チケットを2万円ぐらいで買って家で見てま…

CakePHP1と2のパフォーマンスを比較

CakePHP2.2になったので、1.3, 2.0, 2.1, 2.2で比較しました。 比較したコードは、postsテーブルをbakeしただけの単純なものです。 https://github.com/ichikaway/CakePHP-PerformanceCheckSample この画面のように、ページング処理が入ったindexアクション…

PHPカンファレンス関西で発表してきました

発表資料です CakePHP最新情報 PHPカンファレンス関西2012 View more presentations from ichikaway 聞く人がCake知らない人もいるしという前提で作ってしまって、概要が多くなってしまいました。会場にいるほぼ99%の人がCake触ったことあって、8割ぐらいの…

CakePHP2.1.2と、2.2.0-Betaがリリースされました

もう2.2の足音が聞こえてきてますね。 「CakePHP 2.1.2 & 2.2.0-beta released」 http://bakery.cakephp.org/articles/markstory/2012/04/30/cakephp_2_1_2_2_2_0-beta_releasedCakePHP2.2では、2.0, 2.1とAPI互換のためそのままスムーズに移行できそうです…

CakePHPのshellでHtmlヘルパーを利用しURLを生成する

CakePHPのシェルでHtmlヘルパを使ってHtmlHelper::url()を呼び出して、URLを取得する方法です。 CakePHP1.3をベースに書いています(CakePHP2の場合はApp::uses()を使うなどすればいけると思います)。 H…

CakePHP勉強会 2012春 @東京で発表できませんでした!

CakePHP勉強会 2012春 @東京 〜ヤザマキ春のCake祭り〜 主催者&メインセッションの発表者だったのに、インフルエンザで欠席しました。 当日は@mon_satさんと@hiromi2424さんが私の発表資料をつかって即興プレゼンしてくれました。ありがとうございました!発…

フォーム入力画面と確認画面で共通で使えるXFormヘルパーをCakePHP2.0対応しました

Cake1用に作っていたXformヘルパーをCake2.0対応しました。(CakePHP2.1.1でも問題なく動きました) https://github.com/ichikaway/xformHelper/tree/2.0※現在、PHP5.2ではエラーがでますので、PHP5.3以上が動作条件になります(2012/4/18) Xformヘルパーは、…

cakeのエレメントをDB管理する(変数に入ったhtml/phpコードをincludeする)

いくつかのエレメントファイルがview/elements/foo/以下にあって、それをDBで更新することになりました。 ctpの内容をDBの1フィールドに入れて、表示は $this->element(foo/bar)の代わりに DBから取ってきたデータをecho($foo['Model']['bar']);すれば良いか…

CakeplusがCakePHP2に対応しました

CakePHPのプラグインでよく使いそうなものをまとめたCakeplusがCakePHP2に対応しました。 @k1LoWさんが全ての修正をしてくれたのでマージしただけ。ありがとうございます!2.0ブランチをご利用ください。 https://github.com/ichikaway/cakeplus/tree/2.0も…

CakePHP2 独自SQL文でPrepared Statementを使う

CakePHP1系では、 Model->query('select * from posts where id=?', array('hoge'));みたいにして擬似バインドできましたが、CakePHP2からは下記の方法でやるとPrepared StatementでSQLを発行してくれます。 // in controller $result = $this->Post->getDat…

CakePHP2のセキュリティコンポーネントでCSRF対策のみ行う

CakePHP1のセキュリティコンポーネントは、CSRF対策と、フォーム改竄対策がセットであるため、例えばjavascriptで動的にフォームなどを追加するとチェックに引っかかります。CakePHP2からは、CSRF対策とフォーム改竄対策がそれぞれオプションでOFFにできます…

CakePHP2からプラグインのbootstrapとroutesが読み込める

app/Config/bootstrap.phpで下記のようにすると読み込めます。 CakePlugin::loadAll(array( 'FooPlugin' => array('bootstrap' => true, 'routes' => true), ));詳細は下記。 http://book.cakephp.org/2.0/en/plugins.html

CakePHP2用の自動フォルダ探索プラグイン

CakePHP1では、ControllerやModel以下のphpファイルを階層化するために、その中にフォルダを作って入れても動くのですが、CakePHP2からは自動探索しなくなりました。 例えば、下記のように複数フォルダに分けてファイル管理する場合、 app/Contoroller/Admin…

CakePHP2.0.1がリリースされましたが、ちょっと待ったほうがいい ->2.0.2リリースで解決

CakePHP2.0.1がリリースされましたね リリースノート リリースノート(日本語訳)今回の変更で、HTTPのレスポンスヘッダにcontent-lengthをセットするようになったのですが、そこにマルチバイト関係の不具合があって日本語のコンテンツだとうまく表示できない…

PHPMatsuri2011に行ってきた!

今年もPHPMatsuriのスタッフとして参加してきました。 チケット販売、ホテルの部屋の手配など、イベント前にやるタスクが盛りだくさんで忙しすぎて、いつも開催前に「絶対来年はやらんぞ」と思ってしまうんだけど、PHPMatsuriが始まると180度転換してしまう…

Web+DBにCakePHPの記事を書きました

10/22(土)発売のWeb+DB vol.65にCakePHPの記事を書きました。みなさんじゃんじゃん買ってください!内容は、CakePHP1.3でプラグインを使って開発を楽にするところをメインにしました。 @hiromi2424さんのTransitionComponent, 私のxFormHelper, バリデーシ…

gitのコミットを後から分割

最近関わってる http://tipshare.info というサイトで簡単なTipsを書いてます。 皆さんも是非使ってみてください。この週末に [twitter:@monsat]さんがtipshareの記事をブログに貼り付けられる機能を作ってくれたので、gitのコミットを後から分割する方法を…