You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert
![Discover gists](https://cdn-ak-scissors.b.st-hatena.com/image/square/9cae3f2207d2108cf36d9852bebc9a72f95085d8/height=288;version=1;width=512/https%3A%2F%2Fgithub.com%2Fopengraph.png)
1.2にはなかったが、1.3では__validateWithModelsという関数ができて、Model::validatesの中で使われている。この関数は、habtmの中間テーブルで入力値バリデーションを行ってくれる、というものだ。 Cakeのhabtmデータは他のアソシエーションとは違い、アソシエーション先のモデルへデータを渡して処理してもらうのではなく、基本的にそのモデルの内部で処理する(ItemとCategoryがhabtm関係の時、categories_itemsテーブルの為のCategoriesItem中間モデルは必須ではないため) <?php class Category extends Model { ... 略 ... } class Item extends Model { ... 略 ... var $hasAndBelonsToMany = array( 'Categ
Either email addresses are anonymous for this group or you need the view member email addresses permission to view the original message (1) Revisitng saveAll() and HABTM http://teknoid.wordpress.com/2009/03/30/revisitng-saveall-and-habtm/ (2) Notes on CakePHP HABTM (Part 2, saving data) http://teknoid.wordpress.com/2008/07/11/notes-on-cakephp-habtm-part-2-saving-data/ (1),(2) では、一方のモデルは既にデータをもっている
昨日のブログでもちらっと書いたけど、仕事で便利に使わせてもらっているTransitionコンポーネントについていくつかの記事に分けて書いてみる。本当に便利なのにあまり情報がないのは、みんななんの問題もなくさらっと導入できているからなのかな? Transitionコンポーネントは id:hiromi2424 さんによるCakePHPのコンポーネントです。 24時間CakePHP:Transitionコンポーネント1.0をリリースします。 このコンポーネントがサポートするのは「入力→確認→完了」という流れの入力部分が複数になるパターン。ウィザード的な流れや項目が多くて複数ページにわたるアンケートとかがそういうものに当てはまると思う。 続きを読む Transition#checkData は複数入力画面の1画面目で使用することになるメソッドです。 CakePHPでは以下のようなパターンのコードを
CakePHP1.2から新たにBehavior(振る舞い)クラスが実装され、モデルに共通の処理を定義することが可能になりました。 今回はBehaviorを使ってモデルの各メソッドの結果を自動的にキャッシュするクラス(CacheBehavior)を検討してみました。 CakePHPでは標準でビューキャッシュをサポートしていますが、Cacheクラスを利用することで簡単にキャッシュ機能を組み込むことができます。 ソースコードは少し長いので、一番最後に記述することにします。 CacheBehaviorの目的 CakePHPでの開発では、 ・まず動作するアプリケーションを構築する ・パフォーマンス上ボトルネックになっている部分のチューニングを行う という手法が一般的だと思います。 そこで、CacheBehaviorはチューニング時に実装していくことを想定し、構築時のソースコードになるべく
アパレルサイトの場合ひとつの商品にサイズ・カラーが複数ある場合があります。 登録するとき複数のデータを扱うときのバリデーションです saveAllを使います。 データは array( 0=>array('Product'=>array('name'=>'aaa')), 1=>array('Product'=>array('name'=>'bbb')), 2=>array('Product'=>array('name'=>'ccc')), ) こんな で、バリデーションはsaveAll使います。 $this->Hoge->saveAll($data, array ( 'validate' => 'only' )); こんな。 viewが一癖あります。 フォームは <?php echo $form->text('0.Product.name')?> こんな でもエラーでません。 エラーは
While developing a registration form for a client I had the following problem: This form needed to be able to grab multi-record values for one table. In this case I had a form where a person could sign up more than one participant. (Using CakePHP standard form names) echo $form->input('Participant.0.first_name'); echo $form->input('Participant.0.last_name'); echo $form->input('Participant.1.first_
cakephperさんがキャプチャつきで詳しく解説してくれているDebugKitですが、本当に便利で助かります。 良く今までこれを使わず開発してたな!と(笑)言うくらい便利。無いと困る、もう。 同じくCakePHPの超便利なコンポーネント、Qdmailというメール送信コンポーネントがあるのですが、Qdmailの素晴らしい機能のひとつ*1 としてCakePHPのレイアウトとエレメントを利用してメール本文を生成できるという点があります。 そのため、コントローラで$this->setした値をメール本文で容易に使えるというメリットがあるのですが、DebugKitとQdmailを併用するとこの機能に障害が出てしまいます*2 。 調べたところ、DebugKitが$this->viewの値を”View”→”DebugKit.Debug”に変えてしまうのがまずいようです。 ですので、とりあえずの対処として
CakePHP1.2.3 MediaPluginをつかってみたの続編 結構環境によってハマリどころが多いのでメモ あと、プラグインのアップデートで動かなくなってしまったとこもあるので注意 Model Attachment これがデフォルトのvalidateの設定 <?php class Attachment extends MediaAppModel { var $validate = array( 'file' => array( 'resource' => array('rule' => 'checkResource'), 'access' => array('rule' => 'checkAccess'), 'location' => array('rule' => array('checkLocation', array( MEDIA_TRANSFER, '/tmp/' ))),
2009-07-31 追記 CakePHP1.2.3 MediaPluginをつかってみた その2 最小導入方法 davidpersson's media at master - GitHub GitHubからソースコードを持ってきて、app/pluginsフォルダ内に配置。 $ cd app $ cake schema run create media -path plugins/media/config/sqlもしくは plugins/media/config/sql/media.sqlを元にTableを作成。 app/webroot/media フォルダ作成してパーミッションを設定 app/config/bootstrap.phpに次を追加 <?php require_once(APP.'plugins'.DS.'media'.DS.'config'.DS.'core.php');
モデルでbegin()とかやってはいけない気がする。 Overloadableを継承してるので、メソッドが定義されていない場合は call__()がコールされる。 ベヘイビアとか登録してたらそっちが呼ばれるけど、通常は使わないと思うので データソースのquery()が呼ばれる。 query()内では、メソッドをテンプレートとして引数をバインドしてSQLとして呼ぶと思うので、 begin()とかやると、"BEGIN"というSQLがコールされる。 PostgreSQLだとまさにこれはトランザクション開始のコマンドなので 動作してるように見えると思われる。 でもね。データソースにはちゃんと begin() commit() rollback() っていうメソッドがあるからこっちを使うはず。 モデルのsaveAll()内でもそうしてる。 ということで、モデルにメソッドがないのが困ったけど、以下で解
This is a basic example of how to use the CakePHP paginator helper with the group by condition, it took a little mucking around but this is how I got it working. In this example we have a Comment controller which I want to paginate a custom query displaying an IP address and a calculated count field of the number of spam comments from these particular IP addresses. In the Controller The CommentCon
CakePHP の Text ヘルパーに truncate という指定された文字列を任意の長さに省略するメソッドがあります。 しかし、このメソッドは全角文字を考慮していないため全角文字に用いると文字化けすることがあります。 そこでこのメソッドを全角文字に対応させてみました。 function truncate($text, $length, $ending = '…', $exact = true) { if (strlen($text) < = $length) { return $text; } else { mb_internal_encoding("UTF-8"); if (mb_strlen($text) > $length) { $length -= mb_strlen($ending); if (!$exact) { $text = preg_replace('/\s+?(\
環境: CakePHP 1.3 CakePHPのModelクラスには直接トランザクションを制御するメソッドがない。そこで例えば次のようにAppModelにメソッドを定義する。 class AppModel extends Model { function begin() { return $this->getDataSource()->begin($this); } function commit() { return $this->getDataSource()->commit($this); } function rollback() { return $this->getDataSource()->rollback($this); } } しかしこの方法ではテストがやりにくい。明示的にトランザクションを制御したい時というのは、複数のテーブルにまたがる複雑なロジックを組むことが多いので
コントローラとモデル・コンポーネントの呼び出し方法同様に、$this(Viewオブジェクト)の要素としてヘルパーを呼び出すようになります。 なお、以前の呼び出し方法も使えます。 今回はこの新しい書き方をEclipse PDT上で補完する方法を紹介します。 以下のコードを、APP/libs 配下にcode_completion.phpとして配置します。 次に、各Viewファイルの先頭で
「徹底入門」でもおすすめになっていますが,ER図やSQL文がかけるデータベースツールのA5:SQLというのがあります。これはすごい優れものでして,本当に便利に使っています。作者の松さんには毎日感謝しています。このA5:SQLは,Donkeyを使ってスクリプトを書くことができます。そのスクリプトを使って,A5:SQLのER図にCakePHP仕様のテーブルを追加するスクリプトを書いてみました。CakePHP仕様のテーブルとは,IDがオートインクリメントのINTで,createdとmodifiedというDATETIMEのフィールドがあるテーブルです。リスト用のnameフィールドもつけた単純なテーブルのエンティティをER図に追加します。 //CakePHPCakePHP仕様のテーブルを追加する var frmER = application.getActiveWindow(); if (frmER
Eclipse PDTを使う理由の1つは、その強力なコード補完機能です。 CakePHPを使った開発でもそれを最大限に活かさないのはもったいない!ということで、各所で既出な情報ではありますが、自分の備忘録を兼ねて書きます。 知らない人は今すぐ設定することをオススメします。この設定をすると開発効率は格段にあがると思います。 Viewファイルのコンテンツタイプの設定 Viewファイル(1.1系だと.thtml、1.2系だと.ctpが拡張子のファイル)は、デフォルトではただのテキストファイルとして扱われ、phpコードの補完機能が使えません。 これらはコンテンツタイプの設定をすることで、phpコンテンツとしてEclipseでは認識され、コードの補完もできるようになります。 その設定方法はというと、以下の通り。 メニューバーの「ウィンドウ」⇒「設定」を選択 設定画面の左側の「一般」⇒「コンテンツ・タ
code template for CakePHP NetBeans6.9ではCakePHPに対応してくれなさそうなので涙目な感じです。 さて、CakePHPでモデルやコンポーネントのメソッド名などを補完するための方法がhttp://www.tiplite.com/cakephp-support-in-netbeans/に載っていました。でも、いちいち書くのはめんどくさいですよね。 コードテンプレートで省力化できないかな、と思いました。→できました! このコードテンプレートを使うことの効能(追記) 以下のような補完を実現するためのコードを楽に書けます。 次のようなコードテンプレートを追加します varm /** @var ${Model} */ var $$${Model}; これをNetBeansの環境設定→エディタ→コードテンプレートで、PHPを選び、新規→省略名は「varm」で保存し
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く