トップページphp
1001コメント321KB

【PHP】フレームワーク CakePHP 11ホール目【v1.3】

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2011/02/16(水) 21:52:35ID:zCTGjUMq
CakePHPは、Ruby on Railsの概念の多くを取り入れた、Rails流の高速開発とPHPの機動性を兼ね備えたフレームワークです
CakePHPから派生したLithium(li3)も専スレできるまではここでどうぞ
質問するときはCakePHPのバージョンを書きましょう

※sage推奨
※質問時もsageること
※他フレームワークとの比較等はスレ違いです
テンプレは>>1-5くらい

■本家
http://www.cakephp.org/
APIドキュメント
http://api.cakephp.org/
the Bakery
http://bakery.cakephp.org/
CakeQs
http://cakeqs.org/
CheatSheet (PDF)
http://cakephp.org/files/Resources/CakePHP-1.2-Cheatsheet.pdf
github - cakephp
http://github.com/cakephp

■日本語公式
http://cakephp.jp/
フォーラム
http://cakephp.jp/modules/newbb/
cookbook(マニュアル)
http://book.cakephp.org/ja
0562nobodyさん2011/04/09(土) 14:26:08.69ID:???
質問です。

/model配下には各テーブルに対応したvalidationなどを作成すると思うのですが、
実装者が存在しないテーブルのmodel名でmodel.phpを作りました。

要件的に「動けばOK」なので特に問題は無いのですが、Cakeの規約に反しているように感じています。

テーブル:
files(web上にアップロードしたファイルのパスやファイル名を保持する。ここでDL可としたファイルのみ、ダウンロードなどが可能)
実装:
files.phpにはvalidation。upload機能の場合のみ、upload.phpを使用。

個人的にはfiles.phpにすべて記述すべきと思ったのですが、どうでしょうか。
0563nobodyさん2011/04/09(土) 14:53:58.71ID:???
>>560
vendorsは廃止になってないよ。

以前は、vendors/cssやvendors/img、vendors/js にファイルを置くと
webdir配下に置いてあるのと同じように使えてたけど、それが廃止になっただけ。
0564nobodyさん2011/04/09(土) 14:55:42.90ID:???
>>562
別に問題ないと思うけど
0565nobodyさん2011/04/09(土) 15:00:10.04ID:???
CakePHPは終わコン
0566nobodyさん2011/04/09(土) 15:02:11.37ID:???
>>562
その実装者の実装みてないから、良い実装かどうかはなにもいえないけど、
モデルを作ったことに関しては問題ないと思うよ。

この辺を読むとなにか分かるかもね。
http://www.1x1.jp/blog/2008/04/cakephp_model_6misinformation.html
http://d.hatena.ne.jp/hiromi2424/20101122/1290379655
0567nobodyさん2011/04/09(土) 16:44:49.74ID:???
>>566
>2. DBを使わないといけない(DB操作が無いと使えない)
なるほど。
テーブルに直結していなくてもいいのですね。controllerの肥大化は確かにまずいですね。
0568nobodyさん2011/04/09(土) 20:07:55.18ID:???
質問させて下さい。
コントローラのメソッドの引数が バリデーションに引っかかると消えてしまうので悩んでいます。

http://localhost/lists/additem/7
↓ バリデーションに引っかかると
http://localhost/lists/additem

