ようこそゲストさん

CPA-LABテクニカル

メッセージ欄

分類 【cakephp】 で検索

一覧で表示する

2008/02/08(金) formヘルパーをテーブルなしモデルで使用するとエラーの回避方法CakePHP1.2b

はてブ情報 はてブに登録 はてブ数 cakephpspok
テーブルを使用しない、useTable=false;の時に、viewにてformヘルパーを使用すると以下のようなエラーがでる。(デバッグモード1以上)
(FormHelper::create) Unable to use model field data. If you are using a model without a database table, try implementing schema() [CORE\cake\libs\view\helpers\form.php, line 124]
(Model::getColumnType) Unable to locate model field data. If you are using a model without a database table, try implementing schema() [CORE\cake\libs\model\model.php, line 959]
なかなか日本語情報がなく、googleディスカッションで、なんとか手がかりをみつけた。
ようは、tableを使っていなくても、テーブルのスキーマ情報を登録しておけ、とのこと。
ただ、登録すべきスキーマ情報をどのようにすべきかの確たる情報がない。
で、以下のように最低限のスキーマ登録をやってみたら、エラーはでなくなった。

var $useTable=false;
var $_schema = array('id' => array('type' => 'integer'));



なお、googleディスカッションでは、開発責任者の方自らが、質問に答えていました。
nate

I'm guessing based on the error that you're trying to use a model
which is not attached to a table to create the form. In one of your
controllers, take a model that *is* attached to a table and try
something like the following:

pr($this->Model->schema());
die();


That should give you an idea on how to implement schema().
try implementing schema?
ようは、他のテーブルを使っているコントローラーでスキーマ情報をプリントアウトして、それを参考に、当該テーブルなしモデルでもスキーマを登録せよ、ということらしい。

Cake1.2bのお話。

2008/02/05(火) CakePHP追加コントローラー。ローカルはOK、でもレンタルサーバーでNG。の現象解明

はてブ情報 はてブに登録 はてブ数 cakephpspok
CakePHP1.2bで題名の通り、追加したモデル&コントローラーで不具合?が。ローカルの環境では全く問題なく動くのに、リモートのレンタルサーバーにアップロード後に試すと、なぜかこんなエラーが。
Error: The requested address '' was not found on this server.
ずいぶん悩んで時間がかかったけど、なんのことはない。
layout指定の最初の文字を大文字にしていました。。。。 (& デバッグモードdebug 0 の時)
  • var $layout= 'infl…';
とすべきところ
  • var $layout= 'Infl…';
としていました。。。


はい、私が悪いです。


確かにウィンドウズ(windows)環境では、大文字小文字を区別しませんでしたね。。。そんなの忘れてたし、まさかこんなことでつまずくなんて。。。。だから、CamelCaseとか複数形とか大嫌いだ。
ローカルはウィンドウズ、リモートはunix/linux系という人は多いかと思うので、覚書。


リモートは、Configure::write('debug', 0);にしているので、こうなったわけですな。
ここでデバックモードを1以上にすると以下のエラーがでて、間違いに気づきます。

Error: The layout file /home/hogehoge/hoge/cake/hoge/app/views/layouts/Inf….ctp can not be found or does not exist.

リモートで、あれっという現象にであったら、とりあえずデバッグモードを1にしてみると手がかりあるかも。


なお、アメリカのgoogleディスカッションをみると、似たような現象で、新たにアップしたモデルなどが動作しない場合は、キャッシュをクリアすると動いた事例もあるようです。お試しあれ。


cake1.2bのお話。

CakePHP規約ワードメーカー WordMaker for CakePHP Conventions

はてブ情報 はてブに登録 はてブ数 cakephpspok
CakePHPには、データベースのテーブル名や、クラス名、ファイル名に「規約」がさだめられています。CakePHP規約

しかし日本人にとっては、複数形だの、CamelCase*1など、全然なじみがありません。私なんぞ、womanの複数形をwomansにしてしまうような英語オンチです*2


なので、サイト構築しながら、命名にものすごく悩むわけです。プログラミングしながら、とてもよく間違えるわけです。
なので、それをサポートするページを作りました。私自身が必要なものです。


CakePHP 規約ワードメーカー WordMaker for CakePHP Conventions


これで、作りたい単語を入力すれば、テーブル名からクラス名から、自動的に作ってくれます。
もちろんCakePHPのinflector(語尾変化)クラスを使っていますので、Cakeウェイです。


ただ、これを作ったおかげで、CakePHPの単語変化にちょっとおかしな部分をみつけました。日本人からみておかしいだけで、英語圏の人にとっては普通なのかもしれません。また時間のあるときに書きたいと思います。


おまけですが、AJAXも勉強したかったので、AJAX化してあります。若干レスポンスが悪いかもしれませんが、ご容赦を。というか私以外には要のないサイトかもしれない。
CakeのAjaxヘルパーは優秀ですな~。あっというまにAjaxになっちゃったよ。
Javascriptなんて、全然知らないのに。


さらについでに、「この単語じゃないですか?」というsujestsuggest機能をつけました。アメリカyahoo.comのAPIを使用させていただいております。
こことリアルタイムで通信するので、若干レスポンスが重たいです。
しかし、もうちょっとたくさんのサジェストをしてくれるといいのだけれど、かなり字数を打ち込まないと、「~じゃないですか」がでてこない。
もっといい辞書APIをご存じの方がいれば、ぜひお教え下さい。

*1 : 英単語の最初の一文字が大文字で、残りは小文字の書き方

*2 : ただ単に頭が悪いというつっこみはしないで

1: gmataw 『最近CakePHPを勉強し始めて、いろいろGoogleで調べていたら「規約ワードメーカー」にたどり着きました。 便利に使わせても...』 (2010/01/31 25:23)

2: Avenir 『CakePHPをはじめたばかりなので、本当に助かります。 ちなみに、CakePHP 1.3.0では仕様変更があったみたいです。...』 (2010/05/05 14:11)

3: panlong_dragons 『ありがたく利用しております。 今さらながら、ビューファイル名は「アクション名.ctp」かもしれませんよね~』 (2012/02/17 17:38)

4: もぎゃ 『モデルのファイル名ってUpperCamelCase,singleじゃなかったでしたっけ? たとえばこの例だとIngredient...』 (2013/04/23 23:34)