【PHP】フレームワーク CakePHP 11ホール目【v1.3】
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2011/02/16(水) 21:52:35ID:zCTGjUMqCakePHPから派生した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
0720nobodyさん
2011/05/02(月) 23:48:36.39ID:???俺が思うに、それは管理画面だけの話で、
アプリ側やアクセスが頻繁に発生する部分では、
限りなくピュアPHPで自作してると思うよ。
0721nobodyさん
2011/05/03(火) 01:54:20.44ID:???0722nobodyさん
2011/05/03(火) 13:16:24.74ID:???いつの間にかCake風のプログラミングしてることあるよな
0723nobodyさん
2011/05/03(火) 13:54:27.72ID:???0724nobodyさん
2011/05/03(火) 14:06:56.07ID:???PHPあんまり知らないJavaはよく知ってる人が、ぱっと見で
「あ、これ分かりやすいね」と言ってた。
0725nobodyさん
2011/05/05(木) 03:39:50.22ID:???確認画面で画像を確認した後、saveってできるのかな?
やっぱりそこは自作しないといけないのかな
0726nobodyさん
2011/05/05(木) 10:09:53.55ID:???Symphonyに先行されたくはないよな
0727nobodyさん
2011/05/05(木) 13:07:28.09ID:???それはあなたが参加チームに入ればいい。
あなたも参加チームに加わって、2.0のバージョンの開発スピードを速くしましょう、ボケ。
0728nobodyさん
2011/05/06(金) 00:21:29.94ID:???app_controller.phpに「var $autoLayout = false」を指定してないと、
エラーページにもレイアウトが使用されるんだな。
会員専用ページとか、レイアウトに「default.ctp」を使用してたら
これが読み込まれるから大変な事になる
0729nobodyさん
2011/05/06(金) 20:26:56.51ID:aIuVNDEL$this->set('foo', 'bar');
ってやってビューで$fooでbarが出るようにできたんですけど、
このfooを配列にしたいんですけどどう入力したらいいんでしょうか
$this->set('foo', 'bar');
$this->set('foo', 'bar2');
とやったらただ$fooが上書きされただけで配列にはなりませんでした
0730nobodyさん
2011/05/06(金) 20:30:43.07ID:???0732nobodyさん
2011/05/08(日) 16:57:22.50ID:???>PEARのののの
なんで、尻取りRock'n Rollみたいなタイトルになっとるんかね?
0733nobodyさん
2011/05/10(火) 22:38:37.80ID:???http://www.devshed.com/c/a/PHP/7-PHP-Frameworks-Tested-For-Speed/
0734nobodyさん
2011/05/11(水) 17:51:03.34ID:???今まで使った事無かった機能とかいろいろ使ってみて勉強になるわ。
やっぱ実益を兼ねると捗るな。
0735nobodyさん
2011/05/11(水) 18:08:06.21ID:???みんなのDMM様とかね。
0737nobodyさん
2011/05/12(木) 00:21:57.52ID:RDtqq4sqエラーハンドリングするのって
$res = $this->Model->save();
if ($res === false) {
// エラー処理
}
って感じでいいですかね?
0738nobodyさん
2011/05/12(木) 01:54:00.04ID:???// エラー処理
}
これじゃ駄目なのか?
delete()は場合によっちゃgetAffectedRows()がいる。
0740nobodyさん
2011/05/12(木) 08:57:26.67ID:i1t11ChC何となくスルーしてきたんだけど、
例えば、
・コントローラ内からモデルの関連モデルをとり回す
・モデルから関連モデルをとり回す
時に、$this->Post->User とか、モデル内なら $this->User とかやるけど、
これって何が嬉しいの?
関連モデルも取ってくるだけなら、$recursiveとかunbindModel, bindModel やContainableビヘイビアとか
あるわけだし、直接関連しないモデルとの突き合わせや何かに使うならClassRegistry::init('Model')でいいわけじゃないすか
$this->Post->Comment とか、 $this->Post->User とか使って美味しい場面ってどこなんですか?
初心者のつもりじゃなかったけど、この部分だけ何年もスルーしてました。
0741nobodyさん
2011/05/12(木) 14:23:52.63ID:???設計として関連モデルまでのアクセスを基本とすることを良しとすることもあるのかも。
他にもシュガーシンタックスとか色々推測はできるけど、コアチームに聞いたほうが早い
かもしらんね。
こういう話題はフォーラムとかに振ったほうがいいんじゃないかなぁ。
0742nobodyさん
2011/05/13(金) 00:53:55.24ID:bOFdFGkgある項目で半角英数のみを許可するというチェックで
入力がされなかった場合はスルーさせたいのですが、
以下のような感じでいいでしょうか?
var $validate = array(
'id' => array(
'alphaNumeric' => array(
'rule' => 'alphaNumeric',
'message' => '半角英数で入力して下さい'
)
),
'pass' => array(
・・・
)
);
0745nobodyさん
2011/05/13(金) 20:45:10.04ID:???配列のConfigに”[timeout]=>10”とあります。
これってタイムアウトの秒数じゃないですよね?
あと、セッションタイムアウトになったら自動的にログインフォームに戻りますが、
またログインするとそれまで、↑になる前のページが表示されます。
これって単にリファラをチェックしているだけなのでしょうか?
0746nobodyさん
2011/05/15(日) 03:29:24.39ID:???あぁRoR系ってこの程度の物だったのねって感じ。
全然ダメダメで安心した。
俺の作ったフレームワークの方が万倍良いわw
0747nobodyさん
2011/05/15(日) 09:56:30.32ID:???0748nobodyさん
2011/05/15(日) 11:33:35.65ID:???0749nobodyさん
2011/05/15(日) 11:44:06.73ID:???0750nobodyさん
2011/05/15(日) 13:24:31.86ID:???0751nobodyさん
2011/05/15(日) 22:23:01.76ID:???746もそういうことかな?
0752nobodyさん
2011/05/16(月) 01:58:31.58ID:???自分で隅から隅までわかっているライブラリのほうが良いと感じる
当たり前といえば当たり前の話です
0753nobodyさん
2011/05/16(月) 02:09:10.52ID:???あえて言えばアンチパターンを学んだね。
ActiveRecordなんか最悪だぜ。
0754nobodyさん
2011/05/16(月) 03:59:25.37ID:???0755nobodyさん
2011/05/16(月) 13:05:48.45ID:Buwzzl2BCake真似てDispacherとかなんやらかんやら複雑に創り上げた黒歴史の俺俺フレームワーク思い出すからやめろ・・・
0756nobodyさん
2011/05/16(月) 13:23:10.09ID:???0757nobodyさん
2011/05/16(月) 16:44:54.09ID:???ifやissetばかりのコードになるんだが、みんなはどうしてる?
if (isset($this->data['User']['name'])) {
if ($this->data['User']['name'] <> "") {
echo $this->data['User']['name'] . 'さん';
}
}
みたいな。画像があるか無いかのチェックならもっと複雑になる。
俺の書き方が悪いかもしれないけど、良い書き方はないかな?
ちなみにめんどくさい時は@を付けてる。
0758nobodyさん
2011/05/16(月) 18:26:56.20ID:???PHP5.3以上限定だったっけな
0759nobodyさん
2011/05/16(月) 18:47:35.88ID:???0762nobodyさん
2011/05/16(月) 19:48:08.88ID:???普通にCakeのコードを書けば、データの入力有無に関わらず
配列の要素だけは最低限存在するんじゃない?
もしも場合によって要素が無いというケースを作ったのであれば、
そこは例外にならないようチェックを入れれば良いし。
0763nobodyさん
2011/05/16(月) 20:39:43.96ID:???第一引数の&$modelにもよく引っかかるし
なんでこんな実装になってんのよ
0764nobodyさん
2011/05/16(月) 23:05:12.61ID:???まさかいつも直接ビヘイビアのメソッド呼び出してるわけじゃないよな?
0765nobodyさん
2011/05/17(火) 01:45:48.69ID:p7ZABAr6Model::save()使えないんだけどその場合どうしたらいいですか?
1)他のメソッドを使う
2)Model::find()等でIDを取得した後Model::save()を使う
0766nobodyさん
2011/05/17(火) 02:09:58.52ID:???0767nobodyさん
2011/05/17(火) 02:25:59.11ID:???trueであることと、空文字列でないことをチェックするなら
isset()じゃなくて、!empty()を使えば一行で済む
<?php
$str = '';
var_dump (isset($str)); // true
var_dump (!empty($str)); // false
0768nobodyさん
2011/05/17(火) 08:21:09.15ID:???基本はIDを元に更新するけど、フラグや日時一括更新の場合など、場合にも拠る。
0769765
2011/05/17(火) 08:31:56.73ID:???つまり2)ってことですかね。
基本UPDATEはIDを元にするけどModel::updateAll()を使えば
ID以外でもUPDATEできるということですね。
ありがとうございます!
firstとかIDベースのじゃなくてallとかlistだとarray()が返るとおもた。
0772nobodyさん
2011/05/17(火) 12:30:13.80ID:???指定配列があるかどうかって書いてるから、isset使ってるんだろ?
お前さんのは$strを最初に書いてるじゃん。
0773nobodyさん
2011/05/17(火) 12:47:52.65ID:???isset と empty の挙動の違いは頻出ネタだと思うが。
つまり、こう書けるってこと。
if (!empty($this->data['User']['name'])) {
echo $this->data['User']['name'] . 'さん';
}
0774nobodyさん
2011/05/17(火) 13:19:33.25ID:???0775nobodyさん
2011/05/17(火) 13:21:09.79ID:???名前に0を入れる奴がいないとも限らないぞw
0776nobodyさん
2011/05/17(火) 13:57:44.20ID:YbRN4g9bでも判断してるのは$this->dataだけだし、emptyでもよさそうだな
0777nobodyさん
2011/05/17(火) 14:19:22.66ID:???if (checkData($this->data)) {
echo $this->data['User']['name'] . 'さん';
}
みたいな。
0778nobodyさん
2011/05/17(火) 14:20:22.87ID:???0779nobodyさん
2011/05/17(火) 14:29:36.21ID:???0780nobodyさん
2011/05/17(火) 17:24:54.66ID:ceh4vxWUempty('0')はfalseなのに
たまわらんわ
0781nobodyさん
2011/05/17(火) 18:03:41.28ID:???0だと変数の型がintegerで'0'だとstringだから。
ちなみにfalseはbool型の0。
0782nobodyさん
2011/05/18(水) 23:55:26.02ID:M1/yO2iL以下の例だとUser.sexの最初の値は$res[0]['DECODE(User']['sex']の中に入ってきたりします。
この現象を回避する手立てはあるのでしょうか?
$params = array(
'fields' => array(
'User.id',
"DECODE(User.sex, 1, '男', 2, '女')"
),
・・・
)
$res = $this->User->find('all', $params);
0783nobodyさん
2011/05/19(木) 00:00:58.47ID:???1.2とかだったらasで名前指定すればOK、ただしUserの配列の中に入れることはできない
0784nobodyさん
2011/05/19(木) 13:25:40.80ID:hw1vryEvvar $hasMany = array('Stock');
}
これで注文テーブルから注文レコードとると、
注文詳細レコードも一緒にとってくるようになったんだけど、
注文詳細レコードから、商品レコードも一緒に自動で取りたい場合はどうしたらいいんだろう。
1階層?しか自動でとってこないのかな
0785nobodyさん
2011/05/19(木) 14:05:27.71ID:???他モデルの設定が分からんからなんとも言えないけど
マニュアルは読んでやってみたけどできなかったっつう話?
0787nobodyさん
2011/05/19(木) 18:32:06.41ID:???テーブル設計が分かってないけど
recursive使えばいいんじゃない?
$this->Model->recursive = 2;
0788nobodyさん
2011/05/19(木) 20:00:43.27ID:???0789nobodyさん
2011/05/19(木) 23:51:36.35ID:???recursiveを使えば取得できるけど、joinされたSQLが発行されるわけではない。
パフォーマンスを考えれば自前でjoinすべき。
0790nobodyさん
2011/05/20(金) 00:27:57.20ID:???とたんにSQL書き始めちゃうみたいになるよね。
コントローラでSQLって書いちゃ駄目だろとか思う。
0792nobodyさん
2011/05/20(金) 00:54:14.48ID:???beforeValidateに以下のように書きました。
function beforeValidate(){
if (isset($this->data[$this->name]['tel'])) {
$this->data[$this->name]['tel'] = mb_convert_kana($this->data[$this->name]['tel'], 'rnask', 'UTF-8');
}
return ;
}
しかし半角に変換されません。何か間違っているのでしょうか?
ちなみに、コントローラーでバリデーションを実行する前に
$this->Model->set($this->data);
こうしてます。
0793nobodyさん
2011/05/20(金) 01:54:51.61ID:???>この関数は true を返さなければなりません。
>そうでない場合、現在の save() の実行が中断されます。
でないの?
0794nobodyさん
2011/05/20(金) 03:11:47.64ID:???return ; にしているところを return true; にしても変化はありません。
全角が半角になりません。
また、確認画面を入れてますので、saveでの動作ではありません。
$this->Model->set($this->data);
if (!$this->Model->validates()) {
$this->set('error', 'エラー');
}
みたいにしています。
0795nobodyさん
2011/05/20(金) 08:35:02.16ID:???これって2階層以上になるとjoinしなくなるってわけじゃないよな?
cakeのモデルの結びつけは全て単に個々のレコードをselectしてるんだよな?
0796nobodyさん
2011/05/20(金) 08:51:23.08ID:???はじめからORマッピング使うからそうなる。
フレームワークのDBアダプター使えば全てのDBサーバに最適なクエリが発行できると
思ってる奴多いけど、最適なクエリはDBサーバによって書き方が異なるのだ。
って、ねーちゃんが言ってた。
0797nobodyさん
2011/05/20(金) 09:52:43.86ID:???1階層目まではjoinされる。
2階層目以降はjoinされない。1階層目のデータをキーに、複数のSQLが実行される。
0798nobodyさん
2011/05/20(金) 10:10:25.55ID:???FooとBarがそれぞれ3つのHogeを持たせるため、
Foo、Barそれぞれに hoge_id, hoge1_id, hoge2_id カラムを作成して関連づけました。
これでHogeをfindで取得した場合、
Array
(
[0] => Array
(
[Hoge] => Array(~)
[Foo] => Array(~)
[Foo1] => Array(~)
[Foo2] => Array(~)
[Bar] => Array(~)
[Bar1] => Array(~)
[Bar2] => Array(~)
)
)
こんなふうになるんですが、(foreignKeyごとにエイリアス名を変えています)
これを
[Foo] => Array(
[0] => Array(~)
[2] => Array(~)
[1] => Array(~)
)
こんな感じに取って来れる方法はないでしょうか?
もしforeignKeyを分ける以外にいい方法があればそちらも教えて下さい。
0799nobodyさん
2011/05/20(金) 10:37:34.40ID:???0800nobodyさん
2011/05/20(金) 16:16:52.10ID:haTOk0oR0801nobodyさん
2011/05/20(金) 19:43:16.98ID:???これでツリー式のデータを取得できますが、
それを出力する方法で悩んでます・・。
目的はセレクトメニューのoptionに入れたいのですが、
何か良い参考ページかやり方はないでしょうか?
0803nobodyさん
2011/05/21(土) 00:18:07.82ID:/xyh+Ud4しようとすると本当に面倒くさい。
もう面倒だからquery()でSQL直着書きしちゃうんのってアリ?
0804nobodyさん
2011/05/21(土) 00:27:59.30ID:???ほとんどはcontainableビヘイビア使ってなんとかなってるけどなー
0806nobodyさん
2011/05/21(土) 03:26:01.22ID:???0807nobodyさん
2011/05/21(土) 10:05:49.32ID:???0808nobodyさん
2011/05/21(土) 10:10:24.97ID:???0809nobodyさん
2011/05/21(土) 10:54:51.77ID:???0810nobodyさん
2011/05/21(土) 11:27:17.26ID:/xyh+Ud4Model::execute()って無くなってない?
PDTの候補にも出てこないし実際に無いし。
0811nobodyさん
2011/05/21(土) 15:28:04.45ID:???executeは1.2で無くなったっぽいよ。
互換性のためにメソッドは最近まで残してあったのかも知れないけど。
0812nobodyさん
2011/05/21(土) 15:29:00.87ID:???0813nobodyさん
2011/05/21(土) 16:40:27.40ID:???0814nobodyさん
2011/05/21(土) 16:55:05.99ID:???0815nobodyさん
2011/05/21(土) 17:51:36.10ID:???0816nobodyさん
2011/05/21(土) 17:57:45.07ID:???0817nobodyさん
2011/05/21(土) 18:01:52.25ID:???0818nobodyさん
2011/05/21(土) 18:13:46.50ID:???0819nobodyさん
2011/05/21(土) 20:14:04.70ID:???Cakeのは簡潔すぎてマニュアルになってない
■ このスレッドは過去ログ倉庫に格納されています