cake bake で作られた edit メソッドではバリデーションに引っかかってもちゃんと引数を引き継いでいるんですが、イマイチ仕組みがわかりません。
どの辺りを調べれば良いかなど、アドバイスをお願いします。
0569nobodyさん2011/04/09(土) 20:13:14.37ID:???
>>568
よくわからんけど、URLが変化してるってなら、リダイレクトしてんじゃないの?
遷移・リダイレクトなしにURLが変化する事は流石にないし。
というかCakeがどうこうできる部分でもない。
0570nobodyさん2011/04/09(土) 23:04:19.28ID:???
>>556
なに、IDってauto_incrementじゃないとUPDATEできないの?
それ問題だろ。マジで。
0571nobodyさん2011/04/10(日) 00:14:09.48ID:???
質問させてください。
Tag hasMany Postの関係のモデルがあるのですが、
Tagのうち、Postと結びついているもののみを取得したい場合どのように検索するのが一番よいのでしょうか?
0572nobodyさん2011/04/10(日) 00:18:50.03ID:???
>>568
form->createのarrayに'url'を追加してみたらどうでしょう。
同じ問題を見たことがある
0573nobodyさん2011/04/10(日) 01:30:39.63ID:???
>>571
Tag hasMany Postって変わった構造だな。
まぁそれは置いといて、Tag側のテーブルにカラム追加しないと使えないけど、
belongsToアソシエーションのcounterCache使えば?
Postモデルの$belongsTo = array('counterCache' => true) して、
tagsテーブルにpost_countフィールド作れば良かったはず。
詳しくはぐぐれ。
0574nobodyさん2011/04/10(日) 02:04:25.16ID:???
>>573
TagとPostの名前を例に使ったのはちょっと不適切でしたね。
counterCasheの存在を知らなかったので、調べてみます。
ありがとうございました。
0575nobodyさん2011/04/10(日) 18:52:08.74ID:???
例えばmixiやモバゲーの規模のものを作るとしたらcakephpだとコントローラーはいくつくらいになりますか?

また一人で開発しようとする場合は何人日かかります?(デザイン抜きで)

そもそも、その規模のものはcakephpでは運用無理ですか?RoRとかのほうがいいのかな?
0576nobodyさん2011/04/10(日) 18:53:49.51ID:???
>>575
聞く暇あったら作れ

ソーシャルプラットフォームとしてのmixiやモバゲなら相当時間かかると思う
0577nobodyさん2011/04/10(日) 19:40:24.45ID:???
>>575
大規模アクセス前提としてるなら
Cakephp やめてRORへ行くべき
0578nobodyさん2011/04/10(日) 19:52:26.16ID:???
>>757
調子乗りすぎ
0579nobodyさん2011/04/10(日) 20:02:00.75ID:???
>>575
俺だったら1ヶ月あれば出来るよ。
運営出来るレベルのものになるかは別としてだが。。

0580nobodyさん2011/04/10(日) 21:04:02.20ID:???
>>575
規模なら結構作れると思うよ。俺も似たようなSNS作ってるし。

