07/11/14 03:12:01
乙。
3:nobodyさん
07/11/14 03:25:56
深夜遅くに乙。
4:nobodyさん
07/11/14 03:26:45
あと前スレ。
【PHP】フレームワーク CakePHP
スレリンク(php板)
5:nobodyさん
07/11/14 11:46:19
>>1
>>あとこのへんとか(初心者向けTIPS)
>>URLリンク(www.avatarfinancial.com)
ヒント:初心者は英語読めないw
6:nobodyさん
07/11/14 12:26:42
つ「帰国子女の新米プログラマー」
7:nobodyさん
07/11/14 16:44:29
CakePHP入門リンク集
URLリンク(pub.studio15.jp)
8:nobodyさん
07/11/14 21:45:34 Y+NYefM3
先輩方、
なぜ $this->set('hoge','hoge'); といちいちコントローラーからviewへ送るものを
指定する必要があるのか不思議に思うのですがいかがでしょうか。
$this->set(get_defined_vars()); を app_conrtoroller に直接書いておくというのが
一番手間かからず楽だと思うのですが、何かデメリットありますかね
ご指導、ご鞭撻のほど、よろしくお願いします。
9:名無しさん@Vim%Chalice
07/11/14 22:22:26
>>8
$this->set()を拡張するって事?
そういう風に纏めても結局、コントローラとアクションの
組み合わせごとにビュー側へ渡す変数ってバラバラだよね。
変数を渡したくない時もあるし、条件ごとにセットしたりしなかったり。
そーゆー所ってのは往々にして関数で一括りにしようとすると大変な思いをする。
んで後からキモい拡張を繰り返す羽目になる。
つーかね、$this->set();をいっぱい書くのが嫌だっつーんなら
こういう書き方があるぞ
$this->set( array(
'foo' => $foo,
'bar' => $bar,
));
10:nobodyさん
07/11/15 16:51:14 k/tuboV7
>>9
ありがとうございます。
$this->set( array(
'foo' => $foo,
'bar' => $bar,
));
といった書き方でやることにします。ありがとう!
11:nobodyさん
07/11/16 00:07:15
>>9
人のアイディアを握りつぶすのが得意な方ですね。
12:nobodyさん
07/11/16 06:01:31
デメリットがないかと書いていたから、
デメリットと、
おまけでそれへの対処の一例を書いてるだけのように見えるが...
ゆとりか?
13:名無しさん@Vim%Chalice
07/11/16 08:08:28
>>11
そういう風に見える?
たしかに口は悪いけど、こういう事ってひとりじゃなかなか
気付かねーと思うんだけどな
習い事でも何でもそうだけど、最初は人の真似から始まるじゃん
プログラミングだけ個人のアイディアが~とか言ってたら
切磋琢磨できないよ
//まあ、苦労するのもいい勉強だけどな
14:nobodyさん
07/11/16 11:05:41
ダイアログ的な汎用のページを作る方法って無いかな?
たとえば、商品入力ダイアログボックス
検索も出来て、クリックして選択。
そういうページだけど、これは汎用。
あるページの商品入力にこのダイアログを使う。
また、違うページの商品入力にもこのダイアログを使う。
ダイアログ的な用途だけど、ウインドウポップアップで
出てくるのではない普通のページ。
15:nobodyさん
07/11/16 11:56:29
それはJavascriptの仕事なんだぜ
16:nobodyさん
07/11/16 13:26:25
>>13
> たしかに口は悪いけど、こういう事ってひとりじゃなかなか
> 気付かねーと思うんだけどな
>
> 習い事でも何でもそうだけど、最初は人の真似から始まるじゃん
> プログラミングだけ個人のアイディアが~とか言ってたら
> 切磋琢磨できないよ
ヘタレのくせに自意識過剰じゃね?
17:13
07/11/16 15:42:29
へたれで自意識過剰なので、スキルアップのため
ぜひ>>16様の神実装を参考にさせてください><
18:nobodyさん
07/11/16 17:32:00
findAllを使うと
$data[0]['Model']['column']
の形式の配列が帰ってくるんですが、これを
$data[0]['column']
の形式で取得したいんです。何か楽な方法って用意されていませんかね?
19:nobodyさん
07/11/16 17:41:50
>>16
文句しか言えないモマエのほうが>>13よりずっとヘタレ
20:nobodyさん
07/11/16 17:52:26
>>18
app_model.php内に以下のようなコードでも入れてあげれば?
function hoge($data)
{
foreach($data as $i => $data2){
foreach($data2[$this->name] as $column => $Value){
$newData[$i][$column] = $Value;
}
}
return $newData;
}
で、各々のモデルでfindAllした後に$data[0]['Model']['column']形式のデータを引数にしてhogeする
21:nobodyさん
07/11/16 19:37:38
>>20さん
なるほど、ありがとうございます。
やっぱり自分で作らないといけないんですね。
お手数おかけしました。
22:nobodyさん
07/11/17 02:24:41
東京では勉強会も企画されてるのか。
都会の人はうらやましいな。本当に。
23:nobodyさん
07/11/17 02:59:12
じゃあ田舎でもやろうぜ!@福岡
24:nobodyさん
07/11/18 00:59:28
福岡は都会だろ@佐賀
25:nobodyさん
07/11/18 19:13:19
最低と比べちゃすべて上だわな。
26:nobodyさん
07/11/20 01:45:08
CakePHPガイドブック、誤字脱字多すぎだろw
27:nobodyさん
07/11/20 08:22:30
簡単と言われるCakePHPも俺には難しい…orz
オマイラ天才だな
28:nobodyさん
07/11/20 11:57:28
>>27
まず一度自分で簡単なMVCフレームワークを作ってみると
理解が段違いに早くなるよ。
29:nobodyさん
07/11/20 12:21:14
>>26
途中までしか読んでないが説明と画面のスクリーンショットが一致してないとかゴロゴロあるな
30:nobodyさん
07/11/20 13:01:09
>>26
誤字脱字以前に最初からbakeの使い方を説明しているのはどうなんだろ。
Railsから来た人ならわかるのかも知れないけど、Cakeから始めたら
絶対に混乱すると思うんだが。
modelとか複雑な例を出してるし、コードが長すぎて理解できないっしょ。
31:nobodyさん
07/11/20 14:37:23
それはあるな。導入編で一気に作ってから実践編で基本に立ちかえってる。
それと実践編のサンプルの仕様が良くわからない(実践的なものと思えない)
32:nobodyさん
07/11/20 15:35:43 WpMCnsjr
質問させてください。
public_html
└app/
└cake/
└vendors/
└hoge/(任意のディレクトリ)
と配置した場合に、hoge/ はcakePHPの影響を受けたくない場合はどうしたらいいんでしょうか。
具体的にはxreaのlogディレクトリで、中にはphpmyadminが入ってます。
URLリンク(sample.sxxx.xrea.com)でアクセスすると、
cakeのエラー:you are seeing this error because controller LogController could not be found.
.htaccessの問題かとは思うんですが、そもそもディレクトリ配置の仕方に問題アリですか?
33:nobodyさん
07/11/20 15:49:32
サーセン自己解決したみたいです。
参考:
URLリンク(purazumakoi.info)
34:nobodyさん
07/11/20 19:29:14
>>33
publicなところにコアを置くのは感心しないな。
35:nobodyさん
07/11/20 20:13:05
ツリー構造をしたデータをオブジェクトとしてうまく扱う方法ってあるの?
つまり、$model->findTree('id = a1') とかやったら、
- a1
+- b1
+- c1
+- c2
+- b2
こんな感じでツリーのデータとして返してくれる感じ。
参考までにほかのO/Rマッパーの話でもいいけど。
とここでふと思ったけど、自分のモデルに対してアソシエーション設定すればうまく行くのか?
36:nobodyさん
07/11/21 02:55:26
railsのscaffoldがcakeのbake?
cakeもrailsみたいにコマンド一つでファイル作ってくれればいいのに
質問に答えていくのがなんか面倒
37:nobodyさん
07/11/21 08:30:39 Cl2dTAkZ
答えるのも面倒だし、M・V・C別々なのも面倒だよね。
38:nobodyさん
07/11/21 12:29:06
wraper書きゃいいだけじゃん。
39:nobodyさん
07/11/21 15:54:05
>>35
TreeBehaviorといふものがあつてだな
40:nobodyさん
07/11/22 01:19:04
ユーザー登録によくある、登録するメールアドレス宛に一回メールして、そこに記載されているリンクをクリックして登録みたいな処理ってコントローラーにベタガキかな?
41:nobodyさん
07/11/22 08:23:16 nlNH1bOE
ベタ書きの意味が分からないけど、メソッド分けて、それぞれにモデルとビューを作ればいいんじゃないの?
コンポーネントにすべきか、という意味?
42:nobodyさん
07/11/22 10:30:25
メールを使ったユーザー登録をcakeに書くならどういうのが最適かな程度の意味でいったんだけど
43:nobodyさん
07/11/22 12:06:19 AuFQqZEI
普通に書けばいいんじゃないかな。
44:nobodyさん
07/11/22 18:33:00
cakeやばい、どうやばいのかはやばすぎるので言えないぐらいやばい
一回自分でサイト構築までやってみて、これ試すと相当やばい
PHP野郎にとっては麻薬以上にやばい
45:nobodyさん
07/11/22 19:19:37
それっていいって意味?
46:nobodyさん
07/11/23 01:56:02
Railsの方がもっといいけどね。
47:nobodyさん
07/11/23 02:09:41
れいるずだとぱふぉーまんすちゅーにんぐがたいへんそうなのです
48:nobodyさん
07/11/23 12:37:53
cakeの勉強会、二つも企画されてるのか。
49:nobodyさん
07/11/23 13:00:29
AjaxとかJavascriptに手を出したことがない初心者なんですが、
Cakeのヘルパーからこれらの世界に入っていくのは不味いですかね?
ある程度本でも何でも読んでから出直したほうが良いのかな
50:nobodyさん
07/11/23 17:34:58
>>49
そういう人用のヘルパーだと思われるよ。
普通に書きたきゃ書けばいいし、ライブラリ使いたきゃ使えばいい。
まずいも何もないと思う。
51:nobodyさん
07/11/23 18:26:39
ログインしてなかったら「ここは何々のページです。ログインしてください。」みたいに、viewの表示を変えるとかってview側でif分岐するしかないのかな。
あまりviewにロジック組みたくないんだが。
52:nobodyさん
07/11/23 18:38:55
普通ログインが必要なページにリクエストしてきて
ログインしてなかったら一括でログイン促すページにリダイレクトだろ
おまえwebアプリ作ったことあるのか?
53:nobodyさん
07/11/23 21:16:55
>>50
そうですか、助かりました。
でも少しはAjax, Javascriptの本もかじってみようと思います。
ありがとうございました。
54:nobodyさん
07/11/23 21:17:41
ログインしてなかったら「ログイン」
してたら「ログアウト」を表示したいってことじゃないの?
55:nobodyさん
07/11/24 04:15:26
いやそのページが何をするページかだけ説明をいれたいから飛ばすとかは無理。さすがにWebアプリ未経験ではないわ。
ログインしてない時はグローバルナビのリンク先urlでも変えて、ログインフォームと新規登録リンクと個別説明ページに飛ばすか
できれば同じurlにしたかったが。
56:nobodyさん
07/11/24 04:17:02
なんか意味わからない文章なったから放置で…
57:nobodyさん
07/11/24 07:36:32
よくわかんないけど「ここは何々のページです。ログインしてください。」って
テンプレートだけ作ってコントローラから何々の部分のメッセージを設定して
renderればいいんじゃないのん
58:nobodyさん
07/11/24 13:35:28
>>55
お前、Webアプリ未経験者だなw
59:nobodyさん
07/11/24 14:44:27 +GWOZRBH
僕は
○ログインしている場合
view/layout/default.thtml に
if($_SESSION['Login']['email'] != ''){ $this->render('loginok.thtml');}
(ログイン中のエレメントを表示させる)
○ログインしていない場合
view/layout/default.thtml
if($_SESSION['Login']['email'] == ''){ $this->render('loginng.thtml');}
(ログインしてね♪ボックスを表示させる)
という処理でわけてますね。
わかりやすいし、いいと思いますよ。
60:nobodyさん
07/11/24 16:57:12
どっちにしろviewでロジックは入れなきゃいけないね。
エレメントにしておいて、コントローラで切り替えるってのはいいかも。
61:nobodyさん
07/11/25 03:26:25
Cake1.2系使ってみてるんだけど、Viewでエラー出すときのメソッドって変わってるよね?
<?php echo $html->tagErrorMsg('Post/body', '本文は必ず入力してください。')みたいだったやつ。
Modelでメッセージ内容決められるようになったから。
あとエラーって一個ずつしか出ないけどまとめて表示とか出来ないの?
<?php echo $html->tagErrorMsg('Post/body', '本文は必ず入力してください。') ?>
62:nobodyさん
07/11/25 08:44:45
>>61
$form->input()を使えばエラーも一緒に表示されるようになる。
エラー文はmodelでも指定できるし、今まで通りControllerでも
指定できるけど、tagErrorMsgは無くなったので、inputの第二引数に
messageとして渡してあげればOK。
一個のinputに対してエラーを全部表示するのはコアを触らないと
無理じゃないかな。よく知らん。
63:nobodyさん
07/11/25 20:28:15
お答えありがとう。
一個ずつしか出ないならJavascriptの使用を強制してエラー出してあげるしかないかな
64:nobodyさん
07/11/25 22:38:25
フォーム周りやヴァリデーションに関してはEthnaのほうがわかりやすいなぁ
65:nobodyさん
07/11/26 00:36:21
べ、勉強会、ど、どうだったの!?アッー
66:nobodyさん
07/11/26 21:19:27
ケーキももう腐りかけなんかなぁ
67:nobodyさん
07/11/26 21:32:38 g6VI9o/i
今勉強中だからそれは勘弁して欲しい。
68:nobodyさん
07/11/26 22:20:15
Railsにようこそ
69:nobodyさん
07/11/26 22:37:57 9laXyXH+
それは断る。
70:nobodyさん
07/11/27 00:22:24
このスレは、ホモが集まってんの?
71:nobodyさん
07/11/27 04:42:44
たしかに楽なんだけど
細かい部分で変な仕様っていうか不具合っていうか
いまいちな動作するよねえ
validationとかsaveとか
おかげでソースとにらめっこで時間かかる…
72:nobodyさん
07/11/27 07:25:54 q198YkJr
もちろんフィードバックはしてるんだよな?
73:nobodyさん
07/11/27 09:33:56
validationは2系ならよいんじゃ?
saveはidも更新されちゃうとかか?
74:nobodyさん
07/11/27 11:12:10 O5dAXXRh
テーブル設計のとき、外部キーは「テーブル名_id」と命名しますよね。
テーブル名が「prefix_テーブル名」の時は「prefix_テーブル名_id」となるんでしょうか?
また、テーブル名は複数形ですか?
75:nobodyさん
07/11/27 21:07:05
環境をまず言うべきだ
76:nobodyさん
07/11/27 21:16:36
>>72
そこまでまだ使いこんでない
>>73
2は少しよさそうだね
なんかわかりにくいというか 仕様が曖昧だよね
まあ楽につくろうっていうのが趣旨だからしかたないのかもしれない
もうちょっといじってみる
77:nobodyさん
07/11/27 22:46:38
>>74
日本人じゃないから仕方が無いけど、
単数と複数の意味を考えよう。
テーブルとは、レコードの集まりだ。
で、一つのレコードは、一つのもの。つまり単数だ。
だからレコードのID・・・つまり一つのもののIDなのだから
単数形_IDになる。
そしてその集まりであるテーブルは当然複数形となる。
ついでにいうと、テーブルのレコードに相当するModelは当然単数形だし、
そのモデル(単数)の一覧(複数)を表示したりするコントローラは複数形となる。
単数形と複数形の使い分けはこんな感じ、
あと残りの単語の区切りがアンダーバー区切りか頭大文字かはクラス名は頭大文字
ファイルやテーブルはアンダーバー区切りとなる。
78:nobodyさん
07/11/28 00:30:00
テーブル A hasMany B
テーブル B hasAndBelongsToMany A
のときの A のデータの編集(新規追加)画面を作ってる
Aの編集画面で、Bのデータを持ってきて表示・選択できるところまでできた
で、Aのデータをsaveするときに、Bのデータのsaveとかvalidatesは自動でやってくれるの?
この辺り、いまいちややこしいなああ
79:nobodyさん
07/11/28 01:03:43
>>78
続きだけど
この場合、自前でvalidatesするときはどこでするの?
AとBを関連づけるための A_Bテーブルも作ってるけど A_Bモデルでやるのかな?
それともAモデル?
Bモデルだとデータの形式が違うから AモデルかA_Bモデルだとは思うんだが…
80:nobodyさん
07/11/28 03:05:53 k8OzrBLt
1.1で特定のコントローラーだけtagErrorMsgでエラーメッセージがでなくなったんですが、同じ現象にあたったひといませんか?
コントローラ内で
pr($this->User->invalidFields());
とかってやるとちゃんとvalidateは行われているようなんですが・・・
81:nobodyさん
07/11/28 14:51:33 Zvh5a2IN
cakephp 動作がすげー重いような気がするんだけど・・・
どうなんすか。先輩方。
82:nobodyさん
07/11/28 15:01:13
何と比べて?
ただの一枚のphpファイルだけで完結するものと
データベースにアクセスするものを比べたら
そりゃ重いのは当然だと思うが?
83:nobodyさん
07/11/28 15:18:31
CodeIgniterなどお召し上がり下さい、ふくよかなお方
84:nobodyさん
07/11/28 20:51:41
CakePHP使ってる人たちは、他のPHPフレームワークをどう見てる?
85:nobodyさん
07/11/28 21:56:36
railsは神
86:nobodyさん
07/11/29 17:42:41 IwtVKe0+
>>82
フレームワークcakephpを使ったプログラムと
普通にベタ書きでプログラムを書くのと比べて。
87:nobodyさん
07/11/29 18:11:52
馬鹿すぎてわらた
88:nobodyさん
07/11/29 21:15:28
さすがにネタでしょう。
89:nobodyさん
07/11/30 18:57:34 uOWFJHM3
エラー文忘れましたけど、
fatal で 30秒どうのこうの・・・というエラーが出るんですよ。
更新キーを押してもなかなか表示しなかったり。
キャッシュ使わないときついんですかね。cakephp。
プログラムのみならある程度いけるんですが、画像使うともう厳しいくらい重いですね。
なんか良い方法ないでしょうか。
90:nobodyさん
07/11/30 20:08:26
共有サーバやめたらいいんじゃないかな
91:nobodyさん
07/11/30 21:45:10 uOWFJHM3
>>90
ありがとうございます。
今でました。
Fatal error: Maximum execution time of 30 seconds exceeded in /home/hoge/www/hoge/cake/libs/session.php on line 154
セッション周りがおかしいんですかね~。
ちなみにcakephp1.1 サクラサーバーのプロっていうレンタルサーバーですね。
レンタルサーバーでも他のプログラムならさくさく動くんですが・・・。
92:nobodyさん
07/11/30 21:53:08
そのエラーを出せと言われたら、俺は速攻で無限ループを書くだろうな。
93:nobodyさん
07/12/03 19:35:14
オマイラ一つのMVCセットを書くときにどんな順番や頭のロジックで書いてる?
94:nobodyさん
07/12/04 19:21:59
複合で
95:nobodyさん
07/12/04 19:35:56 5jWwGUYJ
M C V の順番かな。
96:nobodyさん
07/12/04 19:52:21
頭の中ではVMCの順で考えて、書くのはMCVかな。
話が変わってしまって申し訳ないけど、
1.2のcake/libs/session.phpの470行目
$config = CONFIGS . Configure::read('Session.cookie') . '.php';
ってなってるけど
$config = CONFIGS . Configure::read('Session.save') . '.php';
の間違いじゃね?
1.1だと
$config = CONFIGS . CAKE_SESSION_SAVE . '.php';
ってなってるし。
ticket出したいけど英語ができない・・・orz
97:nobodyさん
07/12/04 20:01:17
1.2のcake/libs/session.phpの470行目
$config = CONFIGS . Configure::read('Session.cookie') . '.php';
ってなってるけど
$config = CONFIGS . Configure::read('Session.save') . '.php';
の間違いじゃね?
をそんまま訳せばいいだろw
98:nobodyさん
07/12/04 21:09:42
機能の豊富さで1.2系つかいはじめたが、もしかしてまだ実用的には早かったかな?
全然話違うけど、フォームの確認画面はググってすぐ見つかる方法くらいしかないんだろうか。そもそもcake使っているものに確認画面が見当たらない
99:nobodyさん
07/12/04 22:56:12
おい。おまいら。ここクリックしてみろ!
運がよければいいことがあるぜ!
URLリンク(localhost)
100:nobodyさん
07/12/05 01:13:52
deletelにしてる奴いるのか?
101:nobodyさん
07/12/05 13:38:48
せめてtinyurlとか使うだろ常考…
心優しい奴だな
102:nobodyさん
07/12/05 15:45:18
deletelわらた
103:nobodyさん
07/12/05 19:21:03
いま気づいたw
104:nobodyさん
07/12/06 08:26:19
なんかログイン画面がでてきたよw
105:nobodyさん
07/12/08 10:30:04
URLリンク(api.cakephp.org)を
IE6で見たらなぜかクラス一覧が表示されないんだが
これって漏れのPCだけ?
IE7とかFirefoxであれば普通に表示されるからそっちで見てるんだけど・・・
セキュリティ設定の問題かなと思って低めにしたけどやっぱ表示されねぇw
なんでや~~~?
106:nobodyさん
07/12/08 11:38:27
IEイラネって事でしょ
107:nobodyさん
07/12/11 11:02:44
URLリンク(www.cakephp.jp)
のeditのsaveの引数はなぜ
$this->dataではなく$this->data['Post']なのでしょうか?
108:nobodyさん
07/12/11 12:31:59 fmpEROAG
>>107
タイトル:
<?php echo $html->input('Post/title', array('size' => '40'))?>
っていうのは $this->data['Post']['title'] に格納されるから。
ようは $this->data['Post'] ってのは Postモデルのデータってこと。
よくわからなければ まず pr($this->data); をやってみるとセクシーになるよ。
109:nobodyさん
07/12/11 15:27:06
いや~ん
110:nobodyさん
07/12/11 15:43:20
あは~ん
111:nobodyさん
07/12/11 15:53:50
あのー
意図的に404エラー出したいときはどうすればいいですか?
AppController内で404エラーページを表示する共通のメソッドがあるんだけど
どうもうまくいかないっす
$this->cakeError('error404', array(array('url' => ???)));
こんな感じかなあという感じなんですけど
???の部分がわからない
$this->cakeError('error404', null);
とかにすると $param['url'] か $param['action'] がないっておこられてしまいます
デフォの404エラーページが表示できればいいんですけど
なんかいい方法ないですかあ?
112:111
07/12/11 15:55:13
あ、ちなみにビューを切り替えるとかいうのはなしでお願いします
HTTPステータスコードが404にならないと思うので…
よい方法があればおたすけください…
113:107
07/12/11 15:58:30
>>107
ありがとうございます。それは理解しているつもりなのですがaddの時は
$this->Post->save($this->data)
でeditの時は
$this->Post->save($this->data['Post'])
なのはどうしてでしょうか?実際$this->Post->save($this->data)でも
更新されるようですし。
114:nobodyさん
07/12/11 17:40:19 MudQMHo6
フレームワークでファイルのアップロード処理を書くと、どうも不細工になってしまう。
うまくフレームワークとなじませられないというか・・・。
115:nobodyさん
07/12/11 18:05:21
>>111
ソース見たらURLは単にメッセージ表示のために使われているだけみたいだから
こんなのでもいいんじゃないの? cake 1.2 pre-betaの場合。
$this->cakeError('error404',array(array('url'=>'アドレスバーに書いてあるURLミロ')));
116:111
07/12/11 18:17:07
>>115
レスありがとうです
やっぱりそんな感じになりますかあ
AppControllerに書く場合、URLは $this->here とかでいいんでしょうか?
なんかしっくりこない気がするんですけど
他にもよい方法ありましたらよろしくおねがいします
117:nobodyさん
07/12/11 19:24:00
マルチしね
無能
118:nobodyさん
07/12/11 21:21:49
>>113
書き方の違いでしょ。
この例の場合はどちらでもOKだと思う。
二つ以上のモデルに格納するデータをフォームから送るなら
$this->dataにすべきだね。
119:111
07/12/11 22:52:21
>>117
おれのこと?
マルチなんかしてないけど?
というか他にCakePHPのスレあったっけ?
120:111
07/12/12 00:43:10
フォーラムにも同じような話題でてたんだな
しかし決めつけはひどいな 別人だよ
>>117
おまえが無能だ
んで、フォーラムにでてるように array(array('url' => ~)) をつかうとうまくいかない場合ある
array(array(action)) つかったほうがいい
しかし、この辺りがCakePHPはなんかいまいちスマートじゃないね
121:nobodyさん
07/12/12 13:47:30 fuv5QvzR
モデルのヴァリデートにNgWord判定させるにはどうしたらいいのですか?
cake2日目ではまってまっすん
122:nobodyさん
07/12/13 02:11:34
正規表現でそのワード弾けばいいんじゃない?
123:121
07/12/13 10:54:35
>>122
レスありがとうございます。
正規表現ではじくのは考えたのですが、NGワードをDBで管理してあとから追加や削除をできるようにしたいのです。
ヴァリデートに関数呼び出しなどを書く方法はあるのでしょうか?
言葉足らずですみませんです。
124:121
07/12/14 13:58:00
自己解決しました
validate() をオバーライドするか、別途関数を呼び出してチェックすればいいみたいです。
save()の第二引数に falseを指定すれば、save時にヴァリデートしなくなるようです。
125:nobodyさん
07/12/14 23:47:10 dPU6DaHz
オバーライドwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
126:nobodyさん
07/12/15 02:49:30
一つのテーブルに10個のフィールドがあるとして半分ずつを別の機会にsaveしたい時は後に保存するほうは空の値を許可するにしなきゃいけないんだろうか。すべて必須項目にしたいんだが。
自分でModelに複雑なValidationを実装するのかな
127:nobodyさん
07/12/15 05:19:24 Ybu1PDKf
CakeSWXPHPの使い方で良いサイト知らない?
ActionScriptの方の使い方が難しくて、何かわかりやすいサンプルを探してるんだけど。
具体的にはFlexのMXMLとの連携のコードを全て公開してくれてるところ。
128:cWTrQzhwyu
07/12/15 05:32:32
w8dffW <a href="URLリンク(tjfirgbtchzm.com) [url=URLリンク(skatqimodaiu.com) [link=URLリンク(bjtumegdtulp.com) URLリンク(uteijdlqllxz.com)
129:nobodyさん
07/12/18 02:17:35
1.2系だとHABTMも標準でsaveできるようになったんな。すごい便利
130:nobodyさん
07/12/18 02:25:56
>>129
諸刃の剣の悪寒
いじりたいときは返って面倒
まあそのまま使うときはよさそうだね
131:nobodyさん
07/12/18 11:36:32
モデル書くときって簡単なSQLでもfindとか使わずに
queryでSQL文が見えてた方が開発効率がよくね?
132:nobodyさん
07/12/18 19:39:14
返ってくるデータが予測つかない人はそうだな
133:nobodyさん
07/12/19 02:24:25
>>131
俺はすでにそれじゃだめだな。
CakePHPつかう以前からの話だが、
何かのデータを保存・・・時にほかのテーブルにも保存
なんて処理をやりたいことがある。
SQLでいえばトリガーでやるところなのだが、
トリガーはDBMSに依存してしまう。
そういうときにフレームワークで処理を割り込ませられると便利。
CakePHPでいうBehaviorの仕事だ。
134:nobodyさん
07/12/19 02:34:00
それから、俺は、Behaviorを使うことで
SQL文の拡張のようなことをやっている。
たとえば・・・これは俺が実際に使っている例ではないんだが、
全文検索をするための構文はDBMSによって違う。
しかし、それがなんであれ,
$conditions = array('field' => 'FULLTEXTSEARCH ' . $keyword);
という風にFULLTEXTSEARCH キーワードを条件文に使用できる。
あとはBehaviorのbeforeFindで条件を調べて
DBMSにあわせた適切な構文に置き換えるだけ。
135:nobodyさん
07/12/19 11:09:58
>>126
saveに渡す配列にフィールドのキーが存在しなければvalidationもされないし
データ更新もされないから気にしないでOK
136:nobodyさん
07/12/19 13:28:34
Paginationまわりがわかりにくいと思うのは俺だけ? 特に1.2
フレームワークそのままの形だけの使い方をしている分にはいいんだけど
データ取得の命令がfindAllがpaginate関数になったりと、
理由はわからなくは無いんだけど、どうも設計に違和感を感じる。
とりあえず、1.2用のコントローラー以外(たとえばComponent)でも
使えるような汎用的なコードを書いておくよ。といっても怪しいけどな。
変なことをしているかもしれん。まあ俺が見つけた方法ということで。
しかし、コントローラ以外からコントローラのpaginate変数を設定したり
paginate関数を読んだりするのが気持ち悪い。
もっとスマートな方法ないのかな。
※$controllerはどこからか取得
$model_name = 'Post';
loadModel($model_name);
$model = new $model_name;
$conditions = array('id' => '> 3');
$controller->paginate[$model_name] = array(
'limit'=>2,
'page'=>1,
'conditions'=>$conditions);
$data = $controller->paginate($model);
pr($data); //検索情報
pr($controller->params['paging'][$model_name]); //ページ情報
137:nobodyさん
07/12/19 19:37:24 nmvrwuDT
recursiveが2以上のアソシエーションを動的に変更する方法がよくわからない。
例えば
blog
ってテーブルがhasManyで
post
ってテーブル持ってて、そのまたさらにhasManyで
comment
ってテーブルを持ってたとする。
普段はそれぞれは一覧で表示したいのでlimitを10くらいに設定してるんだけど、
ブログの一覧からpostとそれに紐付くcommentを全て取得する際に
$this->Blog->findAll();
でコメントだけはlimitを3にしたい。
$this->Post->hasMany['Comment']['limit'] = 3;
$this->Post->bindModel(array('hasMany' => array('Comment' => array('limit' => 3))));
とか試したけど、もう無理。
何か間違ってる?
138:nobodyさん
07/12/20 02:56:46
出来ないこともないが、
テーブル名を複数形にしない時点で
自分で調べてなさすぎ感が伝わってきて
アドバイスしたい気持ちになれない。
139:1/3
07/12/20 04:06:27 XdoaO407
調べてないつもりではないんだけど、確かに情報を小出しにしてるこちらが悪かった。
ごめんなさい。
誤解を生まないようにもう一度説明すると、
blogs テーブルはBlogモデルの中で
var $hasMany = array('Post' => array('classname' => 'Post', 'limit' => 10));
postsテーブルではPostモデルで
var $hasMany = array('Comment' => array('classname' => 'Comment', 'limit' => 10));
そいで最後に
commentテーブルがCommentモデルでそれぞれ定義されてたとして。
普通はコントローラーで最初に
var $uses = array('Blog', 'Post', 'Comment');
ってやっておいて、
$blogs = $this->Blog->findAll(null,null,null,null,null, $recursive = 2);
でそれぞれ
count($blogs['Posts']);// が10件
count($blogs['Posts']['Comments']);// が10件
入るよね。
140:2/3
07/12/20 04:06:58 XdoaO407
でもblogの一覧から全てのPostとCommentを取り出すのがリs-スが勿体無いときがあったとして、
1.Postを3件だけ取り出したい
2.Commentを3件だけ取り出したい
とすれば、
1のPostのほうは
$this->Blog->hasMany['Post']['limit'] = 3;
なり
$this->Blog->bindModel(array('hasMany' => array('Post' => array('limit' => 3))));
なりしてやればあとは
$blogs = $this->Blog->findAll(null,null,null,null,null, $recursive = 2);
で3件だけPostを取り出せるんだけど、
2に関しては
$this->Post->hasMany['Comment']['limit'] = 3;
をやっても
$this->Post->bindModel(array('hasMany' => array('Comment' => array('limit' => 3))));
をやっても、
その後
$blogs = $this->Blog->findAll(null,null,null,null,null, $recursive = 2);
これをすると
count($blogs['Posts']['Comments']);
は10件取り出されてしまうんですよ。
141:3/3
07/12/20 04:07:32 XdoaO407
自分では
$this->Blog->findAll()
でblogsテーブルの直下のhasManyは動的にアソシエーションできるんだけど、
そのさらに下のアソシエーションに関しては動的に変更できなくて悩んでるんだけど、
何か決定的に間違ってる?
普通は出来るもんなんだったら、
別のところで自分が途方も無いケアレスミスを犯しててたまたま出来てないだけだってわかるだけでも
対策考えれるからありがたいんですけど。
142:nobodyさん
07/12/20 04:10:41
あああ、推敲したはずなのに…。
>>139の
> そいで最後に
> commentテーブルがCommentモデルでそれぞれ定義されてたとして。
は
> そいで最後に
> commentsテーブルがCommentモデルでそれぞれ定義されてたとして。
~~
の間違いです。
重ね重ねごめんなさい。
143:nobodyさん
07/12/20 13:00:08 rEyzQF0b
$this->Blog->Post->hasMany['Comment']['limit'] = 3;