2010-12-01から1ヶ月間の記事一覧

CakePHP1.3.6:HABTM(hasAndBelongsToMany)とscaffold

モデルのアソシエーション(リレーション)として、これまで、hasOne、hasMany、belongsTo検証したので、HABTM(hasAndBelongsToMany)、つまり、N:Mの関係を検証してみる。scaffoldをやってびっくり。とっても簡単に定義できる。N:M(複数:複数)のリレーシ…

CakePHP1.3.6:HABTM(hasAndBelongsToMany)とscaffold

モデルのアソシエーション(リレーション)として、これまで、hasOne、hasMany、belongsTo検証したので、HABTM(hasAndBelongsToMany)、つまり、N:Mの関係を検証してみる。scaffoldをやってびっくり。とっても簡単に定義できる。N:M(複数:複数)のリレーシ…

CakePHP1.3.6:AppController.phpをカスタマイズする。

先のログでAuthを使って、全てのコントローラーでログインチェックを行うことにした。 これは、面倒くさい。DRYじゃない。ということで、コントローラーのスーパークラスであるAppController.phpに設定してしまう。AppController.phpは、/cake/libs/controll…

CakePHP1.3.6:Authコンポーネントで認証する(その2)

前回のログに引き続き、usersテーブルをメンテナンスするプログラムを作成する。 今回は、hasOneの関係を試すために、user_attrsテーブルを以下のようなスキーマで作成する。 CREATE TABLE IF NOT EXISTS `user_attrs` ( `id` int(11) NOT NULL AUTO_INCREME…

CakePHP1.3.6:Authコンポーネントで認証する

Authコンポーネントを使って、以下のような認証を実装する。Mainというプログラムを作成し、以下のようなメニュー画面をつくる。 ここにアクセスするためには、以下のようなログイン画面を通すようにする。 また、メニューからログアウトすると以下のような…

CakePHP1.3.6:Invalidateでちょとハマる

画像アップロードを作った際に、モデルのinvalidateが言うことを聞かずにちょっとはまった。 multipartの部分は、あらかじめsaveの前にチェックしてエラーがあったら画面を戻してエラーメッセージを出したい。 invalidateを使うのは、入力値が残るため。これ…

CakePHP1.3.6:Media Plugin1.3RCに挫折して、ファイルアップロードを自作(その2)

前回の続き。 まず、以下のアップロード画面を作る。これがメイン。 プログラム名はDocとするので、/app/controllersにdoc_controller.phpを作成する。 ビュー /app/views/docsにadd.ctpを作る。 ファイルを複数uploadするには、DocImage.0.fileと同じ部分を…

CakePHP1.3.6:Media Plugin1.3RCに挫折して、ファイルアップロードを自作(その2)

前回の続き。 まず、以下のアップロード画面を作る。これがメイン。 プログラム名はDocとするので、/app/controllersにdoc_controller.phpを作成する。 ビュー /app/views/docsにadd.ctpを作る。 ファイルを複数uploadするには、DocImage.0.fileと同じ部分を…

CakePHP1.3.6:Media Plugin1.3RCに挫折して、ファイルアップロードを自作(その2)

前回の続き。 まず、以下のアップロード画面を作る。これがメイン。 プログラム名はDocとするので、/app/controllersにdoc_controller.phpを作成する。 ビュー /app/views/docsにadd.ctpを作る。 ファイルを複数uploadするには、DocImage.0.fileと同じ部分を…

CakePHP1.3.6:Media Plugin1.3RCに挫折して、ファイルアップロードを自作(その1)

ファイルアップロードをやってみようと思い、名高いMedia Pluginを試して、半日がかりでやってみたが、結局挫折。サイトを見て、おやおやと思ったのが、0.x系から飛んで、1.3RCが出てること。こういうのは経験的に危ない。YUI、Strutsなんかもそうですね。ア…

CakePHP1.3.6:任意のSQLを実行する。

CakePHPではモデルを定義するだけで、基本的なSQLは書かなくていい。 だが、それだと困る場面もあると思う。 と思ってググってみると、shinbaraさんのブログにありがたいことが書いてあった(感謝です)。コードを見た方が早いので書いておく。 コントローラ…

CakePHP1.3.6:円マークを使って金額をフォーマットする。

つまらないことで30分もはまったので、覚え書き。 以下のように、円マークをつかって、金額をカンマ区切りで出そうと思い、Numberヘルパーを使った。 円マークを¥とするのは当たり前なんだけど、エスケープされてしまう。あれれ、と思ったら、numberヘルパー…

CakePHP1.3.6:テーブルのジョイン(join)

ORM(Object-Relational Map、もしくは、Object-Relational Mapper) モジュールでは、エンティティー間のリレーションが定義できることができるのが、一般的だ。話が脇にそれるが、先日、会社で教育をやったらエンティティー(Entity)という言葉に違和感を覚…

CakePHP1.3.6, jQuery1.4.3:Javascriptを利用する。

これまでのログではJavascriptを使ってこなかったが、使わないわけにはいかない。 レイアウトを使わずにテンプレート(ctpファイル)のみを使うのであれば、普通通りにscriptタグが使える。 だが、レイアウトを使いたい。 だが、たとえば、ctpファイルに <script>ale</script>…

CakePHP1.3.6:間違ったURLを叩かれた場合の対応。

こちらの記事の方がシンプルですね。どうもありがとうございました。 ==================================================================== よく間違ったURLを叩くと、以下のような画面が現れる。 とっても親切に、コントローラーがないよ、とか、アクシ…

CakePHP1.3.6:ページネーション(Pagination)。

CakePHPで秀逸だなぁと思うのが、このページネーション。とってもスマートに書くことができる。Myznalaでもオレオレ流のページネーションを提供しているが、自分で書くとなるとそれなりに面倒くさい。CakePHPでは、一覧表示画面に簡単なコードを追加するだけ…

CakePHP1.3.6:更新・削除処理を実装する(CRUD)。

それでは、顧客テーブル(customers)に更新、削除機能を実装して、とりあえずCRUDを完成してしまおう。更新は、前回の詳細画面に更新のためのリンクを張って実装する。 更新のリンクをクリックすると、以下のように更新画面に遷移し、更新ボタンで更新する…

CakePHP1.3.6:一覧表示にアンカーを張って、参照画面を実装する。

今回は、これまでに作った一覧表示画面を修正して、明細参照の画面を追加する。 方法としては、以下のように、一覧にあるIDにアンカーを張る。 ここで、アンカーをクリックすると、以下のようなデータを照会する画面に遷移するようにする。 ポイントは、アン…

CakePHP1.3.6:データの追加に自作のバリデーションを適用する。

以前、scaffoldのログでモデルにバリデータを設定した。 実際にはいろんなパターンのバリデーションを適用するから、今回は自作のバリデータをモデルに設定する。 サンプルでは、これまで使ってきたモデルに対して、 名前;ひらがなに入力を制限する。 郵便…

CakePHP1.3.6:データを追加する。

前回のプログラムに、データの追加機能を追加する。初期画面は以下。 画面左下に、「登録」のリンクを張って、そこをクリックすると、以下の画面に遷移する。 また、いくつかのフィールドにバリデーション(Not empty)を実装して、エラーの場合、以下のよう…

CakePHP1.3.6:入力値に合致するテーブルのデータを一覧表示する。

今回は、前回の画面によくある絞り込み機能を追加する。 以下のように画面に入力フィールドを設け、それに合致するデータを一覧で表示する。 Formヘルパーを使うことで、入力後に送信しても入力フィールドがクリアされない。これは便利。 モデル モデルは先…

CakePHP1.3.6:テーブルのデータを一覧表示する。

scaffoldを間にはさんでしまったが、以前のログの続きで、テーブルからデータを取得して一覧表示してみる。 以下がその画面。 モデルの作成 /app/modelにcustomer.phpを作成する。 コントローラーの作成 /app/controllersにcustomer_controller.phpを作成す…

CakePHP1.3.6:scaffoldにバリデーション(Validation)を適用する。

CakePHPを勉強し始めて、Strutsが登場した頃の感覚がよみがえるのだが、決定的に違うのが、モデル(DAO:Data Access Object)にバリデーションを実装する点。 Strutsだと、印象としては画面の入力に対してバリデーションを行い、コントローラーでさばく。Str…

CakePHP1.3.6:scaffoldに独自レイアウトを適用する。

前回のログでは、CakePHPの「デフォルトレイアウト」を利用したscaffoldを作成した。 これはこれでいいのだが、他の画面とレイアウトを合わせたい、ということもあるだろう。 今回は、scaffoldに独自のレイアウトを適用してみる。以下が、初期画面(index画…

CakePHP1.3.6:scaffold

scaffoldのtimestampの件、解決しました。フィールド名に規約があるのですね。createdとmodifiedをDATETIME型にしたらscaffoldの画面から消えて、裏ではちゃんと動作しました(CakePHP1.3.14, PHP5.3.4, MySQL5.1.54, CentOS5)。どうもありがとうございました…

CakePHP1.3.6:データベースをつかってみる。

前置きが長くなったが、データベースを使ってみる。 CakePHPは、データベースに対して、「モデル」と呼ぶ独自のDAO(Data Access Object)を提供している。この場合のコンベンション(慣例、規約)は、 テーブル名は複数形(最後にsをつける)。 モデル名は…

CakePHP1.3.6:フォーム・ヘルパー(Form Helper)をつかってみる。

今回は、以下のような画面をフォーム・ヘルパーで作ってみる。JavaEEをやっていた頃、Strutsのタグリブ(Taglib)で大はまりしたことがある。フォーム・ヘルパー(Form Helper)やHTMLヘルパー(HTML Helper)は、タグリブの臭いがするので、なんとなく気が…

CakePHP1.3.6:入力値を独自プログラムでサニタイズ(Sanitize)する。

前回のログでは、CakePHPに用意されたSanitizeライブラリ(プログラム)でサニタイズをした。実際のアプリでは、サニタイズや禁則処理を独自に実装したいことが多い。そこで、今回は独自のクラスを使ってサニタイズしてみる。入力は前回と同じで以下のように…

CakePHP1.3.6:入力値をサニタイズ(Sanitize)する。

Formの入力値を処理するのに、最低限必要なのがサニタイズ。 下の画面のように、テキストフィールドに <script>alert('hello')</script> と入力して、以下のようになったらシャレにもならない。 CakePHPには、Sanitizeというライブラリー(プログラム)が用意されている。プロ…