アクセス増加はキャッシュでどうにかなると思う。
Cakeのじゃなくてmemchachedを使うとか。
0581nobodyさん2011/04/10(日) 21:44:52.07ID:???
大規模って事だと、
CakeってDBのレプリケーションに本体レベルで対応してなよね?
Cakeは中・小規模向けだと思うから、mixi規模は無理じゃないかな。
機能だけそろえるってなら話は別だけど、
シンプルなSNSから発展していろんな機能がついてるから、
作るのはかなり時間かかると思うぞ。
開発者の能力にもよるだろうけど、普通に3桁人月じゃないかな。
0582nobodyさん2011/04/10(日) 23:46:27.64ID:???
モバゲーはアイデアと良質な絵が無いとつまらないと思う。
0583nobodyさん2011/04/11(月) 02:22:00.62ID:???
>>582
コンテンツの事まで言うと、
アバターなんかも3Dで作った物をgifに変換して・・・みたいにしてるみたいだし
cakeなんかで作る部分とは違う技術が必要だよね。
0584nobodyさん2011/04/11(月) 03:36:02.16ID:???
581がいうレプリケーションとかもプログラムで対応させる事じゃないな。
てか、Cakeで生成するファイルでDB分けられるんだから、
そういう負荷対策出来ると思うんだけど。
0585nobodyさん2011/04/11(月) 10:36:06.39ID:???
List に SubList をアソシエーションしてるんですが、
List, SubList にそれぞれ no という項目あって、それぞれを no 順で取得したいのですが、
List から find('all') で取得した場合 List は no 順になっても SubList が id 順になってしまいます。
以下のように取得して View に渡しているんですが、いいやり方ありますでしょうか?
$this->set('lists', $this->List->find('all', array('order' => array('List.no, List.id DESC'))));
0586nobodyさん2011/04/11(月) 11:13:07.76ID:???
order= > array('List.no' => 'DESC', 'SubList.no' => 'DESC')
0587nobodyさん2011/04/11(月) 16:45:08.99ID:???
更新系と参照系を分けるとかならcakePHPでできるけど、
http://log.ryti.ch/items/view/3773
0588nobodyさん2011/04/11(月) 18:51:32.41ID:???
既存のDB2流用しなくちゃいけなくて
結局SQL書いてるわ....
0589nobodyさん2011/04/11(月) 18:52:42.64ID:???
>>586
それはやってみたんですが、
$this->List->find('all', array('order' => array('ListSub.no, ListSub.id DESC')
とすると ListSub なんてないと怒られてしまいます。
0590nobodyさん2011/04/11(月) 19:03:42.57ID:???
いやだから
array('order' => 'List.no DESC, ListSub.id DESC')

array('order' => array('List.no' => 'DESC', 'SubList.id' => 'DESC'))
のどっちかにしろって話じゃないの?
0591nobodyさん2011/04/11(月) 19:29:41.23ID:???
>>590
何度もごめんなさい。
書き方変えてみたけどダメでした。

List から id はとってこれるけど、
$this->List->find('all', array('order' => array('List.id' => 'DESC')

こうすると ListSub.id なんてカラムはないよと言われるんです。
this->List->find('all', array('order' => array('ListSub.id' => 'DESC')
SQL Error: 1054: Unknown column 'ListSub.id' in 'order clause'

List は ListSub を hasMeny、ListSub は List を belongsTo でそれぞれ関連づけています。
まだモデルの仕組みなどわかってない部分が多いので、ここを調べろなどのアドバイスでもお願いします。
0592nobodyさん2011/04/11(月) 20:45:04.42ID:???
>>588
悩むくらいならそれもありだと思う。

ナンバリングのために、あるテーブルにsaveした場合の処理は、
sqlでUPDATE文書いた。
0593nobodyさん2011/04/11(月) 21:19:28.81ID:???
>>591
たぶんやりたいことは

this->ListSub->find('all', array('order' => array('ListSub.id' => 'DESC')

なんじゃないか
0594nobodyさん2011/04/11(月) 21:41:28.44ID:???
モバゲーのソーシャルゲームCakePHPで作ったよ。
コントポーネントの数がすごいことになった。
0595nobodyさん2011/04/11(月) 21:51:47.54ID:???
>>594
おお、そういう情報もっと書いてくれ。どのくらいになった?
0596nobodyさん2011/04/11(月) 23:27:03.36ID:???
コンポーネントなんかそんなに書くか?
05975132011/04/11(月) 23:27:39.13ID:???
>>515
親切なレスありがとうございます。
パーミッションは問題無くて、単に拡張子が大文字になってただけだった。

すぐにお礼レスしたかったけど、規制かかって書き込めず、忘れてしまってた。
0598nobodyさん2011/04/12(火) 00:32:09.98ID:???
>>595
数えたら50〜60ぐらい。たいしたことなかった。
コントローラも同じくらい。

ゲームはロジックが複雑だから、コントローラにごちゃごちゃ書きたくなくてコンポーネントに書いた。
0599nobodyさん2011/04/12(火) 01:03:22.27ID:???
どんくらいアクセスあるのかしらんけど
Cakeだと重くね?
0600nobodyさん2011/04/12(火) 01:03:42.14ID:???
>>598
それだけ読んだら動作重くならないか?
0601nobodyさん2011/04/12(火) 02:05:11.25ID:???
てす
0602nobodyさん2011/04/12(火) 02:31:07.71ID:???
重いね。許容範囲内ではあるが、次からはCake使わないと思う。
0603nobodyさん2011/04/12(火) 10:52:30.89ID:???
作るものにもよるけど、ボトルネックはほとんどDBなので
フレームワークを変えても重いのはあまり変わらない事が多い気がする。
で、対処の方法もキャッシュ効かせたりとかで、やることも変わらない。
0604nobodyさん2011/04/12(火) 11:41:59.99ID:???
重いのがコンポーネント数十個になってるからとかモデルが薄すぎるんだろう。
それでcakeが悪いとか…頭ごなしに批判する奴は大抵こういうふうに理解が浅いよな。
0605nobodyさん2011/04/12(火) 12:01:58.45ID:???
頭ごなしに批判してないと思うが。
それにFW使ったら重くなるのは当然だろ。
0606nobodyさん2011/04/12(火) 12:49:32.70ID:???
>>597
解決して何よりです。
0607nobodyさん2011/04/12(火) 12:52:39.39ID:???
コンポーネント数十個っても常に全部使ってるわけないだろ
だいたい1コントローラあたり数個使ってる
0608nobodyさん2011/04/12(火) 17:08:21.81ID:???
自動テストで質問です。
fixtureの$recordsに配列でデータを記載しておくと、テストごとにこの$recordsの値で
テーブルが初期化されます。
この$recordsをテストごとに切り替えたいのですが、どのようにすればよいでしょうか?
たとえばtestAは$records、testBは$records2を使う、といった具合です。
0609nobodyさん2011/04/13(水) 05:21:58.13ID:???
bakeでつくったコントローラは $this->Session を使えるのに、
自分でつくったのは、 var $components で読み込まないと使えない。
bakeで自動作成されたコードはどこでSession読み込んでるんだろう??
0610nobodyさん2011/04/13(水) 11:38:58.52ID:89duiIHJ
あともう1つ、app_error.phpをつくって、
error404をオーバーライドすると、HTTP/1.1 200 OKが帰ってくるようになる。

app/app_error.php
<?php
class AppError extends ErrorHandler {
  function error404($params) {
    extract($params, EXTR_OVERWRITE);
    $this->error(array(
      'code' => '404',
      'name' => 'Not found',
      'message' => sprintf(__("The requested address %s was not found on this server.", true), $url, $message)
    ));
    $this->_stop(1);
  }
}
?>

このオーバーライドしたerror404を消したり、
parent:error404($params);
とかにすると、404 Not found が帰ってくるようになる。
バグかな?

関数の中身は、
cake/console/error.php の error404 をまるまるコピーしてます。
0611nobodyさん2011/04/13(水) 11:51:22.60ID:89duiIHJ
すまん勘違いだった。

<p class="error">
<strong><?php __('Error'); ?>: </strong>
<?php printf(__('The requested address %s was not found on this server.', true), "<strong>'{$message}'</strong>"); ?>
</p>

こうなってたから
$this->cakeError('error404' array('message' => '削除されてるよ'));
みたいにやってた。
HTMLのmessageはurlのことで、
PHP側のmessageはステータスメッセージのことなのな。
ややこしすぎワロタ
0612nobodyさん2011/04/13(水) 23:16:26.44ID:???
modelについて質問です。

UPDATE時に、同一テーブルの現在の値を取得する必要ができました。
model.php内で this->$date とやってももちろんダメでした。

sqlを書いてクエリーとして得た結果をarrayに代入することで要件は満たせたのですが、
何かもっと良いスマートな方法は無いでしょうか?
0613nobodyさん2011/04/13(水) 23:28:39.98ID:JM0N9TIZ
モデルのバリデーターで一つの項目に
複数のバリデーションをかける場合、
バリデートする順番を指定したいのですが、
できますでしょうか?

例えばログインIDに対して半角英数チェック・文字数チェック
・独自バリデーションの3つをする場合で、
独自バリデーションではDBに値を見にいって実際に存在するかを
チェックするとします。

その際に半角英数チェックと文字数チェックの前に
独自バリデーションが走ってDBにアクセスしに行っちゃうと
SQLエラーになってしまいますよね。

その他にもバリデーションに優先順位を付けたいと思う場面って
多々あると思うんですが、そのような方法があれば教えて下さい。
0614nobodyさん2011/04/13(水) 23:56:57.25ID:???
>>613
出来ます。

validationのarrayに実行したい順番で代入すれば、上から順に処理します。
例題や公式ページに1項目に対しての複数のvalidation実装例は載っているはずです。
0615底辺2011/04/14(木) 09:26:19.34ID:???
>>583
へー!そうなんだ。
0616nobodyさん2011/04/16(土) 00:30:56.91ID:IZGr1QKI
auto_increment属性の付いていないIDのテーブルでも
Model::save()でINSERTやUPDATEできますか?
0617nobodyさん2011/04/16(土) 00:37:26.03ID:???
んなもんやってみるしかねーだろ。
あまり想定はされてなさそうな事だから、こんなとこで聞くよりも確実だぞ。
そういえば確か、ユニークIDを生成して、それを主キーの値に使う方法があった気がするな。
ユニークIDは確かStringだったと思うぞ。
0618nobodyさん2011/04/16(土) 16:57:45.01ID:???
例えですが、ブログチュートリアルの削除リンクにCSRF対策を行いたい場合、
どんな方法で実装すればいいのでしょうか?

adminページを作ってアクセス制限するか、投稿フォームなどと同じようにトークンを使うか
という方法を考えましたが他に一般的な方法やライブラリなどあれば教えてください
0619Perl忍者lvl4 ◆M5ZWRnXOj6 2011/04/16(土) 17:00:51.46ID:uU0OblS5
 発 者 同         . 。_   ____           争
 生 同 .じ     .    /´ |  (ゝ___)          い
 .し 士 .レ      .__/'r-┴<ゝi,,ノ   ro、      は、
 .な で .ベ      ∠ゝ (ゝ.//`   ./`|  }⌒j
 .い し .ル        } ⌒ /`ヽ、_∠l,ノ ・ヽ´
 .! ! か の       /  ´..:.} >、、___,  .r、 ソ、`\
             /   ..:.:.}   /   |∨ ` ̄
            /   ..:.:./    |   丶
           / _、 ..:.:.:.{    .{.:.:.   \
          {   ..:Y  .ゝ、   {.:.:.:.:.    ヽ
          |、  ..:/ 丿 .:〉   >.- ⌒  .  ヽ
          / {. ..:./ ソ ..:./  .(    ..:.:.:`  ..:}
         ./..:.:}.:.:./ ヘ、 ..:./   .\ ..:.:r_,ノ、.:.:}
        ./..:.:/|.:/   {.:./     X.:.:}.}   X X
        /..:.:/ .}.:|    }:/       .Y丶ヽ  Y.:Y
  . __/.:/ { }  《.〈、     _,,__>.:》丶   Y.:\
  /.:.:.:.:.::/   !.:.:ゝ  ゝ.:. ̄ヾ ´:.:.:.:.:.:.:.:.:ヾゝ   \.: ̄>
0620nobodyさん2011/04/17(日) 11:50:24.05ID:???
>>618
beforeFilterでログイン時の情報をセッションで持ち回る。
0621nobodyさん2011/04/18(月) 22:09:29.52ID:???
更新(UPDATE)の条件で、point=point+1
みたいな書き方ってCakePHPではどうすればいいのでしょうか?
0622nobodyさん2011/04/18(月) 22:47:14.55ID:???
updateAllとか
0623nobodyさん2011/04/18(月) 23:24:01.55ID:???
conditionsの書き方はどうするのでしょうか?
0624nobodyさん2011/04/18(月) 23:33:50.50ID:???
$field = array('Model.point' => 'Model.point + 1');
$cond = array('Model.id' => intval($id));
$this->Model->updateAll($field,$cond);

こんな感じ?
0625nobodyさん2011/04/19(火) 00:03:43.86ID:???
いいと思う。

もちろんpointは数値列だよね。
0626nobodyさん2011/04/19(火) 01:32:17.04ID:???
アクセスしてきた携帯端末の情報をコントローラーとビューで使うのですが、
AppControllerのbeforeFillterでConfigure::write()を使って書きこんで、
コントローラとビューでConfigure::read()で読み込むのって
使い方合ってますかね?
0627nobodyさん2011/04/19(火) 10:29:11.63ID:???
controllerからviewに値を渡すのは$this->setでしょ
0628nobodyさん2011/04/19(火) 18:32:47.47ID:???
$this->addじゃないのが腹立つ
setだとキー追加じゃなくて完全に代入されるイメージ
app_controllerに作るか
0629nobodyさん2011/04/19(火) 22:51:20.45ID:???
Cakeはコントローラ名に使えない名前が多くて罠が多いな
どこかに書いといて欲しい
0630nobodyさん2011/04/19(火) 22:53:32.33ID:???
注文テーブルをorderにしてしまい、トラぶったことはある
0631nobodyさん2011/04/19(火) 23:14:41.15ID:???
なるほど。
0632nobodyさん2011/04/20(水) 00:31:33.15ID:NKIgYW4j
Formヘルパーでググると
Form::input()を使ってる記事が多いんですが、
これって1.3でも使って良いメソッドなんでしょうか?

あと、1.3で<input type="image">を出力したいんですが、
Formヘルパーのどのメソッド使えばいいですかね?
0633nobodyさん2011/04/20(水) 01:01:40.71ID:???
html->imageでonclick="javascript.js"
0634nobodyさん2011/04/20(水) 01:11:12.04ID:???
>>633
ありがとうございます。
Formヘルパーではないのですね。
Form::inputあたりをつかうのかと予想していたのですが、
1.3のCookbookにもメソッドが載ってないんですよね。
かなり謎です。
0635nobodyさん2011/04/20(水) 09:42:08.04ID:???
>>632
ググルのもいいけど、cookbook見てみたら。
http://book.cakephp.org/ja/view/1383/%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0

input使うと、テーブル定義をみて自動でinputかtextareaとか分けてくれる。
0636nobodyさん2011/04/20(水) 10:15:29.58ID:???
>>634
マニュアルは英語版から読むようにしよう。
form->submitに画像のURLを入れれば自動でできる。

echo $this->Form->submit('ok.png');

<div class="submit"><input type="image" src="/img/ok.png"></div>
0637nobodyさん2011/04/20(水) 14:51:42.93ID:???
モデルとビヘイビアに同じ名前の関数がある場合、$this->関数名で呼ぶとモデルの方が呼ばれるようですが、
ビヘイビアの方を呼びたい場合はどう書けば良いのでしょうか
0638nobodyさん2011/04/20(水) 23:32:04.82ID:???
htmlヘルパーでlink要素ってどうやって書いたらいいんでしょうか
具体的には<link rev="made" href="mailto:foo@bar.jp" />ってのを書きたいんですけど
html->linkとやるとa要素になってリンクが張られてしまいます
0639nobodyさん2011/04/21(木) 00:46:29.17ID:fExhpbbE
formヘルパーでラジオボタンとかチェックボックスとかにcheckedの設定をすると
バリデーションエラーでその画面に戻った時にその値に戻っちゃうんですが
これってどうしたらいいですかね?
0640nobodyさん2011/04/21(木) 01:42:12.03ID:???
>>638
英語版cookbookにそれこそ載ってるよ。

もしくはGoogle検索「CakePHP a href」とかやればいくらでも実例が出てくる
0641nobodyさん2011/04/21(木) 01:43:38.32ID:???
実装してて分かったのは、タグ名が分かったら、
本来のHTMLで書きたい要素を
arrayに
'name' => 'value'
で書いてブラウザーで開いてソース見れば、解釈されているかどうか分かって楽だった
0642nobodyさん2011/04/21(木) 13:32:49.30ID:???
それならもうHTMLで書けよ
0643nobodyさん2011/04/21(木) 22:02:14.62ID:???
書き方は合わせたい。
array(
"key" => "value"
)
0644nobodyさん2011/04/21(木) 23:30:40.48ID:???
>>640
CakePHP a hrefでぐぐったらリンクのことしかでてこないんですが
0645nobodyさん2011/04/22(金) 00:04:27.08ID:???
http://cakephp/posts/edit
これを
http://cakephp/foo/posts/edit
http://cakephp/bar/posts/edit
とカテゴリで分けたい。
こういう場合はやっぱり FooController と BarContoroller してルーティング設定で命名規則無視するしかないですか?
できれば PostController のみで終わらせたいんだけど、
admin_edit で admin/edit になるみたいに foo_edit で foo_edit にする方法ってあります?
ちなみに admin ルーティングも残しておいてさらに追加したいんです。

0646nobodyさん2011/04/22(金) 00:19:11.61ID:???
>>645
foo/posts/edit とbar/posts/edit はやることが違うの?同じ事をやるの?
fooとかbarは種類が決まってるの?
0647nobodyさん2011/04/22(金) 00:25:03.43ID:???
>>645
mod_rewriteで何とかしろや。
0648nobodyさん2011/04/22(金) 00:43:08.35ID:???
>>646
やることはほとんど一緒です。
ただ読みに行くデータが違います。
テーブルごと分けるか、種類を分けるフィールド追加して区別するかはわかりませんが、
とりあえずカテゴリごとの動作ということにしたいんです。
0649nobodyさん2011/04/22(金) 01:19:33.66ID:???
>>648
なんとかRouterでPostControllerのedit に誘導するのがいいと思うけどね。
0650nobodyさん2011/04/22(金) 10:38:38.24ID:???
>>644
すんません、HTMLヘルパーに自分で書く必要がありますね。

cake/libs/view/helpers/html.php

function link
を参考にして、
自分で a が付かない<link rev=〜を出力するように頑張ってください。
0651nobodyさん2011/04/22(金) 12:48:06.33ID:???
iモードシミュレータIIで携帯フォームの動作確認をしているのですが、
モード7の時はSJISで送信され、モード8の時はUTF-8で送信されます。

Cakeでは、ビューをUTF-8で作り、出力時の文字コードは
<?php echo $html->charset('SJIS'); ?>
と言う感じでShift_JISにしています。

ただ、$form->createのencodign(accept-charset)はutf8のままなので、
UTF-8としてデータが送信されてくると思うのですが・・・原因が分かりません。

古い端末だと文字コード変換が上手く行かないとかあるのでしょうか?
直接Cakeの質問と違うかも知れませんが、分かる方いたら教えて下さい
0652nobodyさん2011/04/23(土) 00:32:58.36ID:???
CakePHPの1.3でDBの更新処理をSQLで直書きしなくてはならなくなったのですが、
普通のINSERT文をModel::execute()で実行しようとするとシンタックスエラーに
なってしまいます。
でもちゃんと正しいINSERT文なんです。
ちなみにModel::query()で実行すると正しく実行されます。
Model::execute()って何か問題があるのでしょうか?
0653nobodyさん2011/04/23(土) 01:09:09.71ID:???
どこのexecute()が実際呼ばれてるか
追いかけてみたらいい
0654nobodyさん2011/04/23(土) 01:43:52.45ID:???
CakePHPのdebug出力してみたら?
0655nobodyさん2011/04/23(土) 05:42:00.71ID:???
モデルとビヘイビアに同じ名前の関数がある場合、$this->関数名で呼ぶとモデルの方が呼ばれるようですが、
ビヘイビアの方を呼びたい場合はどう書けば良いのでしょうか
0656nobodyさん2011/04/23(土) 06:34:39.22ID:???
$this->Behaviors->BehaviorName->method($this, ... );
0657nobodyさん2011/04/23(土) 06:50:55.20ID:???
ありがとう
そういうことをちゃんとマニュアルに書いておいてくれればいいのにと思います
0658nobodyさん2011/04/23(土) 10:16:16.61ID:???
マニュアルに書くレベルのものとそうではないものもあると思うけどね。
マニュアルにない使い方するときは、ソースコード追ったほうがいいよ。
0659nobodyさん2011/04/23(土) 11:25:02.93ID:???
hasMeny や belongsTo で指定のテーブルだけ取得することは可能でしょうか?
下の例では Data に Category を belongsTo して、
Category は Auther を belongsTo、Data を hasMany してます。

$this->Data->find('first', array(
'conditions' => array('Data.id' => $data_id),
'recursive' => 2
));

Array(
[Data] => Array(
[fields] => 'value',
[Category] => Array(
[fields] => 'value',
[Auther] => Array(
[fields] => 'value'
)
[Data] => Array(
[fields] => 'value'
)
)
)
)

これで find すると data['Data']['Category'] 以下にもう一度 Data を取得してしまいます。
data['Data']['Category']['Auther'] は欲しいので、アソシエーションを利用してData を読まずに Auther だけ取ってくる方法はありますか?
0660nobodyさん2011/04/23(土) 11:26:52.00ID:???
>>659です。
読みにくくなってしまったので・・・。

$this->Data->find('first', array(
 'conditions' => array('Data.id' => $data_id),
 'recursive' => 2
));

Array(
 [Data] => Array(
  [fields] => 'value',
  [Category] => Array(
   [fields] => 'value',
   [Auther] => Array(
    [fields] => 'value'
   )
   [Data] => Array(
    [fields] => 'value'
   )
  )
 )
)

よろしくお願いします。
0661底辺2011/04/23(土) 11:34:30.80ID:???
>>660
containerビヘイビアを使いなさい
0662nobodyさん2011/04/23(土) 12:18:02.93ID:???
>>661
ググっても出てこないんですが、サードパーティですか?
もう少し詳しくおしえてもらっていいですか?
■ このスレッドは過去ログ倉庫に格納されています