【PHP】フレームワーク CakePHP 6ホール目【v1.2】
1 :
nobodyさん :
2009/03/09(月) 10:55:37 ID:3PTy4GqZ
テンプレらしきものは以上 補足があればどうぞ Have a Nice Cooking ! つか、なぜ前スレ落ちた?
hasAndBelongsToMany で3つ以上のモデルを連携させることはできるでしょうか? 例えば、A,B,C という3つのモデルが連携して、A_id と B_id が決まったら C_id が返る、というようなイメージなのですが。
7 :
nobodyさん :2009/03/09(月) 15:20:58 ID:VNswFz5T
ガイドブックの1.2版まだ〜?
8ゲットだぜ! テンプレ作った人、乙です♪
AjaxでOnchangeのときに一部分を更新させたい場合どうやって書くんでしょうか $ajax->formと$form->endの間でreturn this.form.submit(); をやった場合には全部更新されてしまいました。
>>9 optionsのupdateに書き換えたいdivのidを書いた?
>>10 書きました。
form->endのボタンの場合はちゃんと指定部分だけ更新されるんですが、
その途中のform->selectのonChangeだと全部更新されてしまいます。
12 :
nobodyさん :2009/03/11(水) 15:34:20 ID:57BlDi5P
更新時刻のmodifiedだけを簡単に更新する方法ってありますか? 普通にmodifiedだけupdateなりすればいいかなとは思ってますが、おすすめの方法があれば・・。
関数の引数にIPアドレスを渡したら、セキュリティのためか 値が正常にわたってないみたいです。 IPアドレスを渡す方法があれば教えてください
>>13 さすがにその質問はぼんやりしすぎてる気が・・。
もうちょっと具体的に書いたほうがいいかも。
>>15 普通に出来たけど・・
値の取り方がおかしいんじゃないかな。
debugモードはオンにしてる?
あー。コロンが入ってると駄目みたいです。 IPアドレス:ポート番号って値だったので。 なんとかして、そのまま受け取ることはできないかな
エンコードしろよ
>>17 逆にコロンそのままじゃなきゃいけない理由はあるの?
/で区切るとか、置換するとか>18さんの言うとおりエンコードするとか・・
理由は特にないです。base64エンコードでやることにします。 ありがとうございました。
逆に:付きでparams->namedでそのまま取り出せる気もするけど。
間違った。$this->params['named']ね。
もう少しデバッグ表示のパラメータをじっくり見たほうが色々応用が利く
paginatorで出力される page:1とかsort:createdとかが、見た目にクセがあるので page=1&sort=createdみたいに普通のクエリストリングにしたいのですが、 ヘルパーに手を入れる必要がありますか?
SQLクエリって1ページに何個くらいなら大丈夫かな。 キャッシュ使えば多少多くても大丈夫なんだろうけど、キャッシュなしで 7個は多いかな。
>>25 SQLの内容によるからなんとも言えんな。
>>26 ありがとう。そのままクエリコピペしようと思ったけどムリだった。。。
cakephpに限ったことじゃないけど、できるだけSQLに頼らず PHP側で処理した方が
動作が軽くなるって認識でOKですかね。
28 :
nobodyさん :2009/03/13(金) 03:26:08 ID:P2u6tjWp
>>27 処理が何か知らないけど、SQLのほうがいいんじゃ。
基本debug=2で画面下にでる各SQLの実行時間を見ながら考えれば?
>>27 ありがと。SQLの時間が見れたんだね。気づかなかった。
bindModelやったらだいぶ処理時間が短くなった。
アソシエーションは大事だね。
30 :
nobodyさん :2009/03/14(土) 17:17:20 ID:Spxmyd/m
http://d.hatena.ne.jp/ngtn/20080208/1202400164 ここを参考にCake1.2で空メール処理を作ってたのですが、
Shellのクラス内で$uses = (モデル名)をやると
Error: Missing Database Connection. Try 'cake bake'
と表示され、データベースに接続することができません。
そもそもバッチファイルではデータベース接続設定が
独自に要るとか何か原因になりそうなことはないでしょうか?
AuthComponentって、自動的にパスワードハッシュされるってことは、登録時にパスワードをsha1しておかないとダメなの?
>>32 ん?どういうこと?既存のユーザーについて?
いや、認証するときにpasswordフィールドはハッシュされるけど、ということは登録時にpasswordをハッシュしとかないとダメなのかなと うまくいかないもんで聞いてみますた
password()使ってハッシュ化
>>34 登録時もAuthが自動でやってくれる。
$this->data['User']['password']に入ってれば。
あ、ホントだ出来たスマンありがとう!
もう少し試してから悩んでくれw
逆にいうと、$this->data['User']['password']に入ってると問答無用でハッシュ化されるから、 バリデーションのとき面倒なのよね。
>>41 ヒント:recursive, ContainableBehavior
43 :
nobodyさん :2009/03/17(火) 06:49:48 ID:SCdB4QMU
どこか1.2のBakeしたものに対するCSSテーマの サンプルとかいっぱいあげてるサイトないですか?
44 :
24 :2009/03/17(火) 09:48:33 ID:???
>>24 のページネーションのURLのカスタマイズについて、
どなたかわかりませんでしょうか?
そこに労力をつぎ込む意味ってあるか?
>>44 >>45 に同感だが、
やるとすればrouterの$namedのパラメーターで設定じゃないかな。
やったことないから実際はわからんけど。
47 :
44 :2009/03/17(火) 13:47:50 ID:???
>>45 >>46 Cakeで作られたサイトをいくつか見たのですが、
ページング処理のあるページのURLにコロンなどが含まれていなかったので、
みなさん、なにか細工されているのかと思いまして・・・
routerでnamedパラメータの区切り文字「:」を変えることはできるのですが、
それだと、
page=1/order=created
のようになるだけなので・・・
あまり拘っても意味ないのかな。
snsの掲示板で登録ユーザーがユーザ名を変更すれば、 掲示板のユーザー名も変更される場合、 掲示板テーブルにはユーザIDと本文を記録して ひとつのレスごとにIDで検索かけて名前を取ってくる って方法でいいんでしょうか?
>>48 そうです。
アソシエーション作っておいてユーザーテーブル勝手に持ってこさせるのがcakeです。
>>47 検索エンジンのクローラーを別とすると、URLを見ているのは、HTML分かる人だけだわな。
とすると、クエリストリングだろうが、見慣れないcake式だろうが、そういう人が見ればどれでも一緒ということになる。
だからあまり気にすることないかと。
それよりは、面倒なところをcakeに任せた方がつくるのもメンテも楽だと思う。
51 :
41 :2009/03/17(火) 16:45:45 ID:???
>>42 まさに求めていたものでした。ありがとうございます。
ただ 'conditions'=>array(
conditionsに商品名=姫トランス&&商品名=満月を(ry
とした場合うまくいきませんでした。 )
>>51 'conditions' =>array('AND'=>array(.......))
とかで出てこないすか?マニュアルのモデルの所読んでみて。
javascript使って、フォームの入力欄を増減させたり、並べ替えたり、 選択肢を変化させたり、hiddenの値を変化させたりすると、 Securityコンポーネントに引っかかっちゃうんですけど、 なにか対処法はありませんかねぇ・・・。
逆にpagenationのajaxとかは引っかからないの?
55 :
nobodyさん :2009/03/18(水) 04:41:39 ID:O+T5YpCd
>>47 sessionにConditions入れて、beforeFilterとかで、controllerとaction
みて、sessionを破棄とかしてた時期もあった。
>>52 購入者名 商品名
________
購入者A 商品A
購入者A 商品B
購入者A 商品C
購入者B 商品A
購入者C 商品A
購入者C 商品B
というようなテーブルから商品AとBを買った購入者だけ取るのって難しくないですか?
AもしくはBなら簡単に出せるのですがandとなると
商品名がAかつBという行が存在出来ないので取れないんですよね。
57 :
53 :2009/03/18(水) 12:10:57 ID:???
>>54 ページネーションとかは問題ないですね。
フォームを出力したあとにjavascriptなどで変更してしまうと、
フォームヘルパーが出力したトークンと一致しなくなるので、
トークンチェックに引っかかってしまうわけです。
原因はわかるんですが、対処法が・・・
javascriptで、5段くらいの連動selectタグを 作りたいのですが、 cakeで実行するのに、どのような方法が便利か、 あれば教えてもらえませんか? quickformでやろうとしたのですが、 DBから検索して配列に突っ込んで、と あまりスマートにできません。
59 :
nobodyさん :2009/03/19(木) 03:39:36 ID:L7hopyy3
>>58 量が少ないなら、データ全部JSONで吐いて処理するけど、
多いなら普通選択されたキーをAJAXで渡して、JSONでとって、次のセレクトの中身入れ替える。
jqueryならかなり簡単。
AjaxヘルパーをjQueryにしてくれればいいのに・・・。
>>60 俺もそう思う。
そろそろその時代かな。
ただjqueryヘルパーってどっかで見かけた覚えあるけど。
ビューでAuthコンポーネントのメソッド使いたいときって、どうしてますか?
>>62 beforeRenderとかで$this->set('controller' ,$this)
idとnameを対応付けるテーブルhogeがあって、登録時にhoge_idをselectで自動で選びたいんだけど出来る?
サーセン、cookbookに載ってました。ごめんなさい。
その存在は知っているが、やはり標準にしてほしい・・・。
>>68 「標準」って良いかなあ???
CakePHP1.2から「Emailヘルパー」が標準になったけど、安心して使えないのでひどい目に
あった。安定稼働させる為にあれこれ調べメチャ手を取られた。
結局「Qdmail使うしかない。」の結論になった。
CakePHPは、部品が簡単に追加できるから、良い部品を追加して使う方がしあわせになれる
のでは?
んー、そういう考え方もあるかな。
「Emailコンポーネント」がCakePHP1.2から標準装備となった件で言うと、 Email関連ツールがCakePHPの標準装備となった点はユーザとして喜ばしい事であるよね。 しかし、実際に使って見るとマルチバイト文字を使う所で制約が大きかったり、使えなか ったりする所があり「なんだEmailコンポーネント使えねージャン。」と言う事になって いる。しかし、本来は標準装備された事はありがたい事なので、我々マルチバイト文字文 化圏の人間が、CakePHPメンバに協力し、CakePHP1.2のEmailコンポーネントがマルチバイト 文字でも正しく動くように改良出来ればいいんだよね。 (ただし、誰がやってくれるのか?の問題があるけど)
バリデーション周りもマルチバイトのことはほとんど考慮されてないね。 ま、拡張は楽だけど。
Cake固有の話題ではないのですが、 たとえば、 あるUserが投稿したPostの一覧を表示するアクションがあるとすると、 そのアクションはUsersControllerとPostsControllerのどちらに実装するものなのでしょうか? MVCをはじめて間もないので・・・ よろしければ理由と一緒に教えていただけないでしょうか? また、参考になる書籍やページがあればそれも教えてください。
75 :
73 :2009/03/20(金) 18:28:42 ID:???
>>74 すべてのPostの一覧ならばそうするのですが、
「あるUserが投稿したPostの一覧」の場合にどうしようかと思いまして・・・
>>75 どんなURL(controllerとactionと引数)になるかを考えてみよう
/posts/index/user_name or /posts/list/user_name
/users/posts_list
のどちらかになる
postの一覧から特定のユーザーのpostを表示するのならPostsControllerで
ログインしたユーザーが自分のpostを一覧するとかなら、後者でもよいと思う
77 :
76 :2009/03/20(金) 19:28:07 ID:???
当然、後者のパターンも /posts/mylist でPostsControllerで実装してもよい
これで作ったものって 画像のプロテクトできる?
>>78 そもそも画像のプロテクトってどんなのを想定してるの?
>>71 お前に言われなくても、そんなこたー皆んな知ってる
CakePHPのマルチバイトをお前が整備したらほめてやる
82 :
nobodyさん :2009/03/21(土) 11:34:24 ID:7xjpEJ1g
人の作ったDBをCakeで焼きなおしているのですが、Postgre7.4です。 ContactテーブルとAddressテーブルがあり、ひとつのContactは2つAddressを もてるような設計です。ContactテーブルがAddressのキーを2つ持ってる感じです。 ContactモデルでbelongToで、Address1、Address2にそれぞれのforeign_keyで つないでいる感じなのです。 saveAllを使ってAddress1,2もContactも全部保存しようとしているのですが、 編集時、Address1,2のUpdateはできるのですが、ContactのUpdate時に それぞれの外部キーが空のSQLが実行され、エラーとなります。 saveAllの前に渡す配列に直接外部キーを別途取得して書き込んでも、無理です。 バグなのでしょうか?1.2の最新版なのですが。
>>78 画像のプロテクトの意味がよくわからないけど printscreenで取られないようにってこと?
それだったらどうやっても無駄だよ。
最終手段はデジカメ撮影でパクられるから。
>>84 もしデジカメでしか出来なくしたら十分効果あるだろ
何この頭悪い発言
プリントスクリーンまで禁止にするって事は OSの機能いじるって事だがな そこまでやるのかって話だろ
>>86 「デジカメで取られるから何しても無駄」って風に書いてあるだろ
文章がおかしいんだよ
betaまでしか対応していないのが分かってたけど「CakePHP ポケットリファレンス」を買ってしまった。 結構知らないメソッドとかあるんだなぁ。 早く1.2正式版対応のを出してくれ!
89 :
nobodyさん :2009/03/24(火) 10:19:40 ID:VfITkfEn
Zendにしようかコッチにしようか悩んでます 皆さんはどのへんにメリット感じてこちらを選んだんですか?
Qdmailコンポーネントをつかって、SimpleReplace的な事をするにはどうパラメータをわたせばいいの?
>>92 ■目次
Chapter 1WebアプリケーションフレームワークCakePHP
1-1 CakePHPについて
1-2 CakePHPのダウンロード
1-3 CakePHP 1.1と1.2の違い
1-4 基本的な仕組み
Chapter 2アプリケーションを作り込んでいく
2-1 グループウェアをつくる
2-2 予定表
2-3 ユーザ管理
2-4 関連を作る
2-5 ACLを使ったアクセス制御
2-6 見た目を調整する
Chapter 3テストコードを記述する
3-1 テスティングフレームワークを利用する
3-2 モデルのテスト
3-3 コントローラのテスト
3-4 コンポーネントのテスト
3-5 ヘルパーのテスト
Chapter 4機能を拡張する
4-1 アラートメール
4-2 携帯電話の対応
4-3 CSVでの出力
国際化したとして、登録された時間が全部タイムゾーンでずれる訳ですけど、どのようにしてます?
modelでバリデーションを定義して、controllerでvalidate()実行すると、 バリデーションが正常に機能していることが確認できるところまでできました。 しかしview側にエラーメッセージが表示されません。 ぐぐったら $form->error('Model.field') を使う、とありましたが、表示されません。 $form->input() のoption配列のerrorも指定していません(のでエラー出るはずですよね?) validate()を実行するだけではエラーメッセージをビュー側で使えないのでしょうか?
>>95 Model::validateにmessageは指定されている?
>>96 はい、指定されています。
controller内でmodel::validationErrorsを出力してみると、
エラーメッセージがセットされていることも確認済みです。
CORE/cake/lib/view/helper/form.php の error()を見ると、
if ($error = $this->tagIsInvalid()) {
とあるのですが、ここが毎回falseになってるようです。
モデル、フィールド名を引数に取るメソッドらしく、
デフォルト引数がnullなので取れてない??
うーん・・・なぞだらけです
原因がわかりました。 バリデーションで引っかかった場合にredirectしていたため、そこで初期化されてたようです。 ということは、ログインのメソッドをmember_controllerに実装した場合、 ログインフォームのビューはview/members/以下におかないとダメなのでしょうか? 複数ページにログインフォームを置きたいのです。。。
なんでコミュニティの人って気難し屋の変な人ばっかりなの?
コミュニティってどこの?
プログラマ特に職業にしてる人なんて、そんなもんだろ。 まぁ、「ばっかり」っていうのは単なる主観だと思うが。 さらに文章だけでドンだけ分かるのかと・・。
paginateでアソシエーション先のデータもとってくるときの話だけど。 アクションごとに取ってきたい条件や、フィールドが違う場合どうするのが賢いの? バインドしまくるのもなんか変な気がするし。 モデル作りまくればいいのかね
>>104 BIND
UNBIND
じゃないの?
モデルでもうちょっとスマートにBINDするとか
同じテーブルへ外部キー2つ張りたい場合のCakeの命名規約ってどうなってるの? 調べても出てこなかった
外部キーは一つでも二つでも百個でも同じだと思うが
フィールド名どうするのって話
フィールド名声源されてるのってidと時間だけだろ
え、時間も? 意識したことなかったけど、 どういう時に制限されるんですか?
作成日時はcreated 更新日時はmodified 別に規約無視して自分で手動で突っ込んでもいいけど
titleとnameもあるよ
>>112 だからid二つ作りたい時にどうするの?って聞いてるんだけど
user_idを二つ置くわけにはいかないでしょ?
外部キーって普通他テーブルのidにしか張らないよね
AテーブルにBテーブルのb_idと言うフィールドを2つ置けないでしょ?って話
だからフィールド名はなんでもいい。って皆さん教えてくれてるじゃん。
とりあえずRDBMSのリレーションとは何なのかと、そのリレーションのやり方を勉強してから噛みついて欲しい
>>116 associationを自分で書いて、foreignKeyに好きなfield's nameヲ設定シロ。
∴ foreign keyの命名ruleは、実質存在しない。
命名rule気にするときは、bakeする時
>>118 例えばrecursive=1で検索したときに、
b_id1とb_id2があったら
2つのBモデルが結果に含まれるのか?って話をしてるんだけど。
リアルで馬鹿なのか?
外部キー制約を張るフィールドは規約でこう命名しろ、ってされてるから 同一モデルに複数張る場合は無いのかと思っただけだよ でも実際フィールド名で規約を守る意味自体が確かにbakeのためくらいしかないね
んなこたーない
無いというだけ言わずに例示したら?
上に書いてあるじゃない
フィールド命名規約を守る意味は実質無いとは書かれてるね
cakephp1.1 から 1.2 って全然スピード変わったよね。 cakephp 1.1 はもっさり動作でサイト作った後キャッシュやらんと使い物にならんかったが cakephp1.2 だとキャッシュしなくても全然イケル。 こりゃいい!
findでfieldsにcount()とかsum()を使うと、 戻り値が data[0][0]['count']みたいになっちゃうんだけど、 afterFindとかで整形する方法以外で、 なんとか data[0]['post']['count']に入れる方法ないかな? count(*) AS Post.count とかやってみたけどエラー出ちゃう;
ごめん、教えてちょ。 アクション内で、動的にテーブルの列の追加をやっているんだけど、 デバッグモードON時(1以上)に、列追加後にfindかけると キャッシュからスキーマ読まれて、追加した列が取得できない。 ブラウザの更新ボタンを押せば、追加した列を取得して表示してくれる。 デバッグモードOFFであれば大丈夫なんだけど、 ONの時にもちゃんと列を取得してもらうにはどうすればいいのかな?
>>131 追加した時にキャッシュをクリアすれば良いのでは。
133 :
131 :2009/04/05(日) 01:20:53 ID:???
>132 キャッシュのクリアはやってるつもりなんだけど、 合ってるのかわからん。 これでいいんだよね。 $this->モデル名->cacheQueries = false; 列追加はALTER TABLE ADD をSQL直書きで、queryメソッド。 上のcacheQueriesはどこで設定したらいいか判らないから、 findする前後、列追加の前後、 いろんなところに書いてみたけど、ダメだった。 デバッグモードOFFなら大丈夫って書いたけど、 追加した列はupdateできなかった。 ローカルのテスト環境はWindows XP、PHP5.2.8、cakePHP1.2.2.8120、MySQL5.0.67 本番テスト環境はさくらサーバ FreeBSD、PHP5.2.8、cakePHP1.2.2.8120、MySQL4.0.27 誰か教えてちょ〜。
>>133 Modelのsaveメソッドでは条件が合えば自動でキャッシュをクリアしてる。
自前でテーブル足すとかしたらこれが効いてないんでしょうかね。
Modelクラスのソースのsaveメソッドの最後の方ででてくるから参考にしてみては。
135 :
131 :2009/04/05(日) 09:18:55 ID:???
>>134 サンキュー!
ちょっと見てくる!!
でも解決しなかったら、また教えてちょ。
ありがとうね!
if(isset($box)){ }
if(isset($box)){ if($box == 'hako'){ echo '処理1'; } } ってやらずに if($box == 'hako'){ echo '処理1'; } だけだとnoticeエラーが出る。 なんかスマートな書き方ありませんでしょうか。 if(isset($box) == 'hako'){ echo '処理1'; } だと$boxがセットされているだけでtrueになっちゃうし。。。
if( isset($box) && $box == 'hako' ){ echo '処理1'; } じゃだめ? 1行にしただけだけど。
139 :
131 :2009/04/05(日) 11:07:23 ID:???
>>134 解決しました!!
ありがとう!!
仰ってた通りModelクラスの最後の方の
_clearCache()を見てたら判りました!
似たような事やる方がいらっしゃるかもしれないので、
解決した方法を書いておきます。
私はバカでただのゴミ野郎なので、
判りづらい事書いちゃったらすんません。
cakePHPは現時点最新の1.2.2.8120。
まず、アプリ名\cake\libs\model 内のmodel.phpから
_clearCache() が怪しいと睨む。
同ソース内のsaveメソッド最後の方の
$db->delete($this)
辺りで、
$this->_clearCache();
こんな感じで_clearCache()が引数無しで呼ばれたりしてる。
_clearCache()、やってる事はよく判らんが、
最終的に
clearCache($assoc);
っていうのをやってる。
次に続く・・・
140 :
131 :2009/04/05(日) 11:09:46 ID:???
139の続き $this付いてねーから、e()とかh()みたいに、 どこでもが使えて、みんなが大好き アンパンマンみたいな存在の関数なんじゃねーのと思い、 アプリ名\cake\basics.php を探してみると、 clearCache($assoc); 発見。 clearCache($params = null, $type = 'views', $ext = '.php') こんな感じになってて、引数指定しないとデフォルトでviews、 アプリ名\app\tmp\cache\views 内を 一掃するようになってるみたい。 ならばfindかける前に clearCache(null,'models'); すればいんじゃねーのと思い、やってみたがダメ。 もしかしたら、findの全然前に、既にモデルキャッシュ読んでるんじゃねーのと思い、 逆に、列追加(ALTER TABLE ADD)のクエリー発行した直後に書いてやったら 無事成功!!!! ローカルテスト環境のWindows、本番のさくらサーバ環境、ともに出来てる事を確認。 以上です! 長々と失礼しますた〜。 さー!次は携帯用の表示、振り分け方法を考えないと!!!
>>138 あ!それでいけそうな予感。
ありがとうございました!
検索結果のcreatedが同一のものを 一件に纏めてpaginate compornentしたいのですが これはcakeではどのように書けば良いのでしょう? ヒントを頂けると有難いです
マスタをセレクトボックスに出してるんだけど 並び順をモデルのデータから自動的に行う方法ってある? 例えばorderフィールドを作っておけば自動的に参照するとか。
orderフィールドを作っておいてそれがorderだと指定すれば
ちなみに指定の仕方はlimitとかと同じ
order句を指定したくないんだけど find時またはformヘルパーで自動的に解釈してくれる機能は無いのかなと
指定されないのに勝手にソートされたら逆にものすごい困ると思うが
afterFindでSet::sortでもかけるとか。
こんにちは デフォルトのデザインダサいので変えたいのですが、どうすればいいのですか?^^;
>>149 スタイルシート外しちまえ。
結構テンプレあるぞ。
>>147 orderフィールドを作らなきゃ良いだけでしょ
フレームワークにその手のものは多数あるのに何言ってんの
>>149 「cakephp テンプレート」でググレカス
コントローラーが多い場合どうしてる? フォルダで階層化してもclass名とか衝突するからうざいよね。
クラス名の衝突なんて起こったことないわ そもそもフレームワークの枠組みの中でしかクラス作らないし
Folderモデルとか作ろうと思ったら、コアのFolderクラスと衝突するね。 コアのクラスにはCake〜とかプレフィックス付けといてくれればいいのに。
すみません paginateのcompornentを使ったときに、 group byで纏めたデータが何件あったのか、sqlで書くところの from *, count(data) as countみたいのをやりたいのですが、 どういう項目に書けばいいのでしょう??
>>156 こっちが適当に名前かえるしかないね。
フレームワークはそういう規約的な知識は求められても仕方が無い。
>>154 フォルダで階層化なんて普通するの?
俺そんなことやらないけど。
コントローラー作りすぎなんじゃないの?
作りすぎたところで名前が被るとかおかしい 名前が同じなら同じコントローラにすればいいし
コントローラ名というかクラス名がコアで使われてるのとかぶっちゃうんでしょ。 俺も前に添付ファイルを扱おうと思って 「File」モデルとか作ろうと思ったら作れなくてちょっと悩んだことあるw つってもかぶりそうなクラス名はFile、Folder、Page、Configureぐらいじゃないかな?
それコントローラの増加と関係ないじゃん
containで、任意のフィールドで結合するにはどうすれば?
俺はテーブル名にプレフィックス付けるからモデル名が被ったことなんかないな。
cakephpは予約語一覧とかでてないんだっけ?
みんなフリーワード検索とかどう対応してんの? 全文検索したいんだけど。スフィンクスは使いたくないんだよね。 CAKEだけで全文検索をスマートにやるやり方を!!
>>149 views/layouts/以下に、default.ctpを作って、好きなようにHTMLを書く。
その、default.ctpが優先的に呼ばれるようになる。
168 :
nobodyさん :2009/04/08(水) 13:50:09 ID:MhIiLyHN
>>168 LIKE検索より数十倍高速な全文検索
というフレーズにあこがれてるんです><
いやだからデータベースにデータが入っている以上 データベースのアクセス速度は越えられないわけで
>>171 MySQLならLIKE検索とFULLTEXT_INDEXを使った検索では何十倍も速度が違うぞ。
>>166 >>CAKEだけで全文検索をスマートにやるやり方を!!
NamazuなりLuceneなりを使うしかないんじゃない?
誰もMySQLとは言ってないので というか汎用的なものじゃないとフレームワーク使う意味ないので
>>172 ですよねー。
でもレンタルサーバ等でそういったものを
インストール出来ない環境が多いんでなんとかしたいんですよね。
今さくっとNgramで全文検索用作ったけどinodbとmyisamが混じって気持ち悪いし
トランザクション効かないしで><
>>173 全文検索の無い主要なRDBなんてあるとおもってるの?
LIKE検索なんて比較対象じゃないわ
ちなみにLIKE検索は、前方一致しかインデックスが使われない。 ○○%は速くても %○○や %○○%はシーケンシャルアクセスになりオンデマンドサービスで使えるものじゃない
で、俺はセナっていうMySQL用全文検索エンジン使ってる。 レンタル鯖で入れられないならRDB標準のを使えばそれまでだろ。 標準のはテーブル越しのインデックスが作れなかった気がしたがな
これでおk $ret = `find . -type f | xargs grep あああ`;
>>178 質問者はMySQLなんて一言も言ってないのにMySQLの話をし出したから
誰もMySQLとは言ってないという指摘になったわけで
>>180 >
>>178 > 質問者はMySQLなんて一言も言ってない
からこそ、RDBMSの具体例としてMySQLを挙げたんじゃないか?
君は集合の概念があまりわかってないみたいだね。
MySQLだろうとなんだろうと全文検索はある
183 :
nobodyさん :2009/04/09(木) 00:24:09 ID:GNSodjfY
しかし日本語の全文検索はというと
あるかどうか知りたいなら調べてきたら?
自分で作ったスクリプトもvendorsに入れて使っていいですよね?
187 :
nobodyさん :2009/04/10(金) 01:41:28 ID:TR2k1lyd
そうさ明日からお前が vendor of the ship
実践本買った おすすめ
上のほうで話題になってたけど、 コアのクラスでモデル名と衝突しそうな File、Folder、Page、Configure、 それぞれ、なにか代わりになるいい名前ないかな? 自作CMSに挑戦しようと思ったら、使えないモデル名ばっかりで いっきにモチベーションが・・・ MyFile、MyFolderなんてのもカッコ悪いしなあ・・・ ConfigureはConfigurationでもいけるか。 PageはContentかな・・・?
Myのが正しい と言うか本家のコアクラスで同じ事ができないのかを考えるべき 継承してAppつけるのも良い
191 :
189 :2009/04/10(金) 22:27:15 ID:???
>>189 いえ、ライブラリじゃなくて、モデル名なんですよ。
フォームに
name="data[MyFile][hoge]"
とか表示されるのは、なんかかっこ悪いので・・・
symfonyはコアのクラスにはsfってついてるのになぁ・・・
192 :
189 :2009/04/10(金) 22:28:06 ID:???
>>189 File → Document
Folder → Directory
そういう言いかえをするくらいならMyの方が良い 意味的にはっきりしてる
195 :
nobodyさん :2009/04/11(土) 02:37:51 ID:1ZQJOiPg
Yourでもいいよね Ourとか
>>188 この実践本いいよね。
安い中古商品でたら買う予定。出たら教えてチョ
09/4/8発売「CakePHPによる実践Webアプリケーション開発」3,150円
(264ページ。値段の割にチョイページ数少ない。SimpleTestの項、もう少しページ数を
割いてくれてる事を期待してたのにチョイ少ない。残念!)
09/3/14発売の「CakePHPによるWebアプリケーション開発」2,940円も安い中古商品で出た
ら買チャオ 現在2,690円(2,350+340)あり。どうしようかな?買チャオかな?
pagenateのパラメータ指定をモデルに設置したいのですが、何か良い方法はありますか? わざわざコントローラに $this->pagenateでパラメータを指定すると行数が増えてしまいますし、 データの取得はなるべくモデルでしたいと思いまして。
そういえば$this->paginate()と言うメソッドと $this->paginateと言うプロパティがあるんだな。 これじゃあ、$this->paginate()の関数ポインタ使う場合どうしたら?とか思ってしまう。 ところでモデルからコントローラを使う手段は無かったと思うから やるならコンポーネントだと思う
>>199 パラメータのほうは Controller::paginateParam とかにしてほしいね。
ぱっと見、わかりにくいし。
というか、findみたいに、毎回指定する方法じゃだめだったんだろうか?
>>198 モデルからコントローラをインポートすればできそうだけど、
そこまで無理をする必要はないかと。
201 :
200 :2009/04/12(日) 09:25:56 ID:???
>>198 pagenateなんか自前でやってるわ
paginateを一々指定したくないと言うならこんな方法も考えられる 1.app_controllerでmyPaginate()を定義、paginate()をラップ 2.myPaginate()内でModel->paginateParamを取得する 3.各モデルにpaginateParamを定義 ただ、paginateのパラメータはモデル毎じゃなくてコントローラ毎に発生するものだと思うけどね。 もしやりたいというならこういう設計もあると言う事で。
>>202 用意されてるのに、わざわざ自前でやる理由を知りたいなぁ。
もしかして、ログイン処理とかも自前?
>>203 >>paginateのパラメータはモデル毎じゃなくてコントローラ毎に発生するものだと思うけどね。
同意見ですね。
ほかで使いまわすことも少ないだろうし。
205 :
203 :2009/04/12(日) 11:25:52 ID:???
やるとしても、myPaginate()で orderとかlimitが指定されていなかった場合に自動的に補完する、と言う程度が良いと思う。 コントローラ側から上書き可能な形にしておけば、やって損と言う事は無いと思う。 あまりコード量は減らないし構造が複雑化するからお勧めしないけどね。
>>199 ありがとうございます。
paginate用コンポーネントにpaginateのプロパティを書いて
$this->コンポーネント名->メソッドで呼び出すことにしました。
コントローラーがすっきりして良いですね。
207 :
199 :2009/04/12(日) 14:50:45 ID:???
俺だったらinitialize()でcontroller->paginateに規定値をセットして コントローラではそのままcontroller->paginate()を呼び出すかな
ペジネートの機能の読み込まれるタイミングによってはinitializeじゃなくstartupかも
>>204 202じゃないけどログイン処理は自前でやってるよ。
他は全てライブラリやコンポーネント使うけど、authコンポーネントは苦手。
FW使うのが目的になってるよなw
AuthもFWだけどね MVCの仕組みだけと言うべきかな Authは最新版なら有用だと思う というか自前でセキュリティホールの無い認証機構作るとかめんどくさすぎるから
>>210 それは誰に対していってるの?
全部Cakeの機能で賄おうとしてる人に対して?
私は
>>211 に同意です。
>>209 > authコンポーネントは苦手。
その気持ち分かります。
以前、Authコンポを使って、グループ毎にログイン後のアクセス画面を変えるというのを作ったけど、
loginRedirectプロパティを書き換えたページ振り分けが上手くいかなくて苦しんだ。
※最初のユーザをログアウトして、別のユーザでログインすると何故か最初のユーザの画面が表示されてしまう...
結局、loginRedirectのプロパティ値は、Sessionに含まれ続けるという事を知って、
ログアウト毎にセッションをクリアすることで上手くいくと思ったのだが、上手く行かず...
結局、autoRedirectしないようにして、グループ情報を確認後に改めてリダイレクトするようにして対応した...orz
皆さんはCakePHPのパフォーマンスをどんな具合で上げていきますか。 特にパラメータによって頻繁に情報が変わる検索ページとか。
>>201 fieldsでグループ化のカラムを書くと、なぜかidも出そうとしてSQLエラーになった。
$params = array(
'fields' => array(
'type',
'COUNT(type) AS "Post__count"',
),
'group' => array('type'),
);
しょうがないからquery使った。
216 :
nobodyさん :2009/04/13(月) 18:04:13 ID:wqehV7U5
CakePHPをインストールしたんだが、何故かインストール時に 表示されるページにCSSが適用されない。 Apacheのドキュメントルート/cake/ 以下にインストールしたんだが、 ここにアクセスするとHTMLのCSSの読み込み部分が href="/cake/css/cake.generic.css" と、なって、 app/webroot/css/cake.generic.css にも cake/console/libs/templates/skel/webroot/css/cake.generic.css にもならない。 baseUrlという変数の中身が鍵らしいというところまでは 分かったんだが、それ以上が何とも。 誰かご教示頼む。
217 :
216 :2009/04/13(月) 18:54:34 ID:???
とりあえずほっといてチュートリアル進めているうちに自己解決しました。 .htaccessがコピーされてないだけだった('A`)
>>210 わかる。フレームワークの機能をどうしても利用しようとして、少しのことでもこだわり過ぎて
逆に効率が悪くなるという。
>>213 気持ちわかってくれてうれしい。同じ人もいたんだ。絶対否定されると思ったけど^^
>>214 自分は3つくらいのサイトをcakephpで作ったけど、ひたすらプラグインにまとめてデザイン無しのページを作り、
それを元にして新たなサイトを構築していってる。
プラグインにまとめまくると普通のコントローラーやビューがごちゃつかないのでいいよ。
特にユーザーログイン、画像アップデート、プロフィールアップデートなどをプラグイン化しておくと、
新たなサイト作ったときもその機能を作らなくても良いので楽。
以前このスレで 慣れるとビヘイビアが多くなる って人がいたけど、今は自分もビヘイビアを多く使うようになってきた。
>>218 プラグイン多用しているということで聞きたいのですが、
たとえばユーザー管理の仕組みをUserプラグインにまとめると、
モデル名にプラグイン名がついて、UserUserモデルになってしまって不恰好なのですが、
どうされてますか?
他にもCommentプラグインのCommentCommentモデルなど・・・
とにかくモデル名が長くなってしまって困っているんですが・・・
あと、そのCake製のサイト見てみたいです。
・・・2chで晒すのはアレですかね?
>>219 218じゃないけど、Userみたいなのはプラグイン名にしない。
もうちょっとまとめたもの、例えばMeiboみたいなのを付ける。
CakePHPを始めたばかりです。
CakePHP 1.2.2.8120とsqlite3を使っています。
インストールには成功したのですが、チュートリアルを
http://book.cakephp.org/ja/view/330/ まで進めた後にインストールの確認ページを見ると、
Cake is NOT able to connect to the database.
というエラーがでてしまい、困っています。
/posts/index を見ても、
Error: Database table posts for model Post was not found.
と出てしまいます。
database.phpの設定は以下の通りです。
var $default = array(
'driver' => 'sqlite'
'connect' => 'sqlite_open',
'persistent' => false,
'host' => 'localhost',
'login' => '',
'password' => '',
'database' => 'cake.db',
'prefix' => '',
'encoding' => 'utf8'
);
どうかよろしくお願いします。
>>221 hostは空でいいよ
つまり、
'host' => '',
>>219 ug プラグインにしてる。で、あとはroutes.php でルーティング。
これだとパスとか関係ないのでイイと思う。逆にルーティングを使わないと
パス名長すぎてかっこわるくなるね。
224 :
221 :2009/04/14(火) 21:27:15 ID:???
>>222 hostsを空にしてみてもダメでした。
dbファイルが無いときはちゃんとdbファイルが作られて、
インストール確認ページに、
Cake is able to connect to the database.
と表示されるのですが、
このdbファイルにテーブルを手動で作ってやると、
Cake is NOT able to connect to the database.
に変わってしまいます。
ユーザはapacheのユーザですし、試しにdbファイルを
777にしてみてもダメでした。
どうかよろしくお願いします。
225 :
nobodyさん :2009/04/14(火) 23:39:51 ID:b4g3iQJt
つか、sqlite3ってまだ未サポートじゃなかったのかと思ってたがどうなんだ
226 :
221 :2009/04/15(水) 12:57:21 ID:???
>>225 とりあえず去年の2月の時期で未サポートという情報は見つけました。
手を抜かずにmysqlを使うことにします。
お騒がせいたしました。
>>227 機能をPHPモジュールで実装して
PHPのコンパイルオプションで選ぶようにするとか
あるいはyumのパッケージをAPIごとに分けて欲しいやつだけ入れるとか
そういう方法で対処するのが一番楽で高機能だと思うがな
もういや、以前NetBeansへのCakePHPフレームワーク対応の 話があったと思うんだけど、どうなったの?
もういや!
saveallしたあとで、バリデートのエラーを拾えないんですが やり方を知っている方がいたら教えてください? コントロール内で $this -> Model -> saveall($data,array('validate' => 'first'); とした後、 $error = $this -> Model -> invalidFields(); としても、バリデートがエラーになっても$errorが空のままです。 saveにすると問題ないのですが、何故なんでしょうか? saveallでバリデートエラーを拾いたい場合は、やっぱり関連する 各モデルごとにバリデートを繰り返しあてるしかないんでしょうか?
もういややわ。
実践本買ったけど、bakeばっかり使っててわかりづらい。 ちょっと前の勉強会だとbake使ってる人はほとんどいなかったのに、最近は違うのか?
bakeの何が分かり辛いんだ というかモデル追加するたびに手書きでコントローラとか書いてたのか?
普段と違う開発手法だから慣れない感じ。 もちろん読みこめば何をやってるのかわかるんだけどさ。 自分は基本的にコードは手書きだよ。
基本的な使い方知るくらい5分かかるかどうかレベルだろ
いや、だからbakeで何をやってるかはわかるって。 ただ、普段の開発手法と違うから読みにくいというだけで。 普段Linux環境だからWindows環境で書かれてるのがわかりづらいとか、 そういうくらいのレベルの話だよ。
bakeにmvcひとつひとつ選択しないで ぜんぶdefaultで、とにかく作成しちゃうモードがあればいいなとおもう
あるじゃん
241 :
nobodyさん :2009/04/21(火) 17:49:53 ID:JXH2p/YI
実践本、俺はbake使い過ぎてわからんというよりは、 scaffoldに固執しすぎてバッドハック的な事をしてるのが気になった。 cakeの仕様の変わりっぷりを考えると、後々まで使える手法じゃない可能性が高いし
Cakeのbakeは使えるがscaffoldは使えないな
scaffoldって初期開発時のテスト用で本番にはあまり使わないイメージがあるんだけど。 という、scaffoldのままでいいコントローラってあまりないよね。
App::importに対してunimport的なものってあるの? そもそもimportで読み込んだコンポーネントってstartup()とか動作するのかな? 単にimportを呼び出したスコープ内でメソッドが使えるだけ?
コントローラからの読み込み以外では適宜startup呼ばないとだめなんじゃない?
そのようだった。 initialize()すら呼ばれないね。 コンポーネント内でApp::importした場合って、 initialize(&$controller)の$controllerにセットされないよね? コンポーネント内ではimport出来ないの?
コントローラのcomponentsに登録されるのかと思ったけどただ単にPHP的にクラスを読み込んでるだけか
実践本3,150円(税込)が Amazonで2,740円(=2,400+340)の中古本が出たので即購入。ラッキー (会社で新品書籍を購入すると10%offという人多いのかなあ?うらやましい)
会社ってか昔の客先は組合の購買で買うと10%OFFだったな 協力会社の人も含めて
>>248 10%オフって・・・。
会社通して仕事の本買えば会社は全額経費になるのにひどい話だな。
俺が以前いた会社は全額経費で落としてくれた。
251 :
nobodyさん :2009/04/22(水) 04:28:09 ID:IoF1Kk6A
経費で買うとタダになるとでも思ってるのか?w 本当にこういう社会人がいたのか ショックだ。
>>251 社会人というか経営者だけど。
別にタダになるとは言ってないだろ。
もう少し税金勉強してからいってくれよ。
いつかは転職するだろうという思いがあるから、 会社の本ではなく、自分の本にしたい。
仕事書籍を経費で購入しても10%offだし、 個人で給与天引きで購入しても10%offだよ。 (書籍は何でもOK、子供の参考書でもOK) 書籍はどちらも職場に届く。
ジャンプとかサンデーも10%OFFだったな 注文すれば多分エロ本でも10%OFFだと思う
以後ここはamazonでどこまで10%オフできるか相談し合う サラリーマンのスレッドとなります。
サラリーマンはamazon使わなくても10%offなので
俺の会社では10%OFFで買えねーぞ。 また大企業だけの特権か?
うちは自腹…。
初歩的なことですまないが debug=0の時にエラー出さないけど ファイルにはエラーを出力するってどうやんの?
セッション機能について質問です。 デフォルトでSession.startをfalseにして、 コントローラーによってtrueにしたりDBか/tmp保存に 切り分けたいのですが、何か良い方法はありますか?
frameタグを使って2分割した場合、 frame src に同じコントローラーの別々のアクションを指定したいんですが、 どう書けば良いんでしょうか?
検索結果のpaginationで、検索引数を持ち回るときってsession使うのが普通なの? みんなはどうしてる?
そういや、以前NetBeansへのCakePHPフレームワーク対応の 話があったと思うんだけど、どうなったの?
Sunがあれだからな。 果たしてOracleがやってくれるかどうか・・・。
セレクトタグで都道府県を選択したいんだけど、 ヘルパーに追加してる人とかっている?
array('北海道'=>'北海道', '青森'=>'青森', '岩手'=>'岩手', '宮城'=>'宮城', '秋田'=>'秋田', '山形'=>'山形', '福島'=>'福島', '茨城'=>'茨城', '栃木'=>'栃木', '群馬'=>'群馬', '埼玉'=>'埼玉', '千葉'=>'千葉', '東京'=>'東京', '神奈川'=>'神奈川', '新潟'=>'新潟', '富山'=>'富山', '石川'=>'石川', '福井'=>'福井', '山梨'=>'山梨', '長野'=>'長野', '岐阜'=>'岐阜', '静岡'=>'静岡', '愛知'=>'愛知', '三重'=>'三重', '滋賀'=>'滋賀', '京都'=>'京都', '大阪'=>'大阪', '兵庫'=>'兵庫', '奈良'=>'奈良', '和歌山'=>'和歌山', '鳥取'=>'鳥取', '島根'=>'島根', '岡山'=>'岡山', '広島'=>'広島', '山口'=>'山口', '徳島'=>'徳島', '香川'=>'香川', '愛媛'=>'愛媛', '高知'=>'高知', '福岡'=>'福岡', '佐賀'=>'佐賀', '長崎'=>'長崎', '熊本'=>'熊本', '大分'=>'大分', '宮崎'=>'宮崎', '鹿児島'=>'鹿児島', '沖縄'=>'沖縄')
それが普通じゃないの? っていうかkeyは要らないんじゃない?
paginate で 「stampが 0 より上のものを優先。でその中でも modified が新しい順に表示したい」 ってとき $this->paginate = array( 'limit' => 10, 'page' => 1 ); $this->paginate['order']['modified'] = 'desc'; $this->paginate['order']['stamp > '] = 0; じゃうまく動かない。 誰かうまい方法ご存じですか?
不等号じゃなしに普通にstampって書いて降順にすればいいんでは?
279 :
nobodyさん :2009/04/28(火) 12:31:08 ID:LqIduRrQ
すみません、バカな私に是非ご教授をお願いします。 画像ファイルアップロード処理のfileタイプで困ってます。 入力画面(ファイル選択など)→確認画面→登録処理 という画面遷移です。 画像ファイル選択の入力時のフォームは $this->input( Hoge.img1,array( 'type' => 'file' ) ) とし、 確認画面では、Hoge.img1の下にnameやtypeなどの属性が自動で設定されています。 確認画面のアクションで、アップした画像を適当なディレクトリへコピーし 一時表示用にそのパスをsave_nameとして新たに属性として設定させています。 さらに登録処理へ渡すために、 $form->input( Hoge.img1,array( 'type' => 'hidden' ) ) としているのですが、 画像の属性がこれでは登録処理へ渡せません。 textタイプなどはこの書き方で、そのまま登録処理へ渡せました。 画像ファイル各属性を、 $form->input( Hoge.img1.name,array( 'type' => 'hidden' ) ) このようにそれぞれ設定してやれば渡せます。 ただ、新たに設定したsave_nameだけは、 $form->input( Hoge.img1.save_name,array( 'type' => 'hidden' ) ) これでは渡すことができません。 画像ファイルの属性を、確認画面を挟んでから登録処理へ渡すのに、 なにか上手い方法はありませんでしょうか? 乱筆、乱文すみませんです。
>>269 セッション使うと、別windowで立ち上げたときに変な挙動になるんだよね。
できればGETの引数でやりたいんだけど、ググった限りだとセッション使う方法しかみつからなかったんで。
PEARまったく知らなくても cakephp使う上で、問題無い? それとも、途中でPEARの知識が必要になる?
>>282 PEAR使わずにcakephpだけでOKだよ。
途中で「やっぱりPEAR必要だった。」って言うことはないと思う。
ネットに公開されている便利部品を使って実現。という事は
多々発生すると思うよ。
それってさ、 「cakephp用の部品です」 って形で公開されてるの?
cakeってmysql必須なの...?
でもMySQLのパスワードとかデーターベース名を セットアップしないと動かなかったよ?
これちょっとやってみたけど、 モデルとビューとコントローラーの 3つを書かないとだめなんだね?
だから $uses = array(); でモデルいらねーっての
<?php foreach ($tasks as $task) { ?> <tr> <td><?php echo h($task['Task']['id']) ?></td> <td><?php echo h($task['Task']['content']) ?></td> <td><?php echo h($task['Task']['status']) ?></td> <td><?php echo h($task['Task']['created']) ?></td> </tr> <?php } ?> ---------------------------------- ↑こういう使い方を見たんだが、 これって全然OKなの?
逆になんで駄目だと思ったの?
ふむmd5に脆弱性があるんだね
http_socketのcookieのところが複数クッキーに対応してないんですね。 あとpage:1とかの:が予約語なんでhtmlチェックとかしたら 怒られるんですよね。 コアライブラリいじるとアップデートの時変更忘れそうだから治して欲しい門です><
cakeをはじめてやる人に 向いているわかりやすい入門書教えてください
C++ → CPP CakePHP → CPP
本屋はシステムに詳しい訳じゃないから分類の間違いは良くあるぜ
質問です。 CakePHP と Ruby on Rails を二股で勉強しています。 言語の仕様上仕方ないのかもしれませんが、 Rails と比べて CakePHP は括弧やシングルクォートが多くなって 疲れる気がします。 けれど、Rails よりも動作環境の敷居が低い CakePHP も魅力です。 煽りじゃなくて、CakePHP と Rails どちらにしようか迷っている人間に、 「CakePHP はこんな所が素敵だよ」と背中を押す一言を頂けたら幸いです。
>>304 質問というか相談ですね。失礼しました。
RoR →サーバー代毎月5,000円必要 cake → 無料のサーバーでも動く
>>306 レスありがとうございます。
やはり稼働環境の敷居という点が大きな違いですね。
>>307 ,308
グラフありがとうございます。
説明不足で恐縮ですが、上記どちらのグラフも以前見たことがあります。
Rails をやりたいものの、
環境的な都合で Rails を選択できない状況になるのが怖く、
かといって(Rails と比べて)記述が面倒だと分かっている CakePHP を
選択するのも微妙な気もして迷っています。
CakePHP で
$a = aa('key1', 1, 'key2', 2); をクォートを省略して、
$a = aa( key1 , 1, key2 , 2); と書いてしまえば、
面倒さが若干無くなるのですが、
「それはダメ!」という声がどこかから聞こえている気もします。
仕事: Cake 趣味: Rails でいいじゃん。面倒くさいな
無料のサーバで動いたって 同じ品質のサーバでうごかすならどっちも5000円だけどな
5000円てどこのこと言ってるの?
313 :
nobodyさん :2009/05/04(月) 08:03:49 ID:Tn5a5ZIs
これはInterface使ったモデルなんかは作れるの?
括弧やシングルクォートぐらいエディタが書いてくれるだろ…。
>>314 秀丸エディタ使ってんだけど、括弧やシングルクォートが自動で出る様にする設定
教えて。すごく便利になる。
PDTいいよ
{ って打つと、なにもしないのに、勝手に } って出てくる。最初はまじでびっくりする。
C#なんて Event a+= まで書いてタブ押したらハンドラ登録からハンドラメソッドの雛形まで出してくれるのを考えると PHPの開発環境はやっぱり貧弱だけどね
それを実現するために俺たちがMSにいくらお伏せしてるか考えればできて当然だろう PHPユーザがZendに還元してる金なんてたかが知れてるし
あなた最低です
秀丸エディタに未練がないって事は金払ってなかったんだな
金払ったら誰でも知ってるあの暗号がそのまま送られてきて萎えたぜw 今はどうか知らないけど
本を薦めるときはアマゾンのリンクにしてよ
ユーザによって見れる見れないページを分ける時 ビューキャッシュは使わないってか使えない?
cakeに挑戦したいけど全くわからない俺に最もわかりやすいチュートリアルのありかを教えてくれ
つうか、時間課金だった頃じゃあるまいに、本家のドキュメントで十分、紙の書籍なんて不便なもの要らんだろ。
紙もネットもそれぞれ利点があるんだから 否定することはないよ
紙の利点って何?
便所でも読めることだな。
ネット乞食って金使う奴を見下す傾向あるよね その情報に対して何の貢献もしてないのに 本書いてる奴は少なくとも貢献してるけど
翻訳ビヘイビアに関する質問なのですが、 これって、 たとえばtitleフィールドで検索するとき、すべての言語のtitleを対象にしてくれたりするのでしょうか? それとも、自前でJOINする必要がありますか?
342 :
131 :2009/05/12(火) 06:50:00 ID:???
343 :
131 :2009/05/12(火) 06:53:20 ID:???
・まずやってみた事 コントローラ側 // BETWEENの値がURLパラメータより引き出した数字。 $this->paginate = array('conditions' => array( 'A.a BETWEEN ? AND ?' => array(5, 10), 'A.delflag = ' => 0,), 'limit' => 20, 'order' => array('A.modified' => 'DESC'),); $this->set( 'list', $this->paginate ); ビュー側 $page = null; $page .= $paginator->prev('←',array(), null, array( 'class' => 'blockToInline' )); $page .= ' '; $page .= $paginator->numbers( array( 'url' => $this->passedArgs, 'modulus'=>2, 'separator'=>' ', 'first'=>1, 'last'=>1,)); $page .= ' '; $page .= $paginator->next('→',array(),null,array( 'class' => 'blockToInline' )); echo $page; 後はlistで適当に。 矢印部分はページの状態によって、DIVタグが勝手に入って改行されてしまうため、 クラスをblockToInlineとして、CSSでインライン要素にしてます。 次に続く・・・
344 :
131 :2009/05/12(火) 06:55:37 ID:???
・結果 ページリンク前半部、1 2 3 辺りはURLパラメータを引き回せるんだけど、 ←や...以降の12 13 14 → などは引き回せずに、条件無しで全件になってしまう。 prev や next にnumbersと同じurlオプション付けても上手く動かず。 ・調査 cakePHP paginator などで検索したあと、セッション使えとかなんか色々やってみたけど、結局出来ず。 ・解決方法 numbersのurlオプションを、prev前に$paginator->optionsに設定する。 $page .= $paginator->options( array('url' => $this->passedArgs,)); numbersのurlオプションは外すが、modulusやfirstなどのオプションはnumbersのまま。 全部optionsに変更したら上手く動かなかったような気がする。 コントローラ側は特に変更なく、 最終的なビュー側のコードはこうなりました。 $page = null; $page .= $paginator->options( array('url' => $this->passedArgs,)); $page .= $paginator->prev('←',array(),null, array( 'class' => 'blockToInline' )); $page .= ' '; $page .= $paginator->numbers( array( 'modulus'=>2, 'separator'=>' ', 'first'=>1, 'last'=>1,)); $page .= ' '; $page .= $paginator->next('→',array(),null,array( 'class' => 'blockToInline' )); 以上です、長々と失礼しました。 私ほどのバカモノは居ないと思いますが、 似たような事でハマっていた方が居たら是非参考に・・・。
つうか、ふっつーに標準的なPHPの機能だけで2時間以内に作れるので、使う意味がないな。
頭いいな
メモとか自分のブログにかけよ こんなとこに書いてもすぐdat落ちするし再利用性無い
モデルでfieldsに関数(count(*)見たいに)で指定するとモデル名で取得できなくなる(0になる)んですけど モデル名で取得する方法ってありますか?
349 :
nobodyさん :2009/05/17(日) 18:51:58 ID:oOtRNQgA
モバイルサイトを作っているのですが、404エラーページをSJISで
吐かせるにはどうしたらいいんでしょうか?
http://www.syuhari.jp/blog/archives/168 この辺を参考にafterFilterで文字コード変換しているのですが、エラーページの場合は
app_controller通らないので、UTF8のまま表示されてしまいます
(html側のエンコード指定はSJISなので、文字化けした状態です)
文字化けなおしたいだけなら404notfoundのhtmlをutf8にする どうしてもsjisにしたいならapacheで設定する 方法は2つ 1.404時の出力ファイルをPHPスクリプトにする 2.404時のヘッダのエンコード設定をsjisにする 検証はしていない
error.phpでも触ればいいんでない
352 :
nobodyさん :2009/05/17(日) 21:40:34 ID:oOtRNQgA
回答ありがとうございます
>>350 1だと、ちょっとスマートではない気がするので、できればCake内で解決したいです
2のヘッダですが、ヘッダ自体はSJISにしているのですが、データの中身はUTF8なので
文字化けしているという状況です
>>351 app/error.phpの中でもafterFilterは効くのでしょうか?
ちょっと試しに書いてみたのですが、動かないようです・・・
error.phpのサンプルがあまり無いため、よくわからないのですが
function error($params)を書いて、その中に処理を書くべきなのでしょうか?
>>352 じゃあsjisにすればいいんじゃないの?
404ページはapacheがデフォルトで持ってるhtmlファイルが出てるだけでしょ
354 :
nobodyさん :2009/05/17(日) 22:38:31 ID:oOtRNQgA
>>353 cakephpの404ページはviews/layout/default.ctpの中に
views/error/error404.ctpが入ったモノが表示されるはずです・・・
function render($action = null, $layout = null, $file = null) { if($this->RequestHandler->isMobile()){ echo mb_convert_encoding(parent::render( $action, $layout, $file ),"SJIS","UTF-8"); exit; } echo parent::render( $action, $layout, $file ); exit; } renderをapp_controllerで上書きすりゃえんじゃね。
requestAction()で別コントローラのアクションを呼び出すと、 そのアクション中でcontroller->set()されたものがビュー(エレメント)内で使えない。 これは元のコントローラでセットしろと言う事? コードのまとまりが悪くなっちゃうと思うんだけど。
358 :
357 :2009/05/18(月) 20:27:41 ID:+BNQiVp5
セットされたものが使えないと言うのは、 requestAction()の呼び出し元のビューでもそうだし、 そのエレメント内でもそう。 つまりrequestAction()で呼び出されたアクション中ではcontroller->set()が機能してないって事だと思う。
359 :
357 :2009/05/18(月) 20:45:14 ID:+BNQiVp5
自分が遭遇してるケースは ビューから View->element(hoge,array('hoge'=>View->requestAction())); と言う形でエレメントを描画しようとしたら この形で呼び出したrequestActionではエレメントでも呼び出し元ビューでも set()された変数がundefinedになるというもの。 requestAction()はコントローラからも呼び出せるが MVC的にはビューから呼び出すのが正しいはず。
360 :
357 :2009/05/18(月) 20:51:41 ID:???
あー、requestAction()で呼び出された場合set()は効かなくて element()の引数で渡すか完全にレンダーして返せと言う事か とりあえずやりたい事は出来そうお騒がせしました
AuthComponentって便利ですね^^
CakePHPを始めるのにオブジェクト指向は必須ですか?
もうすでにあなたはオブジェクトの中にいるわけだけども。
ローカルのWindowsで、Apc入れてcore.phpでキャッシュエンジンに設定したんだけど、
cakeで作ったページにアクセスすると、表示されなくて、そのまま更新すると500エラーが出てしまう。
Apacheのログ見たら、最初表示されない時は304、更新した時は
PHP Fatal error: Cannot redeclare class debugger in 〜\\cake\\libs\\configure.php on line 302, referer:
http://ローカルのアドレス というのが出る。
debuggerの再定義をしてるよー、っていうエラーなのは判ったんだけど、
どう対応すればいいかわからん!!
Apc導入してる人いる?
365 :
nobodyさん :2009/05/19(火) 22:08:47 ID:EQ1qWtUA
ファイルのアップロードコンポーネントって なんかいいのないの?FileHandlerは2007年に作って更新とまってるっぽいんだけど。
You作っちゃいなyo
アップロードコンポーネントなんて使わないで、 app_modelにバリデーション処理を書いて、 コントローラーで普通にcopyすればいいんじゃない? 私はそうしてるけど。
なんで、Model->findのときはconditionsが第1引数なのに、readは二番目なの? 何か合理的な意味があるんでしょうか? 使いにくくて仕方なかとですたい
readにconditionsなんか指定できたっけ?
>>370 ,371
コンディションっつうのはつまりプライマリキーのことです
find の感覚で、第1引数にIDを渡しちゃうんです。
まぁ、慣れればどってこと無いのかもですが。
それに、column を指定しないことはあっても id を指定しないことなんて
滅多と無いんだから、普通に考えたら id を第1に持ってきそうな
気がするんですよ。
だけど、それは私がよく知らないからであって、ひょっとしたら深い意味があるのかなと。
>>372 idは事前に$this->Model->id = xx とかで指定しておくと第2引数のidも省略可でしょ。
そうなるとreadメソッドにとって大事なのはむしろfieldの方である。
とかそんな感じなんじゃないすかね。
1.1と 1.2と めちゃめちゃ違うの? 1.1の本、買っちゃったんだけど?
>>375 実際使ったことないけど、その界隈のブログだとか、スレ読んでると、かなり違うっぽいけど。
RCと正式版とも結構違うとか書いてあったような。
1.1でアプリケーションを組みつつ、1.2の違いを調べながら、問題あるようなら1.2の本買えば?
>>375 まあ基本の動作はそんなに変わってないだろうけど、
1.1で普通にやってたことが1.2では非推奨になってたりとか、
一所懸命なんか作ったはいいけど、1.2なら最初っからその機能あるじゃん。みたいなことはあるから。
まあ動きは本で学んで、あとはオンラインマニュアルで。ってのでいいかもしれんけど。
1.2から完成度が高いフレームワークになったね。
379 :
nobodyさん :2009/05/22(金) 02:38:39 ID:kpKonnkD
>>375 お金に余裕あるのなら1.2の本を買って先に読んだ方がいい
1.1を最初に学ぶと、後から学びなおしの部分が多い
1.1とか実用レベルのフレームワークじゃなくない? 1.2ですらそう思う場面は出てくる 内容はかなり変わってるよ
>>381 俺もそう思う。1.1は時々めっちゃ重くなる時がある。
しかしcakeが非実用レベルだとすると実用レベルのFWって…
1.2で駄目ならベタ書きするしかないなあ。
CakePHPによるWebアプリケーション開発(秀和システム) CakePHPによる実践Webアプリケーション開発(毎日コミュニケーションズ) どっちも上でおすすめされてるけど、1冊選ぶならどっち? ネットで調べた感じだと、秀和→初〜中級向け 毎日→中級向け なイメージ。 毎日はサンプルにエラー多数っぽい。秀和はここ以外レビューとか全然見つからない、で悩み中。 今回フレームワーク初めてで、とりあえず本家チュートリアルは問題なく分かった。 ただ実際にアプリ組もうとするとわかんないことばっかりで Cake使わなければ2日でできるようなものに1週間弱かかったり。なんで基礎からやり直すことにした。 ポケットリファレンスは買うつもりなんだけど、あと1冊 とくに両方読んだ人、どっちにするべきか教えてちょ。
俺はどっちも持ってるが、毎日の方かな。 実際に使えるアプリをサンプルとして挙げているので、サンプル開発の流れがきちんと追えれば 実際のプロジェクトにも十分応用できると思う。 逆に秀和の方、1回読んだきりだ。
>>386 おー、サンクス。
タイトルどおり毎日の方が実践的ってことか。
こっちにしよ。
cake触り始めで謎だらけの中質問します。 ログイン用のフォームを複数画面のはじっこに出しておきたいんだけど、cakeだとめんどくさいでしょうか? おとなしくuser/loginに飛ばすのが一般的でしょうか?
>>388 別にめんどくさくないですよ。
Authでログインされてなければフォーム表示させればいいだけだから。
エレメントでも作っておけばいいです。
>>389 いろいろやってみた結果できました!
ありがとう!
layout使って非ログイン時は常に出しておけば余裕なのでは
auth導入してみたらルートにアクセスするとログインページに勝手にリダイレクトされるんだけどなんなの? こういう仕様?
自己解決。 loginactionをコントローラ別で振り分けてやればいのね。 便利なんだか不便なんだかいまいちだなぁ。
395 :
nobodyさん :2009/05/26(火) 13:30:49 ID:SiC5Hm3y
↓のソースをcakephp+smartyでテストしていて詰まりました。
ttp://3d.rokujyou.com/cake/sample7.html <?php echo $html->input('Urllist/url', array('size' => '40'))?>
の部分を
{$form->input('Urllist/url')}
としたのですがinput内にURLが表示されません。
cakephpのみのテストでは表示されていたのでsmartyが変な処理をしている?ようなきがします。
ご教示お願いします。
396 :
395 :2009/05/26(火) 14:11:09 ID:SiC5Hm3y
以下のように設定したところ表示されましたがこれがデフォルトでしょうか? {$form->input('url',array('value'=>$urllist.Urllist.url))} Smarty導入前は書かなくても表示されたので別の方法がありましたらご教示ください。 *array('value'=>$urllist.Urllist.url)の部分はエラーが出ますので実際はcall_user_func_arrayで加工してあります。
397 :
nobodyさん :2009/05/26(火) 17:38:03 ID:EqLrLRVD
セッションをmysqlのcake_sessionsテーブルで管理して、 findでセッション情報を読みたいのですが、 dataカラムの、シリアライズされた文字列を、 アンシリアライズして配列に格納するにはどうしたらよいでしょうか? unserialize()関数を使ってみましたが、Error at offsetというエラーが出て失敗します。 散々ググりましたが、良い手が見つかりません。 どなたか知恵を貸して下さい。 CakePHPのバージョンは1.2.2.8120で、PHPのバージョンは4.4です。
DB登録した時のエンコードに合わせれば、 アンシリアライズできるんじゃね?
399 :
397 :2009/05/26(火) 19:55:53 ID:EqLrLRVD
>>398 エンコードはUTF8で統一しています。
cake_sessionsテーブルのdataカラムから読み出した文字列を入れると、
下記のような関数の実行と結果になります。
unserialize('Config|a:4:{s:9:"userAgent";s:0:"";s:4:"time";i:1243350003;s:4:"rand";i:1783651587;s:7:"timeout";i:10;')
↓
unserialize() [function.unserialize]: Error at offset 0 of 102 bytes
CakePHP で動いている CMS の色々なサンプルを見たいのですが いま、まともに動いているプロジェクトって wildflower ぐらい?
こんにちは。 <?php echo $form->day('DATE', null, array("disabled"=>true));?> などとして、読み取り専用で表示されるようにしたいのです。 このような書き方で、表示上は確かに読み取り専用になるのですが、 上記を含むformのsubmitを実行すると、真っ白な画面が表示されてしまいます。 何か書き方が悪いのか、代替案があるのか、ご指導いただければと思います。
>>401 真っ白な画面ってのが意味不明。エラー見ようよ。
俺も読み取り専用で表示してるのあるけど別に問題なし。
>>402 エラーが何も出ていないんです・・・。
blackHoleメソッドが呼ばれている気がするのですが、別にrequireAuthも
設定していないんですよね・・・。
404 :
401 :2009/05/27(水) 15:46:52 ID:???
追記です。 textareaなど、readonly属性があるものは、 $form->textarea('aaa, array("cols"=>40,"rows"=>5,"readonly"=>true)); などと書いて問題なく実現できています。 selectだけが動作しない状況です。
エラーが表示されてないだけじゃなかろか。 Configure::write('debug', 0); とかになってない?
407 :
401 :2009/05/27(水) 20:12:40 ID:???
>>405 Configure::write('debug', 2);
となっています。
>>406 すみません。
表示→submitの一連の流れが実行できるかという話です。
そもそもやりたいことというのが、
入力→確認→save
という一連の流れで使用するviewを同一のもので使いまわしたく、
readonly,disabledを使って表示の制御ができればいいかなと思ったのです。
暫定的に確認用のviewを用意することで回避はしますが、可能であれば
同一viewでやりたいと思っていますので、もしも情報ありましたらお教え
いただければと思います。
デバッグレベル0が原因ではないとしたら。 controllerファイルとviewファイルで文字コードが食い違っとる exit;の消し忘れ bomの混入 ...あたりを疑ってみれ
記事とタグとコメントの関係で、 記事とタグは 多対多 記事とコメントは 一対多 これをContainable使ってあるタグに属してるニュースをコメントごと取ってきたいです。 $option['contain']['Tag']['conditions'] = array('id' => $tag_id); $option['contain']['Comment']['fields'] = array('name', 'comment', 'created'); $option['fields'] = array('News.contents'); $data = $this->find('all', $option); これだと、タグに属して居ないにもかかわらずTagの中身がEmptyになった状態で検索に引っかかってしまいます。 何かいい方法はないのでしょうか。
array 0 => array 'News' => array 'contents' => string 'テスト' (length=16) 'id' => string '1' (length=1) 'Comment' => array 0 => array ... 1 => array ... 'Tag' => array empty このような状態です。
>>409 $option['conditions'] = array('NewsTag.tag_id' => $tag_id);
にしてやればいいと思うよ。
Fast cakephp って本。 なんのために存在するのか、 まったく意味がわからない。 なにこの本。
そもそも紙の本が要らなくなって久しい。
紙の本より公式のbookのがわかりやすくないか?
>>415 コントローラは複数形
真っ白なのはCake設置の段階で何かが間違ってる可能性が高い
とりあえずブログチュートリアルでもやれ
複数形じゃなくても大丈夫だよ。
Cake標準のXMLクラスって、Xpathには対応しないのかな? Xpath使えないんだったら、普通にSimpleXML使うよなぁ・・・ PHP4でも使えるのはでかいけど。
HTMLヘルパーとかFormヘルパーで自動生成するとdivdivしすぎてて
ケータイサイト向けだと使いにくすぎる
せっかくの自動生成なのに、ケータイのアホ仕様のせいで!
>>418 SimpleXMLが十分便利なのでそっちつかっちゃうな
http://blog.ecworks.jp/ktai ここで出されてるライブラリ使ってるんだけどさ、
画像表示おかしくない?
相対URL生成する時はちゃんとRouter::url()通してくれないと
/~hoge/hugaとかに置いてる時におかしくなるんだよね。
バカなの死ぬの
>>420 使えないライブラリだと思うんなら自分で修正するか、他を探すか
1から自分で作ればいいじゃん
そんなこともできないの?
バカなの?死ぬの?
1.2のpaginationってなんでfirst, number, lastだけ classもidもないただのspanが勝手につくの? prevとかnextはspanなんてつかないのに なんか気持ち悪いから消したいんだけど、第2引数にarray('tag'=>false)を 入れても<span>〜</span>が<>〜</>になって消えないし
作者に直接連絡する勇気すらないやつが掲示板で叩くとか
>>420 確かにRouter::url()使わないでURL指定するライブラリを公開されると苦労するが
421や423や424の言う通り、ここで叩くお前がおかしい
バカなの?死ぬの?
ドキュメントルートより上のディレクトリにファイルを置くことができないレンタルサーバを使っています。マニュアルでいう開発用のインストールしか選択肢がないのですが、このようなレンタルサーバではCakephpの使用は控えた方がいいのでしょうか?
>>426 要求される「セキュリティ」の考え方による。CakePHPを分散設置する目的ってな〜んだ?
428 :
420 :2009/06/01(月) 12:36:50 ID:???
作者の掲示板に書こうと思ったんだけどメルアド記載しなきゃいけなかったし ここで本当に俺の言ってることがあってるかどうか確かめたかったんだ。 やっぱりRouter::url()使うのが正解なんだね。死なないよ
使ってないなら使ってない理由があるんじゃまいか?
>>429 その使ってない理由はなんなんだろうか。
>>428 専門板できもい言い回し使うから叩かれるんだろうが
普通に
Router::url()使ってないからルートに置かない場合に
不便なんだけど、修正提案出した方がいいかな?
とか聞けばいいものを
432 :
420 :2009/06/01(月) 18:18:49 ID:???
433 :
nobodyさん :2009/06/01(月) 18:57:16 ID:QwyjBfuL
findのconditionsを指定するとき array("Post.created > DATE_SUB(NOW(), INTERVAL ? WEEK)" => "2")) とかやるより、あらかじめPHP側で array("Post.created >" => date('Y-m-d H:i:s', strtotime("-2 weeks")) とやった方がいいの? 今までDATE_SUB使ってたんだけど、cookbookを見たら下の方を使っていたので 下の方にかき方変えようか迷ってるんだけど・・・
420のたたきっぷりはビックリして何も言えなかったけど、 ktailibraryの作者さんの大人な対応ぶりにはさらにビックリ。 やっぱりできるプログラマーは、違いますね!
>>433 DB依存のコードはなるべく書かないほうが正解じゃなかろか。
そのためのDBラッパーなんだし。
>>436 言われてみればそうだな。
回答ありがとう。
438 :
420 :2009/06/01(月) 21:19:43 ID:???
>>434 ごめんなさいごめんなさいごめんなさい><
現在、サイト内の example.com/calendar がwebrootになっていて、 それ以外のフォルダには以前からあるCMSのファイルやHTMLファイルがあります。 この状態で、calendar以外の場所、つまりappの外からcakeのモデルにアクセスすることは可能ですか?
442 :
440 :2009/06/02(火) 19:04:30 ID:???
>>441 レスありがとうございます。
/calender にcakeをインストールしてイベント情報などを入れていて、
そのイベントのリストを別のディレクトリにあるページに表示したいんです。
feed経由やcakeを通さずに直接DBにクエリを投げる方法は思いつくのですが、
コントローラ内のアクションを通せば抽出も楽だし、
更に可能ならヘルパーやエレメントもそのまま使えないかな、と。
>>442 なんで別ディレクトリから読む必要があるのかわからないけど
cakeでcron動かす時の応用でなんとかなるんじゃない?
$_GET['url'] = "event/view/1";
require_once( "/home/hoge/www/calendar/index.php" );
ってしたらexample.com/calendar/event/view/1にアクセスしたのと同じことになるから
それで何とかならないのかな。
俺ならその別ページとやらからAjaxで呼んでみるかな
445 :
440 :2009/06/02(火) 23:08:37 ID:???
情報ありがとうございます。
サイト全体は既存のCMSで管理されているため、まるっとcakeにしちゃうことはできず、
/calendar 以下にappを構築して、他のディレクトリから必要に応じて使えればと考えました。
もしかすると何か根本的に考え方を間違えているのかもしれませんが…
>>443 お、なるほど。そんな手があるんですね。
画面遷移があるとまた一工夫必要っぽいですが、今回はこれでいけそうな気がします。
>>444 Ajaxで読み込むなら結構自由に何でもやれそうですね。
ただやっぱりクライアント環境に依存しないに越したことはないので、
まずは
>>443 の方法を試してみようと思います。
ありがとうございました!
俺ならその別ページとやらからJSON-RPCで呼んでみるかな
iframで既存のサイトの一部分をcakeで出すとか。
cakeの時代になると、Smartyの扱いってどうなるの?
ぞんざいになるの
ひややか ↓ なまあたたかい ↓ ぞんざい
cakeのチェックボックスを下にずらーっと並べないで きれいに並べたいんだけどなんかないのですくわ
>>454 cssでdivの幅指定 & float:left
>>455-456 ありがとう出来たよ。
幅を%指定にすることによって1行にいくつ並べるかも出来た。
MVC の初歩的な質問で申し訳ないのですが、 条件付の paginate したいときはコントローラー内で書くしかないのでしょうか。 何となく、SQL の発行とはかモデル内でやった方が良いかなぁと思うのですが、、
>>458 前に似たような質問と回答があったから、
そちらを見てみては。
460 :
458 :2009/06/05(金) 19:17:20 ID:???
>>459 ありがとうございます。
>>198-208 コンポーネントでやってみることにします。
私は何でもコントローラーに詰め込んでしまう傾向があるので、
MVC の基本から学んでみることにします。
h()とかって使ってるバカいるの?
>>461 まずいの?
昔はENT_QUOTEついてなかったりしたけど。
>>462 いまだってついてないだろ?
それとも最近はついたの?
>>464 シングルクオートをエスケープしないだろ
468 :
nobodyさん :2009/06/07(日) 23:06:58 ID:IWMv9X2i
いやーアソシエーション便利やわーって、ふと疑問に思ったのですが、 回帰的にHABTMってできるんでしょうか? 例えばpostsなんてテーブルがあって、 posts_postsなんて結合用のテーブルを用意して、 一つのテーブルを回帰的に多対多にするとか。 無理?それとも不幸になる?
作り込み始めたら、すっげー遅くなってきた。 リンク押すとすぐに表示される場合もあれば、10秒くらいかかることもある。 キャッシュは使ってるんですが、なにかもっと速くする方法ないでしょうかね?
APC、クエリキャッシュとアソシエーションを減らせばおk。
>>469 なんかネックになってるSQLがあって、10秒くらいかかってるんじゃね?
キャッシュが効いてる時はすぐに表示されると言うだけで
>>469 cakephp1.1?
1.1は遅いよ。1.2にすべし。
複数のコントローラ内で使用する共通の処理をさせたい時はビヘイビアで設定するのが正しいでしょうか? ビヘイビアで設定しても呼び出し方が分からず困ってます。 TreeBehaviorとか決まった名前のビヘイビアしか作れないのでしょうか?
本読んだけど、まったくわからない。
>>474 複数のモデル内 => ビヘイビア
複数のコントローラ => コンポーネント
です。
名前は hoge ビヘイビアでも abesouri ビヘイビアでも何でも作れますよ。
あなたはコントローラー内でのモデルの使い方がいまいちわかっていないと思います。
>>474 >>476 のようにcomponentで実装するのが良いでしょう
より簡単なやり方としては。
app_controller.phpで共通する処理を書いてあげると、すべてのcontrollerで利用できます。
※ただし、URLでアクセスされないように、function _hoge() のように _ をつけてね
Ajaxヘルパーのオートコンプリートを試しているのですが、 テキストフィールドに文字列を入力してエンターを押しても候補が表示されず、 1文字削除すると、候補が表示されます。 どうすれば直るのでしょうか?
479 :
478 :2009/06/10(水) 13:28:23 ID:???
どうやらfirefoxの場合に起こるようです。 何か対処法はないでしょうか・・・
>>476-477 さん
レスありがとうございます。
呼び出し方として
モデル->ビヘイビア
ではなく
コントローラ->{モデル,ビヘイビア}
ということでしょうか?
おんなじ処理(たとえばPV集計など)を書くのにコンポーネントだとMVC的に間違っている気がするのですが
レイアウトの表示文字コードを変えるのはどうすればいいでしょうか? core.php内で設定する以外でお願いします。
483 :
482 :2009/06/10(水) 15:39:30 ID:???
間違えた afterRender() だた
>>480 まだいまいち状況がつかめていないが。
共通の処理というのが特定のモデルを使うようなものであれば、
そのモデルを各コントローラーから呼んであげればよい
モデルを使わないのであれば、各コントローラーで処理する
各コントローラーの処理を共通化するのは
>>476-477
みんなaa()って使ってる? どういう場面で使えばいいのかわかんなくて、一度も使ってないんだけど
まぁ、俺も使い所というか使う意義は分んないけど。 必要無いものを無理に使う必要はないと思う。
俺は e() も使ってない。
なにこれ難しすぎる わけわからん 全然スイーツじゃねぇし
ぐ・・、つ・釣りか・・ しかし、もう我慢できない! スイーツな名前だけどスイーツには使いこなせませんっ! 異論は認める
意外とスイーツは簡単に使いこなしてたりして マニュアル主義的なところあるし
>>486 手を出さないのが無難とはわかりつつも、わざわざグローバル関数として
用意されているのだから、便利な使い方があるに違いないと邪推してしまう
>>487 e()って何だよと思って調べたらecho()か
だいたいechoは()でくくらないで使う方が普通だと思うし
それを考えると、逆に使いづらくなってるような
俺が使うのはhと、デバッグ時にprくらい
気分でenvとか使っちゃうことがあるけど、
自分でも何で使ってるのかわからない
短くするの流行ってるのかね いっそのこと逆にsystem.out.print()とか作れよw
「いっそのこと」の使い方が間違ってないかw
viewでコードが横に長くなるのが嫌なので、view内でe()とh()はよく使う。 e(h())ってなるのがいやなので、eh()ってのを作って使うとより便利だけどね。
CakePHPでmysql_real_escape_string は使いませんか?
>>495 基本的に勝手にエスケープされるのでほとんど使わない
そういやCakeだとLIKのワイルドカードの%と_がエスケープされないけど
これは自分でエスケープしなきゃいけないのかね
フレームワークでは意図的に入れたワイルドカードか不意にポストされた
ワイルドカードか判断できないってことなのかな
e()なんて初めて知った。
>>498 一度使うと病みつきになるよ。俺のコードe()だらけだ。
>>496 判断できてるからエスケープされてないんじゃないの?
俺もe()派。でもカッコだらけでわけわからなくなることが時々。
>>500 んー、検索フォームで%をポストされると、そのままワイルドカードに
なっちゃうんだよね
hoge%fugaで検索すると%hoge%fuga%にマッチするのを探しちゃう
本当なら%hoge\%fuga%になってほしいところなんだけど
まあ、そこまで問題ではないのかもしれないけど、意図しない動作なので気になる
>>502 %は、エスケープされないみたいだね。
シングルクオート、ダブルクオートはエスケープされてるから、仕様っぽいな
コンポーネントで%を付加&エスケープ function wildcard($text ,$escape = true ,$left = true ,$right = true ,$wc = '%') { return (empty($left) ? '' : $wc) . (str_replace($wc ,'\' . $wc ,$text)) . (empty($right) ? '' : $wc); }
これって、入力値に対してデータ検索するようなプログラムの場合 %ほげほげ って入力されたら、インデックスがあたらなくてサーバを簡単にあぼんできるってこと?
>
>>508 ユーザーからの入力値を受け付けて、なおかつワイルドカードで始まらない
like文っていうのはあまり想像できないけどな。
cakeのチューニングについて詳しく書かれてるサイトとか教えてちょんまげ
出力されたHTMLの先頭にゴミデータが表示されるんですが どこで出ているのか、特定できなくて困っています。 コントローラの最後にechoを入れるとゴミデータの前、 VIEWの最初に文字を入れるとゴミデータの後に 表示されるので、コントローラとViewの間で表示されていそうなんですが どこがあやしいかわかりますか? これをしてみれば?みたいなことがあれば教えてください。
ごみデータって具体的になんですか
513 :
511 :2009/06/12(金) 21:14:17 ID:???
自己解決しました。
文字コードが誤って判定されていました。
http_outputを設定することで解決しました。
httpだと問題なく動作していたんですが、httpsにしたとたん
問題が発生しました。
SSLでは文字コードの判定が違うんでしょうか。
>>512 ゴミデータは?でした。
h(); はだいぶ短くなるから使うのわかるけどさ。 e(); は echo の略だから 1文字しか短くならない。 だから使わないんだよね。
apc入れようとしてるんだけど、さくらサーバでも導入する事できるの?
日本語でおk
英語が雑なので分かりにくいのでは?
もうCake本いらないだろ・・・symfonyのを出してくれよ;
そりゃ売れるものを出すだろ
Bakerの皆さんに質問です。 最近のCakePHPではPostgreSQLでまともに動きますか? それと、バグは収束傾向でしょうか?
>>521 たか〜
CakePHPにこんな分厚いマニュアルなんているのかよ
確かに高いが、日本に何人いるかわからんBakerのための本と考えると こんなもんなのかと思える ただのPHPと違ってユーザー数は一桁違うだろうからね
Componentでsmartyをつかいたいのですが、 <?php class Mail_sendComponent{ //メール内容生成------------------------ var $smarty; var $tmp_path; var $url; function make_mailbody($tmp_path,$url){ App::import('Vendor','smarty/Smarty.class'); //合成 $this->smarty->assign("url",$url); $out = $this->smarty->fetch ($tmp_path); return $out; } } ?> エラー内容 Fatal error: Call to a member function assign() on a non-object in /パス/mail_send.php on line 18 どしたらいいのでしょうか・・・・
どうしたら良いも何も…。
529 :
527 :2009/06/18(木) 13:09:19 ID:???
初心者の為、 そもそものコピペの流用なのですが、 vendor("smarty/Smarty.class"); ↓ App::import('Vendor','smarty/Smarty.class'); に変えただけなのですが・・・・ $this->smarty =new Smarty(); とか、そういう方向でしょうか・・・?
チェックボックスを作成しました。 出力されたHTMLで、 data[User][job] の後の括弧の中身が空欄なのですが、これは正常ですか? チェックボックスにチェックをしてFormを送信しても値が取れないんです。 出力されたHTML <input type="checkbox" name="data[User][job][]" value="1" id="UserJob1" /><label>ヒキ</label> <input type="checkbox" name="data[User][job][]" value="2" id="UserJob2" /><label>ニート</label> <input type="checkbox" name="data[User][job][]" value="3" id="UserJob3" /><label>フリーター</label> VIEWの記述 echo $form->input('job', array('label' => '仕事', 'type' => 'select', 'multiple' => 'checkbox', 'options' => $jobs)); コントローラーの記述 $jobs = $this->User->Job->find('list'); $this->set(compact('jobs'));
>>530 値が取れないって、どうやったら取れなかったの?
debugは有効にしてる?
レスありがとうございます。 data[User][job]の中身がNULLでした。
すいません。
僕の質問の仕方がわかりづらいと思うので、少し変えます。
>>530 のHTMLでチェックボックスをONにして送信しても、empty(data[User][job]) がTRUEになります。
チェックボックスがONになっているという情報はどのように取得できるのでしょうか?
$も'も省略されるとphpっぽくないよな。
536 :
534 :2009/06/18(木) 18:08:35 ID:???
一応分りやすいように・・ $this->data ね debugをオンにしてないってオチじゃないよね?
>>533 debug( $this->data );
を、controllerに記述して中身を確認しましょう。
そしたらあとはカラムの型に応じて適当に処理すべし
新規でPHPの構築サイト案件がちらちらマッチングに出てるが
そのほとんどはデザイナ会社が勘違い(or 背伸び)で取ってきた案件が多いな。
だから
>>521 のような本が伸びるんだろう。
お手数かけます。 debug( $this->data ); をしました。 結果 Array ( [User] => Array ( [hoge] => 1 [job] => [hogehoge] =>aaa ) ) やっぱりjobの中に何も入ってないです。
アソシエーションはこれです。
var $belongsTo = array(
'Job' => array(
'className' => 'Job',
'foreignKey' => 'job_id',
'conditions' => '',
'fields' => '',
'order' => ''
)
);
HABTMではありません。
あと、申しわけないのですが、VIEWの記述は
>>530 のヤツには少し間違いがありました。正しくはこれです。
出力されたHTML
<input type="checkbox" name="data[User][job][]" value="1" id="UserJob1" /><label>ヒキ</label>
<input type="checkbox" name="data[User][job][]" value="2" id="UserJob2" /><label>ニート</label>
<input type="checkbox" name="data[User][job][]" value="3" id="UserJob3" /><label>フリーター</label>
VIEWの記述 (※inputの後は'job_id'でした)
echo $form->input('job_id', array('label' => '仕事', 'type' => 'select', 'multiple' => 'checkbox', 'options' => $jobs));
コントローラーの記述
$jobs = $this->User->Job->find('list');
$this->set(compact('jobs'));
それで、少しいじったらうまくいきました。 VIEWの記述 echo $form->input('job_id_hoge', array('label' => '仕事', 'type' => 'select', 'multiple' => 'checkbox', 'options' => $jobs)); 「$form->input(」の後ろを「job_id_hoge」にしたらうまくいきました。 Userテーブルに存在する列と同じ名前だとうまくいかないみたい? 何でかわかりませんが・・・。
>>542-543 なんだjob_idなのか。
habtmじゃないとしたらUser.job_idにはint型ひとつしか入らないでしょ。
だからUser.job_idは複数選択できちゃだめ。
で、field にないデータが欲しいときは、架空のフィールド(例User.jobs)を作ってあげるイメージ
そしたら、multiple checkbox でも何でもできるから、$this->data['User']['jobs']に所望のデータが入るってこと。
データが消えたのは重複するjob_idが存在したか、もしくはモデルのデータを参照したとかかな?
Titleというモデルとコントローラを作り、 <?php class TitlesController extends AppController { var $name = 'Titles'; var $scaffold; } ?> としたところ、 viewアクションで Undefined variable: title が発生してしまいました。 いろいろ調べたところ、 $controller::set()で titleにセットすると、 $titleにセットされずに$view::pageTitleにセットされるのが原因のようです。 titleを別の名前にするのが手っ取り早いとは思うのですが、 何か他に解決方法はないでしょうか?
>>545 viewアクションだけ自作するのがよさげ
nullチェックと$this->set('title' ,$this->Title->read ・・・ くらいしかしてないから
547 :
545 :2009/06/21(日) 00:44:37 ID:???
>>546 特定のアクションだけ自作とかできたんですね。
ありがとうございます。
しかしtitleが使えないとなると、なんて変数名でセットしようか・・・
こういうところで悩んでしまってぜんぜん進まない;
Tree ビヘイビアで作ったモデルを
generateTreeList でツリー構造の連想配列で取得できないのでしょうか。
ttp://book.cakephp.org/ja/view/228/Basic-Usage 例えばこんな感じ。
$ary = array(
'id' =>1,
'name' => 'カテゴリ',
'children' => array(
'id' => 2,
'name' => '楽しみ',
'children' => array(
array('id' => 3, 'name' => 'スポーツ',
'children' => array(
array('id' => 4, 'name' => 'サーフィン'),
array('id' => 5, 'name' => 'スケート'),
),
),
array('id' => 6, 'name' => '友人',
'children' => array(
array('id' => 7, 'name' => 'ジェラルド'),
array('id' => 8, 'name' => 'グウェンドリン'),
),
),
),
),
);
>>548 できなかったと思う
取得後に加工するのが手っ取り早い
>>548 find('threaded')でできなかったっけ?
551 :
548 :2009/06/22(月) 02:56:27 ID:???
552 :
549 :2009/06/22(月) 09:41:51 ID:???
>>551 ごめん、勝手に array[ 'id' ] = 'name' 形式に脳内変換してた。。。
553 :
548 :2009/06/23(火) 05:15:19 ID:???
ググっても見つからなかったもので…。
beforeFilter でコンポーネントから取得した値を
同じコントローラー内で使うのはどうすれば良いでしょうか
function beforeFilter() {
$member = $this->ComponentsName->getMember();
$this->set('member', $member);
}
function view() {
←ここで使いたい
}
変数を展開してみて上のように set していれば $this->viewVars で値は取れるのですが
1.2 でなくなる(でもなくなってない)ので使って良いものか…。
ttp://labs.uechoco.com/blog/2008/02/phpcakephpviewvars.html
>>553 適当にメンバ変数に入れてあげればよい
$this->Member = $this->ComponentsName->getMember();
※もちろんコンポーネント内で処理しても良い
setは、あくまでviewに変数を受け渡すものだから、二度手間でもview()の最後でsetしてあげてください
cronで回す処理はcakeを使わないほうがよいのでしょうか。 コントローラとアクションは引数で渡す?? cron以外はcakeで開発しているので、設定ファイル等同じものが 使えたほうがいいと思うのですが、難しいですよね。
昨日ダウンロードして初めて触ってみた。 始めはちんぷんかんぷんだったけど、なんか面白そうだ。 でもさ、命名規則が煩わしいし、よくわかんねー。例えば、 Php Phps php phps どれか一つでも違ってたらアウトだよね? 「php」っていうキーワードがあるなら、なんでそれを全体に 反映させないのかと思った。プロジェクト毎に大文字小文字 や単数形・複数形を意識して、変数やパラメータを書き換え なきゃいけないなんて。。
我侭言うな
命名規則が緩かったらフレームワークの意味がないな。
>>558 まずCoC(やDRYとか)の概念を理解することがRoR流のフレームワークを学ぶときの近道。
命名規則はすぐ慣れるから安心しる(なぜそうなのかが分かれば間違えることはない)
日本人だと「基本は単数形」って覚えちゃうけど、 単数複数の概念があると、単数形や複数形で書くメリットも大きい。 あと、単数複数が間違ってたら、エラーページが出てきて 「○○ってクラスがねえから、こんな感じで書け!」って 教えてくれるので単数複数を間違えてもすぐ気づくし。
>>560 ×フレームワークの意味が無い
○RoR系の意味が無い
複数系なんて、中学で習ったし、基本 s つけるだけなのに案外覚えてないよね。 俺も苦労した。 今のバージョンは indexs でOKだけど、以前は indexcies? にしないとエラーになった時があった。
俺はdataの単数系が云々という既出の話で苦労した datumなんて知らねえよ
不規則変化の動詞、名詞は頻出だということで、 やたら覚えさせられたが。 俺はもう古い時代の人間なのか。
>>558 慣れれば何の問題もないよ。
URLの事を言ってるなら、route.phpでいくらでも簡単に変えられる。
568 :
nobodyさん :2009/06/25(木) 01:25:04 ID:BlJ0aidQ
>>568 $form->create('Post',array("action"=>"add".DS.$id));
571 :
nobodyさん :2009/06/25(木) 05:20:41 ID:BlJ0aidQ
>>568 $form->create('Post', array('url'=>'/'.$this->params['url']['url']));
>>568 >>572 $form->create('Post', array('url'=>$this->here));
>>570 でも良いが、namedと勘違いされないためには↓じゃね?
$form->create(null, array('url' => array('controller' => 'recipes', 'action' => 'add', '1')));
createは複雑なルーティングしてると苦労する
prefixとparamsルーティングあると思うようにリバースルーティングしてくれなくて挫折した
正攻法は後者。うまくいかないときは前者で対処してる
574 :
nobodyさん :2009/06/25(木) 17:16:17 ID:BlJ0aidQ
$this->model->getLastInsertID()という関数が、apache再起動したら使えなくなってしまいました。 サーバー停止してしまうと、モデルのなにかが初期化されてしまうのでしょうか?
575 :
nobodyさん :2009/06/25(木) 17:21:59 ID:BlJ0aidQ
同様にsave()でのinsert時もauto_incrementが出来なくなってしまいました。
>>574 あくまで推測の域だが、save後にlastidが取れるのはセッションに
保存してるからじゃないかな。mysqlみたいにSQLで用意してる
DBもあるけど、そうじゃないのもあるし、セッションが失われる行動を
取ると当然なくなると思う。
オートインクリはサポートしてないDBもあるから、それに合わせた
コーディングが出来てないんじゃないの?
ソースとかマニュアル見てみたけど推測の域を出ないな。
というか、lastidってセッションかpost backしてなくなら 排他でselect maxか、同一トラン内でしか取得出来んだろ。
579 :
nobodyさん :2009/06/26(金) 11:22:52 ID:LY+hfClR
$this->flash('unko', 'add/'.$id);
とやると実際のflash画面には$idが抜けてしまいます。
>>568 さんに近いような気もするんですが、
$idをflashに渡すにはどうすれば良いですか?
>>579 '/contorollers/add/' . $id
かrouting用の表記で
>>579 flashに変数を渡そうとしたことが無い。
発想を変えてみては?何で渡したいのか知らんけど。
$this->flash($id . 'さんは unko をたっぷりしました', 'add');
これでflashのメッセージには $id が渡る。
flashを抜けた先でさらに id を使いたい場合は
$this->flash($id . 'さんは unko をたっぷりしました', 'add/'.$id);
で、いいんじゃないの。
flashをオーバーライドすりゃええやん
584 :
nobodyさん :2009/06/27(土) 19:00:54 ID:CJ8L5rCq
質問です。 ビュー内の関数内でヘルパーが呼び出す方法がわかりません。 たとえば、 function foo() { return $html->link("hoge", "hoge"); } のようにすると、$html が無いと怒られてしまいます。 global $html; のように宣言しても駄目みたいです・・。 ビュー内に直接記述すると、正しく機能してくれるので、宣言忘れということは無いと思います。 どなたか解決策をご存知の方、ご教授いただけないでしょうか。
>>584 var $helpers = array('Html');
function foo() {
return $this->Html->link("hoge", "hoge");
}
>>585 です
Helper内と勘違いした。ごめん
View内で関数つかうのなら、Helperにしたほうがよくないかい?
テンプレート内に関数いれるとなると、MVCの役割的にもよくないと思う。
>>584 >>586 にあるとおり独自のHelperを作成してください。
そのなかで$helpers=array('Html')とでもやっておけば$this->Html->link()などと使えます。
588 :
584 :2009/06/27(土) 22:07:39 ID:CJ8L5rCq
>>586 >>587 丁寧なご説明ありがとうございます。
$rss ヘルパーに、$rss->items($data, "a_function_name") というアイテムの一覧を出力するメソッドがあるのですが、この 2 番目の引数がグローバル関数の名前を取る仕様になっているのです。
$rss->items の第 2 変数にヘルパーのメソッドが渡せれば解決するのですが・・・;
>>588 $rss->items($item, array( $hoge ,"fuga" ) )
とHogeヘルパーのfugaメソッドを渡せば行けるんじゃね?
>>588-589 こうかな?試してないけど
$rss->items($item, array( ClassRegistry::getObject('view')->getVar('hoge') ,"fuga" ) )
http://localhost/cakephp/posts/index これでアクセスすると下記のようなエラーが出ます
何がおかしいんでしょうか?
Error: The view for PostsController::index() was not found.
Error: Confirm you have created the file: C:\xampp\htdocs\cakephp\app\views\posts\index.ctp
Notice: If you want to customize this error message, create app\views\errors\missing_view.ctp
あら再起動したら見れました^^; 失礼
593 :
nobodyさん :2009/07/04(土) 17:05:48 ID:5YKVYrNe
HBTMのバリデーションルール 最低一つは選択ってどうかけばいいですか?? 教えて! UserとDinnerがあったとして、 users/add.ctpあたりで > echo $form->input('Dinner', > array( > 'multiple' => 'checkbox', > ) > ); こんな感じのときに、 一つも選択していなければエラーにしたい。 ルールは > 'rule' => array('multiple', array('min' => 1)) これでいいのかな?? Userモデル?Dinnerモデル? DinnersUser??? どこにどうかけばいーですか?
>>588 それはある
詰め込み世代の新人って指示待ちか出来もしない癖に勝手な事やって迷惑掛けてくれる奴かの両極端だった
ここ数年の奴らは、意外と使える
我々にしてもそうだったけど目で盗んで憶えるというか自分の頭で考えて言われなくても的確に動けるのが増えた気がする
日本人らしさが戻って来た感じ
シェルを動かすときにパラメータを渡すことができますか? 例えばシェルが Class hogeShell extends Shell { function hoge($id) { 〜 としたときにコマンドを叩くときこの $id を渡したい。
" information "って単語、単・複数形の区別が無いのですね。 Informations ってテーブル切って、bakeしたら「テーブルねぇぞ!」って怒られたら、調べてみたら Information で統一だった 自分の英語レベルの低さに悲しくなる...orz
599 :
593 :2009/07/06(月) 17:06:53 ID:7VJoQdab
>>598 ありがとうございます。
う〜〜〜ん、なんかスッキリしない方法ですねやっぱり。
よくありそうな仕様なのに正攻法でないというか。。
そうも言ってられませんのでいただきましたURLのような実装でいこうと思います。
ありがとうございました
600 :
593 :2009/07/06(月) 20:30:54 ID:7VJoQdab
以下で実装しました。
>>598 で教えていただいたので基本やりましたが、
独自メソッドを置く方法をとる必要もなかったので組み込みルールでやりました。
一応書いておきます。
UserとDinnerがあったとして、
users/add.ctpあたりで
> echo $form->input('Dinner',
> array(
> 'multiple' => 'checkbox',
> )
> );
のとき、
models/dinner.php
> var $validate = array(
> 'Dinner' => array(
> 'oneOrMore' => array(
> 'rule' => array('multiple', array('min' => 1)),
> ),
> ),
> );
601 :
593 :2009/07/06(月) 20:35:20 ID:7VJoQdab
(つづき) controllers/user_controller.php > $flag = true; > > $this->User->create(); > $this->User->set($this->data); > if (!$this->User->validates()) $flag = false; > > $this->User->Dinner->create(); > $this->User->Dinner->set($this->data); > if (!$this->User->Dinner->validates()) $flag = false; > > // 上記以外もアソシエーションあればバリデートして > // 全ての検証の結果flagがたっていれば保存する処理を以下に。
>>601 $flagは使わずにできるからもっとDRYにできますよ
603 :
593 :2009/07/06(月) 23:04:14 ID:7VJoQdab
>>603 $this->User->create();
$this->User->set($this->data);
$this->User->Dinner->set($this->data);
$this->User->Dinner->validates();
if ($this->User->saveAll()) $this->redirect();
でいけるはず。(validate=>firstが必要かもしれないけど)
アソシエーションされていれば関連モデルのvalidateは自動。
605 :
593 :2009/07/06(月) 23:22:20 ID:7VJoQdab
こうですかね?
> $this->User->create();
> $this->User->set($this->data);
>
> $this->User->Dinner->create();
> $this->User->Dinner->set($this->data);
> if (!$this->User->validates() && !$this->User->Dinner->validates()) {
> //保存処理
> }
とか外したことかいてたらレス頂いてたorz
>>603 そうなんですか!
ためしてみます
606 :
593 :2009/07/06(月) 23:25:19 ID:7VJoQdab
607 :
nobodyさん :2009/07/07(火) 00:15:37 ID:CrPLCrV4
あー確かに行けるんですが、 saveAll()かける前に一ページはさんでて、 単にvalidateしてconfirmページ出すためにflag使ってたみたいです validateAllとかあればいけそうなんだけど・・・ とりあえずありがとうございました。
CakePHPでSOAPサーバを構築したいのですが、参考URLとかありますか?
用途が違う
やっばい BAKE楽しいっすね 自動でコード生成してくれるなんて最高〜〜
自動コード生成なんて MSのAppWizard(笑)とかの昔からあるよ。 それに勘違いしてるヤツが多いけど、大昔はメモリも 少なくディスクも小さかつたから、フレームワークも RDBもなかったけど、仕様より規約的な考えは汎用機の 世界でもあった。 ステップ数商売(笑)と勘違い野郎のOOP向けコーディングが やたら複雑怪奇なソースコードを書く癖がついたと 個人的には見ている。
さくらの共有SSL使ってる人いる? どうにもうまくいかないんだが…
板違い
>>615 フォーラム行ったらまさにおなじ質問してる人がいてそのサイトを参考にやりましたって言ってたなぁ。
htaccessの書き方もっと勉強しなきゃダメかー・・・
チラシの裏の日記
ふう。決まりだらけのフレームワークがいやになったので、
phpファイル一枚だけの俺俺フレームワークもどき作ったw
やってることは、どのディレクトリ上のどこから実行してもincludeするファイルが
見つからないとかでないように、ディレクトリ構造の基準を作ったことと、
ウェブから実行してもCLIで実行しても同じように引数が取れて
テストしやすくしたことだけ。
phpプログラミングでよくやる、
http://www.example.com/aaa/bbb/ccc.php?a=1&b=2 というファイル名、ファイルパス、引数そのままでフレームワークもどきに簡単に移行可能
モデル無し。ビューは勝手にphpファイルでも呼べ。
もしほしくなったらそれがフレームワークを使うときだ。
で?
620 :
nobodyさん :2009/07/10(金) 10:18:41 ID:yJRQTl0b
とりあえずここはチラ裏ではないのと、 たぶんションベンみたいなフレームなんだろうね
てかrails系のスレに来て「お決まりだらけ」がイヤて、 日本語、、、いや思考が大丈夫かって気がするわなぁ
>>617 CodeIgniter 使えばいいのに
チラシの表
>>619 そのうちのどこかのサイトで公開されるかもしれないソフトで使われるよw
現在は自分で便利に使う用として作成中。
>>620 フレームって略すなw てかフレームワークじゃないし。でも特定のディレクトリ構造の
ファイルを呼び出すから一応フレームワーク扱いになるのかな?
>>622 CodeIgniterでもちぃでもデカイ。たとえば、ただのお問い合わせフォームごときで
あんな複数のファイルからなるフレームワークを入れる気になる?
かといって、お問い合わせフォームでもちゃんとエラーページやら
確認ページを作るとなると、(フレームワーク外のアプリの)ファイルが
複数になって面倒になってくる。テストもちゃんとやらないといけないしね。
(テストするのにブラウザは使いたくない。−>CLIで簡単に実行したい)
ということで、
データベース使わないし、こんなんフレームワーク使うまでも無い
→phpファイル直接呼出しでいいじゃん→意外とファイル増えてきた・・・
→でもやっぱりフレームワーク使うほどでもないんだよなぁ。
というときに、phpファイル直接呼出しから移行しやすい、偽フレームワーク作ったYO!w
>>621 > てかrails系のスレに来て「お決まりだらけ」がイヤて、
> 日本語、、、いや思考が大丈夫かって気がするわなぁ
ちなみに私は普段CakePHPを使用していますが、
それを使用するほど大きなプロジェクトではなく、
でも多少手のかかる物の場合に使えるフレームワークがほしい…
そんなときに使えるフレームワークを目指して作成しました。
で? 公開すんの?なら早くみして つーかそもそもスレち
626 :
622 :2009/07/10(金) 16:02:01 ID:???
「あんな複数のファイルからなるフレームワークを入れる気になる?」 →なるなぁ。 とくに簡単であればあるほど自分でフレームワークを作るなんで無駄だもの。 しかも、俺様フレームワークの機能が足りなくて追加するのは すでに CI が持っている機能だろうし。 CI でコマンドラインな PHPUnit も使えるよ。
> Cakeだって最初はマイクロフレームワークだったんですよね・・・。 そうなんだよなw MVCの考え方とか、テンプレートだとか、規約とかそんなものを 追加していくと結局肥大化するんだよね。
>>626 なんか根本的に考え方が違うね。
例えば、phpinfo()を出すだけ程度のプログラムに
フレームワークを使う気になるかい?
イミフw それだとpurePhpでいーし
>>629 根本的に考え方が違うのはお前。
まずはフレームワークを公開してみろ。話はそれから。
>>629 ユーザごとに表現を変えたり、表示内容を制御したりしたいぞ
出す例が phpinfo() かよ 頭おかしいんじゃないか?
phpinfo()を使う場面って、 アプリの一部の機能としてのでバックモードか 開発中の確認か・・・・とかだろJK phpinfo()をコンテンツとして公開したいんなら >632の言うとおり他にもいろいろつくわけで 何が言いたいの?
631 は常人と「根本的に考え方が違う」のです
>>629 が phpinfo の時に
自作フレームワークをどう使うか見てみたい
>>629 面白くなってきたのでコテハンにしてもらっていいですか。
現在 629 はアニメを見ている最中です。少々お待ちください。
つーか、ここはCakeのスレだろ。 自作とかやりたきゃくだすれにでも逝ってくれまいか
フレームワークを使わないレベルってあるよね? phpinfoってのは、その極端な例では? どういうことをやり始めたらフレームワークを使うべき? みんなはphpファイル数枚ですむようなことでも フレームワークを使うの?
作り上げた高揚感で舞い上がってるんだろう FWの自作なんて誰でも一度はやることなのに
>>642 phpファイル数枚ですむようなシステムを作る場合でも、本当にゼロから書く人間はいないだろう。
たとえば今まで作ったファイルをコピーしてベースにしたり、似たようなソースを探してきてそれをコピペしたり。
それも広義な意味でフレームワークだろう。結局トータルで見た工数でメリットかあるならフレームワークを
使えば良いし、Cakeが最適ならそれを使えばいい。
俺ならゼロから作るリスクを考えると、たとえリソース数が肥大したとしても何らかのフレームワークを使う。
>>643 お前も、俺俺フレームワークを作ったのかw
最初の設計では数枚だとしても、仕様ってのは変更するものだからなー
【PHP】俺俺フレームワークについて語れ ってスレ立てようか? 設計方針とかここが自慢とかの話題で楽しそうな気がしないでもない
>>642 とか未だに学者気取りでもの言ってんな。
>>647 にスレでも作ってもらえって。
>>1 にな
>CakePHPは、Ruby on Railsの概念の多くを取り入れた、
>Rails流の高速開発とPHPの機動性を兼ね備えたフレームワークです。
てスレの趣旨が書いてあるだろ。
>>627 で紹介してもらったリンク先を参考にしてちょっと思いついたことがあったんで、あれからさらに修正していたよ。
コンセプトもだいぶ固まってきた。phpファイル単体で実行する古典的なスクリプトから
簡単に移行できるフレームワーク(そんな規模じゃないけど)
他のフレームワークがフルスタックなものばかりなので逆に、出来る限りなにも含めない。
移行する際は、既存のファイルを特定のディレクトリにそのまま入れるだけで動く。
実のところ、ちょっとした便利関数とディレクトリ構造とそのアクセス方法を決めただけに過ぎない。
で、今のところ、コアファイル1つ。.htaccessとindex.php、いくつかのディレクトリ(変更可能)
そしてオプション(無くても良い)で、設定ファイルとコアを拡張するためのファイルそれぞれ一つづつという
コメント入れて非圧縮時で15kbの俺俺フレームワークができた。(ためしにコメント削ったら10kb切った)
本当はフレームワーク作るのが目的じゃなくて、個人的なあるツールを作るのが目的なんで
そっちができたらフレームワーク公開を考えるよ。忘れたころにこっそりとw
>>651 スレ違いだと何度言えば気がつくんだこの低能め
今までいろいろフレームワークを試したり実際使ったりしたけど、 後でまた使おうとか思った時に、バグ放置のまま全然メンテされてなかったり、 フレームワークのプロジェクト自体が無くなってたり 特に個人で作ったようなのはそういうことが多いのね。 cakeがいいと思うのは、使ってる人数が多い分活発であるっていうこと。 自分の覚えた知識や時間をムダにしないためにもこれは重要なポイントだと思うよ。
その点俺の作ったやつは、フレームワークじゃないから コードそのものは普通のphpそのままんまで覚えることは ほとんど無いから安心だよ。 ソースもわずか400行程度でおわりだしね。
つーかこいつは何を作りたいんだ? 覚えることはない? それなに?何に役立つの
>>655 本当に迷惑だから、もう来るな。
ここはCakePHPの事を話し合うスレだ。
CakePHP以外の話は別のスレでやれ。
多分あれだろ、会社でも「つかえねーやつだな」って視線を感じつつ、 でやっとこさ自分でなんか形になるもんが出来て浮き足立ってるだけだろ。 これだからID無し板はダメなんだよ。透明アボーソできないじゃないか。
つかSymfonyでもCIでもEthnaでもなくこのスレで管をまいてるあたりにCakeへの憎悪と悪意を感じるよ しっかり生きろよw
みんな嫉妬しすぎw
ものによっては嫉妬するけど 公開してないやんw
phpinfoコンポーネントが作れません><
>>663 CakePHPポケットリファレンス でも買っておきなよ・・
665 :
655 :2009/07/13(月) 17:27:08 ID:???
あれから俺のフレームワークを改良して phpinfo() を出すのに 350 行程度で済むようになりました。 CakePHP はもっとファイル数や行数あるよね?
とうとう精神分裂病だな。
>>655 >フレームワークじゃないから
>>665 >俺のフレームワーク
俺俺フレームワークだと 3行でいけたよ。 <? phpinfo(); ?> まぁ完全に出すだけだけど、無駄がない分動作が速い。 cakeだと重いでしょ?俺のはフレームワークじゃないから早いよ。 導入もファイル一枚だから楽チン。 やっぱ俺俺フレームワークすげぇわwww
669 :
668 :2009/07/13(月) 18:40:27 ID:???
あれからさらにチューニングして <?php phpinfo(); ?> の一行で済むようになった。 根本的に考え方が違う俺、最高。
はいはいおもしろいおもしろい。 ネタ化したから終了 Cakeの話題どぞ↓
スポンジケーキがうまく膨らまないんだよね…。 膨らし粉入れた方が良い?
コアのクラス名にプレフィックス付けてくれないかなー? PEARとか使うとたまにかぶる・・・
>>669 いや、冗談抜きでそれ動くわw
無理して動かすとか言う話じゃなく、
それでいい。
>>673 俺のはつけてるよ。
1.1から必死こいて1.2に追いついたと思ったら3ですか
俺俺フレームワークだったらたったこれだけ↓超便利w index.php <?php require_once('oreore_framework.php'); oreore_phpinfo(); ?> なぜこれで動くかというと、俺俺フレームワークで便利な関数をいろいろ作ってるから まぁ全部はまだ公開しないから、該当箇所だけな ↓ oreore_framework.php <?php 〜〜〜〜省略〜〜〜〜 function oreore_phpinfo() { return phpinfo(); } 〜〜〜〜省略〜〜〜〜 ?>
すごいフレームワークですね
ちなみにcake3なんか目じゃない 覚えることはほとんどなくてoreore_をつけるだけw Cakeは覚えることが多すぎるから、疲れた人にはもってこいだと思う 公開までもうちょっとまちなー
公開が待ち遠しいです
なんだ、cake3はリリースされたわけじゃないのな。
おれも
>>675 状態だったからびっくりしたわ。
ちゃんと最新動向追っかけてないとだめだな。
>>676 マジレスするのすら気が引けるが、phpinfo()の返り値はBooleanな
いきなり動きませんが。つか君、自分が面白い人だと思ってるの?
は?動くだろ CakePHPの使い過ぎで頭固くなったんじゃない?w
684 :
682 :2009/07/13(月) 21:55:17 ID:???
あー動くかも。どうでもいいや
こんだけ入れ食いなら楽しいだろうな
面白いスレだな。
というか何のスレかわからなくなってきた
なんか俺の偽者ががんばってるw
689 :
682 :2009/07/15(水) 06:03:28 ID:???
なるほど。偽者といって反応したのは、 お前なわけだなw
何言ってる、本物は俺だ。俺こそがフレームワークだぜ。
俺なんて根本君のフレームワークで作られた人工知能だぜ
西山君、フレームワーク作っといて。今日中に。
急にスルー力ついて吹いたw もう釣れないからオレオレFW別スレ立てたら?w
なにこのホンワカスレw
さらに改良中。URLルーティングの所をちょっとまともに作り直そうかな。 今個人的に使っている範囲では、使わない部分なんで簡易なままにして おいたけど、さらにシンプルな使い方にする方法を思いついたので。
697 :
696 :2009/07/15(水) 14:37:58 ID:???
さすがおれ天才wもうできたw まぁめんどくさくなったから中途半端だけど とりあえずルーティングとしては問題ないww oreore_framework.php <?php 〜〜〜〜省略〜〜〜〜 function routing() { return rand(0, 1) ? true : false; } 〜〜〜〜省略〜〜〜〜 ?>
>>696 お前がフレームワークのことに精通しているのは十分わかった。
ここの住人がお前を全く必要としていないのはわからんか?
だれだよ、この板をID無しで申請した屑はよ。 出て恋やゴルァ(死語)
オレオレ詐欺スレだな、こりゃ。
ちょっとの時間、おっぱいのことでも考えようぜ
別にフレームワークを公開するわけじゃないけど、 やっとこさ、xreaにsubversion+tracの最新版入れ終わったよ。 情報が古かったりでいろいろハマッタ。疲れたよ。
ちなみに俺俺フレームワークで作った人工無能はこんな感じ。 ホントにこれだけで動くんだよ。すごくね? oreore_framework.php <?php 〜〜〜〜省略〜〜〜〜 function talk($message) { $jm = new OreOreJinkouMunou(); return $jm->answer($message); } 〜〜〜〜省略〜〜〜〜 ?>
この一連の流れをオレオレフレームワーク荒らしと名づけよう
>>702 subversionってmakeでそのままインスコできるの?
xrea
すれち
>>705 そのままといえるのかどうか分からないが、
たいていのソフトはコンパイルの一連の作業でconfigureとかに
--prefix=$HOME/local なんてオプションをつけると
システム全体じゃなくて、ログインユーザー専用としてコンパイルしてくれるよ。
インストールディレクトリは全部$HOME/local以下になる。
デーモン系は立ち上げられないんじゃ?と思うのなら、それは問題ない。
subversionのコマンドを実行すると、裏でSSHでログインし、サーバー側で
subversionのコマンドを実行して処理を返す。なんてことをやっているから。
俺おれFWにsvn・・・ ほんとお前いい加減にしろや よそいってやれ 二度とくんな
モデルバリエーションの'unique'ルールって insertの時だけじゃなくてupdateの時もかかっちゃうの?
バリデーションだったスマソ
いんさーとだけって指定できる
712 :
711 :2009/07/16(木) 16:45:43 ID:???
ruleに 'on'=>'update' とか 'on'=>'create' かな
>>709 updateのときはそのid以外でuniqueかどうかをチェックする
715 :
711 :2009/07/16(木) 17:07:10 ID:???
あぁunique すまんちゃんと読めてなかった
CakePHPのソースコードの暗号化(もしくは難読化)は可能でしょうか? Zend GuardとかがPHPだと一般的なようですが、CakePHPでも使用できるのでしょうか?
717 :
nobodyさん :2009/07/21(火) 19:22:57 ID:zqz/ptwz
俺おれの話題でしか上がらないすれage
現在の進行状況聞く? プラグイン機能をつけようと思っている。 もちろん、プラグインは必須ではなく、 コアだけなら1ファイルですむんだけど。
バージョン上がってから静かになったね
MITライセンスは暗号化しちゃだめなんだと思ってたけど。 どうなんだろ。
722 :
nobodyさん :2009/07/21(火) 22:34:08 ID:qTwJynaf
そもそも
>>716 の言っている「CakePHPのソースコード」って、
CakePHP として配布されているコードのことなのか、
CakePHP 上(?)に自分が書いたコードのことなのかどっちだ?
app以下の、自分で書いたコードが最低限暗号化されれば良いです。
724 :
nobodyさん :2009/07/22(水) 00:39:20 ID:2l6UTOL5
ていうかその話題はフレームワークに依存することなの? jsのpackedみたいなののphp版がある(かどうか知らないけど、あると仮定する)と cakephpフレームワークを利用したappをつくって、それを暗号化すればいいだけだよね? もちろんcakeに限らずpureなPHPでもZendでもsymfonyだろうが、同じように難読化・暗号化できるんじゃない? そうじゃなくて、cakeのcore層でなにかしら解読の仕組みが用意されてて、app層に難読化コードを設置することで、 appとcoreをかけ合わせることで初めて実行できるようなものを期待しているの? だとすると、自分の知る限りではない。
725 :
724 :2009/07/22(水) 00:42:35 ID:2l6UTOL5
だめだな質問ちゃんと読まないと >Zend GuardとかがPHPだと一般的なようですが、CakePHPでも使用できるのでしょうか? でしたか。
>>722 CakePHPとして配布されていて、
誰でも手に入れられるコードを
難読化してどうするよw
727 :
nobodyさん :2009/07/22(水) 14:15:37 ID:2l6UTOL5
あらディレクトリ名が間違ってた shell->shells ここだけが問題だったようで plugins/plugin_name/vendors/shells/plugin_name_hoge.php を >cake plugin_name_hoge -app /path/to/app で起動できました。 すんません
今占いのプログラム作ってるんですけど例えば 2という結果がでたらその結果をもとに 「あなたは○○」 と結果を出したいのですが、その結果が100ある場合はどこに占い結果をまとめとくべきでしょうか。 ・files に csv としておいておいてそれを file_get_contetns でごにょにょ ・MYSQLに保存しとく ・そのファイルにべた書き 以外に良い方法あれば教えて下さい。
なんでDBがあかんねや
files に csv としておいておいてそれを fget_csv でごにょにょ
>>730 10個くらい一気に結果を取得したいから、そうなると 10個の DBを作らないといけなくなります。
なので負荷を軽くしたいのでDBはできるだけ避けたいのです・・・と思いましたが言われて気づきました。
DBでもいけそうなのでそれでやります。ありがとうございました。
フレームワーク以前に設計のはなしですな
どうしてCakePHPのスレなのに初心者質問スレになってるのか教えてください
1.1から1.2になって何倍くらい早くなったの? 感覚的でもいいので教えて下さい
そんなに早くなったっけ?
>>736 1.1 業務用としては使い物にならないレベル
1.2 業務用としても普通に使えるレベル
739 :
736 :2009/07/24(金) 09:29:45 ID:???
そうなんだ。ちょっと試してみるかな。 どもです。
1.1は遅くなかったんじゃないの? 1.2になってクソ遅くなって、 すていぶるになってからは落ち着いたって誰かが言ってた。
俺もどっかでそう読んだ。 なんにしても、プロダクションモードにしとけば使えるレベルだと個人的には思ってるが
javascirptのライブラリなんかで、jsとスキン用のCSSとかパッケージになってるやつとかどうしてます? Vendorsの中でバラしてjsフォルダとcssフォルダとかに分けると あとでライブラリのバージョンアップとかの時に面倒ですよね。
>>742 バージョン管理ツール使え
Subversion実践入門達人プログラマに学ぶバージョン管理
サードパーティ製のコード
ライブラリの塊に新バージョンが出たときに それをディレクトリに振り分けるのが面倒臭いといってるんでは?
javascriptとCSSで分離できないライブラリなんてあるか? あるとしたらそのライブラリの設計が問題じゃないかな。
SVNの話じゃないんじゃない?
例えば
http://sorgalla.com/projects/jcarousel/ こういうのとか、YahooのYUIとかもそうですが、
ダウンロードして解凍したフォルダの中にlib/hoge.jsとか skin/myskin/hoge.css とかなってると、
cakeの$javascript->link( )で持ってきてくれないのね。
jsファイルはvendors/js、CSSはvendors/css に手動で入れなきゃならない・・・ってことなんです。
ググって見たら、dispatcher.phpを改造してYUIに対応させてる方もおりましたんで
これを参考にしてみます。でも本体改造はちょっと気が引ける・・・のと、
その都度改造っていうのもちょっとなー
748 :
742 :2009/07/26(日) 00:49:03 ID:???
CakePHP使ってるサイト少ないよね ほとんど趣味の世界なのかな
750 :
nobodyさん :2009/07/26(日) 17:30:30 ID:+LxCHWip
当たり前なのか? 商用では何が使われてるんだよ
CakePHP使ってますと公言してもメリットがないから 使ってるサイトが少なそうに見えている、とも考えられる あと1.2で大分ましになったけど、同じフルスタックとはいえ 導入するメリットがSymphonyに対して見えにくかったというのもある。 簡単だ!みたいな点だけ強調されすぎた。なんかそういうのはもういい。 その点では1.2になって本当に良くなった。敷居は上がったかもしれんが
>>752 同意。俺、商用サイトしか作らないけどここ2年近くは全てcakephpを元に作ってる。
わざわざcakephpで作ってますとは書かないね。
制作事例を公表するというのは、セキュリティ的には、システムの脆弱性をさらすようなものだから、 よっぽど強固な作りになっていない限り、制作事例は公表しないというのが面倒が無くて良い気がする。 オレは、仕事でCakePHPを組込んでいるよ。どれか教えないけどね
説明とOKボタンだけのダイアログを、フォームのボタンを押した時に表示するようにしたいんですが 実装は可能でしょうか? 方法があれば教えていただきたいです マニュアルの11.1.11を参考にしていますが、これだと「Delete」の文字列のリンクでダイアログが出てくることと、 OK,キャンセル二つのボタンが出て、実装したいものと少々違います。 # <?php echo $html->link('Delete', "/posts/delete/{$post['Post']['id']}", null, 'Are you sure?' )?>
>>756 普通にjavascriptを書く
javascriptヘルパーを使うならcodeBlock()でheadに書き出せる
要するにキャンセルがあるからダメなの? だったら自前でダイアログ(っぽいもの)を吐き出す必要があるのでは?
MySQL上にViewを定義します。 CakePHP側でこのViewのモデルを定義し、findAll等でデータを取得するとなぜか 配列にはViewがテーブル別に分割されて取得されます。 あくまでViewの配列に一括で入ってくることを期待しているのですが・・・
何言ってんの? ちゃんと他人が理解できるよう質問しろバカ
mysql view のことじゃね? cakeで扱えるのかは知らん
>>759 ためしてないけど、ビューのデフォルトのフィールド名が問題な気がする。
フィールド名が、TABLE1.field、TABLE2.field、なんてなっていると、
TABLE1とTABLE2に分かれるんじゃなかったっけ?
763 :
nobodyさん :2009/07/28(火) 12:38:13 ID:qCVItZ1Y
ページにFlash素材を複数配置しているんですが、 Flashデータだけブラウザにキャッシュする方法が あれば教えていただけますか。 配置順は変わったりするので、ページをキャッシュしてしまうとまずいです。 cacheヘルパーのキャッシュはViewをキャッシュするようなので 少し用途が違うようですが、いかがでしょうか。
勝手にキャッシュされんだろ スレチ
765 :
nobodyさん :2009/07/28(火) 19:36:17 ID:28CkmgXW
最近cakephpを使って開発を始めたんですが、少し気になる事があったので質問させてください。 データのCSVの保存とかは、ドキュメントを見た感じモデルに書くべきって書いてあったからいいんですが、 データの計算や、加工等などはどこでやるべきなのでしょうか? MVCの概念からいくとモデルになるのでしょうが、Cakeの場合モデルはDB操作や、 データの保存等に使用のみ(?)と書いてあったのでどこに書くべきか迷っています。 すみません、ご教授お願いします。
767 :
nobodyさん :2009/07/28(火) 20:05:06 ID:28CkmgXW
>>766 ありがとうございます。
URL先の記事非常に参考になりました。
ログイン認証で質問です。 Authコンポーネントが用意されていますが、独自で実装するよりこれを使ったほうがいいですか? ユーザーの権限によって処理を振り分けたりということをしたいのですが、Authコンポーネントを 使っても柔軟に対応できるものですか?
モデルAのひとつのフィールドには配列をserializeしたデータが入っており、取り出すときに必ずunserializeしたいのですが、 AのafterFind内でunserializeすると、Aを直接findで取得した場合はいいのですが、 関連モデルBから引っ張ってきた場合にはAのafterFindは呼ばれないようです。 Aのデータ展開時に確実にunserializeするにはどうすればいいのでしょうか?
>>768 Auth+ACL
>>769 俺もそれでよく躓く
そういう仕様らしくてどうしようもないのかも。
どうしてもやりたい時はビヘイビアでやるけどこれも一筋縄ではいかない
他の方の回答を期待したい
モデルの意味を勘違いしている人が多いよね。 データに関わるものであれば、モデルでビジネスロジックを書いてもいいのに。
cakeでbulkinsertって出来ないの?
>>771 769ではないけど
その機能はしってるけど、そうじゃなくて以下のような時にどう実装すればいいんだろ
モデルがUserとPostの2つあって
Post BelongsTo Userのとき
User.ipにはip2longしたIPアドレスを持っていて
UserモデルにはafterFindでIPアドレスをlong2ipで復元するように書いてある
なのでUser->find等したときは意識せずとも勝手に変換されたIPを取得できる。
この時に
Postモデルから芋づるでUserも引っ張ると、UserのafterFindを通らない。
なんでだろ。俺も似たように使ってるけど、 Postから引っ張ってもUserのafterFindは通ってるよ。 afterFind に debug(); を置いても何も出ない?
776 :
774 :2009/07/29(水) 16:15:45 ID:???
え!マジ? 記憶があいまいなので確かこんな感じと書いてみたんだけど違ってたのかな? Post->User->find() ではなくて recursiveセットした上での Post->find() のことなんだけど ほんとにUserのafterFind通る??
まずは
>>775 のいうようにdebug()おいて確認するべし。
過去の経験からいくと、通らないことはない。
>>771 のエントリを読むと、芋づる方じゃなくて芋づられる方のデータを対象に出来るって書いてあるね
ためしてないが
>>778 うんどっちでも来るはずよ。どっちから呼ばれたかを判定するための$primaryだから。
ただ、if($primary === false) { ---- }
てやらないとちゃんと判定してくれなかったかも。
780 :
769 :2009/07/30(木) 01:41:34 ID:???
769書いた後12時間爆睡してしまいました。
アソシエーションがA HABTM B なんで
>>774 とは微妙に違うんですが、
今やってみると…両方とも思いっきりafterFind通っていました。なんでだろう。
ちょっと気持ち悪いけどとりあえず解決下っぽいです。
ありがとうございました。
夜型か地球の裏側住まい乙
ブラジル人乙。
>>769 あぁ。これ一回一回やってたけど afterFind でできるのか。
これって save() する時に serialize やってくれるようにできないかな。
786 :
783 :2009/07/30(木) 13:58:02 ID:???
>>784 さんくす。モデルって関連づけとバリデーションくらいしか触ってなかた。
CakePHPというか、アメリカ圏というべきかな。では ドメインモデルの設計が主流みたいなんだよね。 それに対して日本はトランザクションスクリプトが多い感じ。 (低レベル日本じゃこの考え方自体があまり知られていない感じもするけどw) なので、ドメインモデルとして使えばCakePHPは複雑なこともかなりやれるけど、 トランザクションスクリプトでやろうとすると、なんでこんなことがやりにくいの?ってなってしまう。 データを加工して表示するのはビュー。処理はモデル。 コントローラはモデルに処理を依頼して、ビューにデータを渡すだけ。 こういう設計にするのが一番じゃないかな。
789 :
774 :2009/07/30(木) 19:48:14 ID:???
>>766 のURLはテンプレにいれてもいいんじゃないかな
この概念を知らないでCakeいじってた頃は今思うと悲惨だった
790 :
774 :2009/07/30(木) 19:51:50 ID:???
afterFindの件、今やると確かに通ってる バージョンアップで変わったのか勘違いかどっちかです。 時間できたらテストしてみます おさーがせしました
>>790 たしか、バージョンアップで変わったが正解だと思う。
俺も昔、それ関係でソースを呼んでいたのだが、
ひもづるで呼んだときは通らなくて、
まあ、SQLの仕組み上JOINして持ってくるだろうから
難しい話だと思ったのでそいういう仕様かなぁと思っていた。
たぶん今俺が使って実稼動しているシステム。
新しいCakeでは動かないだろうな・・・
ちゃんとテストしているからすぐ修正できるとは思うが。
今回の件と関係あるかわからないけど アソシエーション先のbehaviorのafterFindは呼ばれなかった気がする。 あとは、primaryで呼ばれたときと、hasManyで呼ばれたときと、 HABTMで呼ばれたときの配列の構造がそれぞれ違うので そのあたりの対策をちゃんとしないといけないと思う。 この辺のアソシエーション周りの統一感のなさが設計ミスとしか思えない…
変わりに言っておこう。 穴があったら入りたい。
お前らレベル高いな ココも勉強になるわ
Commentsテーブルと、複数コメントを持つUsersテーブルがあって /models/user.php内に var $hasMany = 'Comment'; を記述する。 users_controller.phpのコントローラー内で Commentの作成日がXX日までの物を検索し、ページネート表示としたいのですが どのようにConditionを記述するのでしょうか $tempにXX日の文字列を入れ、 $condition = array('Comment.created <' => $temp); $conditions = array('AND'=>array($condition)); $result = $this->paginate('User', $conditions); このような記述をしたところ Warning (512): SQL Error: 1054: Unknown column 'Comment.created' in 'where clause' という警告がでてきてしまいました。
>>796 $this-User->recursive = 0;
じゃなかったかな?
SQL見たらjoinされてないでしょ
>>797 typo
$this->User->recursive = 0;
>>766 みたいな方法でも良いと思うが、
メゾット毎に役割を決めた方がメンテナンス性が上がるような気がする。
800 :
789 :2009/07/31(金) 18:58:02 ID:???
おーテンプレはいってましたか えらいすんまへんでした
メゾットよりリゾットが食いたい
802 :
796 :2009/07/31(金) 20:07:20 ID:???
>>797 joinされてない!
ありがとうございました
>>799 >メゾット毎に役割を決めた方がメンテナンス性が上がる
こういうのだるくね?重複するコードは、あちこちに書き散らすの?
766の書き方がノーマルで見通しいいと思うがなあ。
>>803 重複するコードはprivateにして、selfで呼び出すとか、
ビヘイビアを使えば良いんじゃない?
個人的には766の書き方がスマートで好き。
でも、複数人で作業するならメゾットを分けた方が良いこともあるのかも。
メゾットよりリゾートに行きたい
メゾットよりメゾネットの方が好きだな
リゾットうまい。
メソッドでした。すみません。
みんな、楽しいやつらだなぁw
夏休みだから湧いているの? じゃあオレも... 「あつは、なついねぇ〜」
>>802 796のどうやったら解決できたか、まだいたら聞きたい
hasManyのSQLでのJOIN方法はrecursivre??
例を借りて
検索フォームとかに「XX日以降」みたいに入力されると
XX以降にコメントのついたUserを表示したいんだけども
users_controler内で条件にComment.created とか Comment.modified とか、使おうとすると
まさに同じようなエラーでるw
なんであっさり解決できたんだ…
ヒント:頭の出来
hasandbelongstomanyの時なんかもっと頭の中ぐちゃぐちゃになるぞ。
出来が悪いのは重々承知で、ヒントになりそうな情報・サイトは無いでしょうか recursivreで調べてみたけども1にしてもダメそうだし 一端Commentを条件で検索して、条件にあったuser_idでUserを〜とかやらないとダメ?
>>815 >>812 だけじゃどんな内容なのか分かりづらい
まったく同じエラーが出てるのかな?
Unknown column ... where clause と出たらおそらく適切にjoinされていないのだろうというのが
>>797 もしjoinできていないなら、アソシエーションはどうなってる?
検索はpaginate?find?findならallなのかlistなのか、とか
createdやmodifiedで検索できないということはないはずだから、それ以外の情報をおくれ
一度に検索までもっていこうとしたのが(頭のレベル的に)ダメだったっぽい 816の所を読んで、まずJOINできているのを確認して それから検索条件を指定して・・・で出来ました 色々失礼いたしました と、ありがとうございました
超悲観的w がんばれ
husbandbelongstomarryってなに?
Soft Deletable Behavior って A→B と関連付けして B を SoftDeletable した時に A->find() すると B が論理削除されるのにヒットする。 条件付ければ済む話だけどスマートにいかんもんかね。
モデルバリデーションのmaxLength,minLength,betweenってmulti-byteじゃないのか まーしゃーねーか拡張簡単だし
自分で作れ
うん自分で作った。すぐできた
すぐできた(笑)
Release: 1.2.4.8284 Stable & 1.3-dev
こうやって CakePHP ユーザの多くが各地で車輪の再発名をしているんだろうなぁ
既存のデータベース(Oracle)のマスタ更新画面をCakeで作ってみたのですが、 これらのテーブル内では 作成日->RDATE、更新日->UDATE というカラム名になっていて、 Cake の規約に沿って自動的に日付を更新することができません。 日付の更新処理を自前で書けばいいだけですが、せっかくのフレームワークなので、 標準で持っている機能をそのまま使えるような方法はないものでしょうか? (UDATE as modified とか書ければ簡単なんですが…)
作成日は created 更新日は modified にするのがルールだよね! でも、このルール変更できたような気が...
たしか array('created', 'updated', 'modified') ってcoreとかにベタ書きされてた気がするから無理じゃね?
831 :
828 :2009/08/04(火) 12:37:54 ID:???
>829 ソース読んでみたんですが、更新日のカラム名は決め打ちみたいです。 改造するのもアリなんですけど、もっといい方法がある気がしまして…。
832 :
830 :2009/08/04(火) 12:42:16 ID:???
ビヘイビアで setup時に UDATE⇒modified RDATE⇒created beforeFind beforeSaveで逆 とかやればできそうなきもしないでもない。 ていうかできるなら既にどっかの外人が作ってそうですね
普通の方法じゃ変更できないYO
規約を守れー。
835 :
828 :2009/08/04(火) 14:54:25 ID:???
Oracleのテーブルを調べたところ、作成日(RDATE)に関してはデフォルトでSYSDATEが送られていましたので、 更新日(UDATE)だけ処理すればいいということがわかりました。 結局、安直ながら以下の1行をビュー(edit.ctp)に書いて思惑通りの動作になりました。 echo $form->input('udate',array("type"=>"hidden","value"=>"sysdate")); ご意見を頂きました皆様(殊に830様)、ありがとうございました。
バージョンアップきたけど、何か大きく変わったところあるのかな? 例のページネーションのソートのバグとかかな?
1.2からpluginをbakeできるってことなんだけど、どうやってもこけるorz モデルの生成は以下で問題なくできる >cake bake plugin model んでも、そのあとコントローラ作ろうと >cake bake plugin controller のあと対話に答えていって、最後にいざbake!って感じのところでこける >Error: You must have a model for this class to build scaffold methods. Please try again. なんでですの???
OpenIDコンポーネント使って、OpenID対応試しています。 OpenIDのサイトに移動する直前に、真っ白な画面が一瞬表示されて、 Javascriptで自動的に隠しフォームが送信されてリダイレクトされますが、 あの画面はデザインできないんでしょうか? CakePHP限定の話題じゃなくてすみません;
>>837 -appでアプリケーションの場所を指定してやってもダメすか?
>>839 どもです。
-appでappまでのパスは指定はしてます。
そちらではpluginのbakeできてますか?
>>840 対話式っつうのはやったことないけど、
「cake bake plugin プラグイン名」 でプラグインの骨格ができて、
「cake bake plugin プラグイン名 controller コントローラー名」
「cake bake plugin プラグイン名 model モデル名」で
プラグインの中にコントローラやモデルができるよ。
cake bake plugin プラグイン名 controller でやると、DBのテーブル読み込んでくれて、どれのコントローラー作る?って聞かれるんですね んで、指定して進めるとエラーになりまして。。。。 cake bake plugin プラグイン名 controller コントローラー名ってのやってみます。
cake bake plugin プラグイン名 controller コントローラー名 だと失敗しないですね。 でも出来上がるのscaffoldなんですね。 いつもscaffoldはnにしてbasic class methodでbakeするんですが。 scaffoldの存在意義がわからないもので。。。 んー、もすこし調べてみます
MySQL テーブルのプライマリキーとなる ID の代わりに日本語のキーを作成して、 それを cakePHP で認識させることはできるでしょうか?
>>836 kwsk
5.3に対応したとかじゃないのかな。
何で誰も今回のバージョンアップについて書いてないんだろう。
>>836 そのバグは5月の段階で直っているはず。
バグじゃないけど cakeのページャー使うと limit:100とか入れられたら 勝手にリミット書き換えるのやめて欲しいよね。 こっちで手動で設定してる値あるならそっちを優先して欲しいんですけど。
コントローラーでそう書けばおk まぁいいたいことはわかるけど
フォーラムで「CakePHPでサイト作りました」って報告する人がいるけど、あれ何なんだろう。 開発中の小話なんかを一緒に書いてくれてれば参考になるから嬉しいんだけど、 あれじゃただの宣伝にしか見えない。
宣伝でしょ
Cake 1.3からPHP4用のコードを削ったのがCake 2っていう理解で合ってる? 1.2が出てから急に大きく動き出したので、嬉しいやら戸惑うやら…。
>>851 CakePHP1.3.x は、すでにPHP4切り捨て。CakePHP1.2の資産はほぼ活用できる方向
Cake3 は、ゼロからコード書き直しのいわば次モデル。PHP5.3 & 6 対応(だったはず)
恐らく別物に近くなるのでは?詳細不明だけど、実用できるのは当分先じゃね?
GETで名前付きパラメータで値を渡すとき、値に「/」とか「%」とかが混じってると コントローラまで処理が行われません。 回避手段として、取得側でこれらの文字をなんらかに置換して、受け取り側でも 変換するというのが常套手段なんでしょうか?
urlencodeしたらいいじゃん。 って言うのは的はずれなんですかね。
>>855 すみません、書き忘れてました。
当然urlencodeはしてます。
で、URLに%25とか%2Fが含まれるとアウトになってしまうと。
それあぱっちの所為だったきがする ソースさがしてくる
858 :
857 :2009/08/06(木) 11:28:01 ID:???
ごめん今時間ないんで失念しちゃって。。 とにかく/をURLエンコードしてパラメータとして渡した場合、 なぜかapatcheだかmod_rewriteだかURLデコードして・・みたいな不具合だった どう解決したか忘れたけど、ちょっとこの辺で調べてみて。 あとでまた調べてみる
PHP4環境で、ビヘイビアの中でモデルのリファレンス使って、findByってできませんよね? Overloadable::__call()を呼んでくれない。 findByは良いのだけど、別ビヘイビアのメソッドを呼びたい時はどうすればいいんでしょうか? $model->call__(メソッド名, 引数配列);で無理やりやるしかないのでしょうか?
>>858 ありがとうございます。
実はざっと検索はしていたのですが、
http://kuroutoshikou.blog16.jp/index.php?cat=10 ここの2009/03/04の記事以外に適当なものが見つからず、ここに質問させていただいた次第です。
こちらのサイトでは対処として置換する方法を取っていました。
いろいろ考えたのですが、独自規則で変換するのもあとあと面倒になる可能性があるので
「パラメータはbin2hexで16進文字列変換して渡す」
というルールで考えてみたいと思います。
これなら0-F以外の文字が渡されることは通常無いですし、チェックも比較的簡単かと。
ほかにいい案がありましたら皆様教えてください。
>>861 $pattern = '/\/'.$paramname.'\:([^\/]+)(\/*)/i';
$mnum = preg_match($pattern,$_SERVER['REQUEST_URI'],$encoded_get_vars);
ごにょごにょ
とか
試してないが
Cake3はcakeディレクトリの構造からして変わってたし見慣れないファイルがたくさんだったしでワクワクした
865 :
852 :2009/08/07(金) 18:39:40 ID:???
cakeってもっと早くならないの? ヘルパー系がすごい重いんだけど。
>>866 そんなに気になるならそこだけ自作してみる
>>866 鯖環境によるのでは?
オレのところだと、ローカル鯖だと重いけど、公開鯖だとそんなに遅くないけど...
まさかdebugオンで遅いとか言ってないよね?
>>867 それが出来ればそうしたいです。
>>868 ローカルで実行速度チェックするのが楽なのでローカルでの
実行速度を基準にして遅いと思うんです。
>>869 デバッグ0にしたらApp::importとかがなくなって
150msが80msくらいになるんですけど
View->_renderで60msくらいかかっててこの辺が何とかならないのかなと思った次第です。
正直自分が何とかしない、または出来ない部分を気にしてもしょうがないと思うが。 具体的なボトルネックを探してチケット投げるとか、自分で直す意外にコアあたりはどうしようもないんじゃないのかな。 具体的なヘルパーが駄目なら直すなりチケット投げればいいんじゃないのかな。
たしか、公式サイトのパフォーマンスの改善に関する事項で 「ヘルパーの利用を控える」とかいうのを昔読んだ事あるw 重いと思えるなら、ヘルパーの利用控える 後、php.iniで使用メモリーの上限を上げる でも、殆ど効果ないかも...
たしかにヘルパーは高機能すぎたり、php4に対応してたりで自分でコンパクトなの作るのもありっちゃありかも? 速度にこだわるならだけど。 今のところ、前に比べりゃ早いしそこまで困ってないけど。
やっとsaveallが出来たぐらいだし、その辺はこれから期待なのかねぇ
>>874 アソシエーション組んでたらたまにロールバックしたりするよ。
>>876 それはあんまりうれしくないサプライズだなあ
cake 「たまに消すよ!機転がきくよ!」
質問です。 名簿のようなものを作っているのですが、一人のユーザーが複数のアドレスを持つので アドレスフィールドを別モデルにしました。(User hasMany Address) Userの編集画面のビューで $cnt = count($user['Address'])+1; for ($i=0; $i<=$cnt; $i++) { echo $html->input("Address.$i.address"); echo $html->input("Address.$i.id", array('type'=>'hidden')); } こんな感じでAddressの数にあわせて複数のテキストフィールドが表示され、$User->saveAllで更新もできています。 問題はAddressを減らしたい時なのですが、テキストフィールドを空にしても当然空になるだけでレコードは残ります。 HABTMだと削除も勝手にやってくれますよね。(一旦全部削除→全部追加となるようですが) HasManyの関連レコードも一緒に編集というのは結構よくあるパターンに思えますが、なにか常套手段的なものはあるんでしょうか? 書籍数冊&ググったんですが、追加・保存する例しか探す事ができませんでした。
>>878 説明するのが手間だから、Addressでbakeして。
deleteアクションとか見れ
要は一通りbakeすればやり方分かるよって事です
>>879 >>878 に便乗して横から質問ですが、
deleteアクションを使うという事は、関連モデル(この場合はAddress)の方で
どのレコードが空になったか突き合わせて見れ!ってことですか?
または一旦Userに紐づいた関連Addressを全消ししてから保存せい!ってこと?
$User->saveで出来ないかな、というかそっちでやるべきじゃないかな
横からちんぷんかんぷんなレスすいません。出直して来ます
フォームヘルパー使うとディフォルトで value="5" とか数字になるよね? 普通DBに数字で保存しとくものなの? 今まで りんご,みかん って保存してたんだけど。 0,1 で保存して 他の DBテーブル読み込んで結合させるってのが一般的なのかな。 これだと りんご を探したいとき りんご で検索できないでしょ。 0,1 だと 0のもの探したいのに 10 とかもひっかかってくるだろうし。
>>881 うわー早朝からすごい大物をみてしまった
Cakeとか以前にDB勉強してきて。お願いします
>>878 普通に考えると、deleteとeditのフォームは別になるんじゃまいか?
editのフォームでテキストフィールドを空にして削除させようとするのであれば、そういう処理をコントローラーに書くしかないよねえ
削除チェックボックス用意するとかすれば簡単そう
885 :
878 :2009/08/13(木) 10:47:03 ID:???
最初の説明が拙くてすみません。
>>880 がズバリ頭の中にあった疑問そのままです。補足していただいてありがとうございます。
さて、プロフィールの一項目だけ別フォームでedit/deleteっていう仕様はちょっと抵抗があるので、Usersのeditフォームのみで何とかしたいです。
そうするとやっぱりAddressの値ないしは削除チェックボックスをみて削除する処理を自前で用意するしかないみたいですね。
とりあえず、下記の処理をUser->saveAll()の前にいれて希望の動作ができました。
if (isset($this->data['Address'])):
$item_to_delete = array();
foreach ($this->data['Address'] as $key=>$value):
if (trim($value['address']) == '') {
if ($value['id'])
$item_to_delete[] = $value['id'];
unset($this->data['Address'][$key]);
}
endforeach;
if (!empty($item_to_delete))
$this->User->Address->deleteAll(array('id'=>$item_to_delete));
endif;
これって本当はモデル内(User->beforeSaveとか)でやるべきなんですかね?
要は複数入力ができるフィールドがほしいだけだったんですけど、まったくサンプルが見つからなかったってことは、
こういうケースってあんまりないんでしょうか?
886 :
884 :2009/08/13(木) 10:55:33 ID:???
>>880 どのレコードが空になったかは、data[Address][n][address]の n に入ってるわな
HABTMのように全部消す必要はないよ
っと思ったら、
>>878 の例が思ってるのと違うなあ
ViewでAddressを出すとき
echo $form->input('Address.address');
じゃなかったっけ?
$addressesで
っと、リロードしたら
>>885 が来てた
887 :
884 :2009/08/13(木) 11:01:09 ID:???
>>885 そんな感じだと思う
でも deleteAll は使わないほうが良かったはず。
afterDelete()を通らなかったと思う。
>>885 余計なお世話だけど、モデルのデータでやらないとvalidation error で困りそう
889 :
878 :2009/08/13(木) 11:41:05 ID:???
>>887 なるほろ。それでは一個ずつdeleteするようにします。
>>888 そうなんですよね。それずっと考えてました。
User更新されずにAddressが消えただけ\(^o^)/ってなりますよね。
なんですが、AddressのbeforeSave内でフィールドをチェックして自分をdeleteするようにすると、
beforSaveがtrueを返す→いったん削除後新規に保存される
falseを返す→他の一連の処理も全部やった後にロールバック。deleteもUser->saveも全部キャンセル
ってなりませんか?ちなみにOracleです。
>>889 コールバックでやるならafterSaveじゃね?
$this->User->set( $this->data );
// if なんたらで $this->User->data['Address'][ n ] を unset
$this->User->saveAll(); // ここでdeleteさせる
いや、unsetしちゃだめか。無駄なupdate->deleteしたほうが楽か
url_rewriter.tags と session.use_trans_sid を設定して、cookie がなくても セッションを維持できるようにしたのですが、Controller->redirect は自分で sid を付加しないといけないようです。 cookie のときはこの処理が要らないので、つながってるセッションが cookie か sid か判定したいのですが、どこを見たら判定することが出来ますか?
いってることがよくわからんけど session.use_trans_sidを有効にするってことは、もうCookieでのセッションは効かないよね? SIDのGETなりでも、Cookieでも、っていう欲張りなことがしたいの? できるの?
893 :
891 :2009/08/13(木) 14:19:58 ID:???
894 :
892 :2009/08/13(木) 15:12:59 ID:???
ん?本当に? つーかそんなことそのURLに書いてある? ブラウザのCookieが有効かどうかなんてサーバー側は知りえないんじゃないかな? (1ページ目で食わせて遷移先で食ってるか調べるっていう小細工でもしなければ) って思ってたんだけど。ちがうんかいな
895 :
892 :2009/08/13(木) 15:22:41 ID:???
まぁ脱線してるから、 もしそれが可能っていうかそういう仕様なんだったら controller->params['url']['SID']みればいいだけでないのっと。 経験上そういう仕様ではなかったと思うけどね。
>>878 Ajaxを使ってOKなら、アドレスフィールドの横にAdd/Deleteボタンでも作ってやって、
アドレスの追加・削除は、その場でAjaxでAddressコントローラ/モデルに投げてしまえば美しく決まると思うよ。
881ですけど、無知で大変恐縮ですが教えて貰えませんか。 mysqlの本には りんご、みかんって保存するようなことかいてあったし。 0,1,2で保存しちゃうと DBのアソシエーションだらけになりませんか?
貴方はDBに格納するかどうか以前に、データの正規化について学ぶべきだと思う。 何故コードで管理するか判ってないよね?
作りやすさとかメンテナンス性なら、りんご、みかんって保存するほうが楽だと思う。 個人的には楽したいし出来るときはする。 ソースもデータも見て分かるって事は重要だと思うし。 パフォーマンスでカリカリチューンしたいなら違うのかもしれんが、富豪的に作って後から困るぐらいアクセスあってから考えればいい。
>>900 本来は正規化はすべきと思うけど、現状のCakePHPを使う限りは
正規化しないDBのほうが使いやすいと思うよ。
携帯からなので詳しく書けないけど、 elementsに $type = array('りんご','みかん','バナナ'); e((isset($type[$fruits])) ? $type[$fruits] : 'カテゴリーがありません'); と書いて、DBはintで管理したら良いかもね。 検索のことを考えれば、普通はDBに文字列を登録しないよ。
>900〜904 ご親切にありがとうございます。大変勉強になります。 みなさんすごいお詳しいですね。 >データの正規化 勉強してみます!
DBはmysqlなんですけど、saveするときにtinyintのカラムに $data['column'] = 8; とかでやると1で登録されちゃうんですけど、どうすりゃいいのかにゃ。
>>907 そのテーブルの show create table を該当カラム部分だけでも張って味噌。
>>908 レスとん。
該当カラムのとこ↓
`column` tinyint(1) NOT NULL default '0',
$data['column'] = 8;
以外に
array('column' => '8')
とか色々やったんだけど駄目なんだ〜。
'0'は0として登録されるんだけどそれ以外は1になっちゃう。
ってことは内部でtrue,falseに変換されちゃってんのかに。
>>909 tinyint(1)
ってどうしたくて設定したの?
tinyint(1)
をググってみることをおすすめする。
多分二個目
タイニーイントってブーリアン型みたいなもんじゃないの
>>912 必ずしもそうじゃないから混乱するんだなぁ・・
いいけど、正直スレ違いだよね
うん。一度ActiveRecordから離れてMySQLの基本に立ち戻る事をオヌヌメ 最近Cake以外の話題でスレ消費してるな。ここはMySQL初心者質問スレか?
そうおもうなら答えずスレ違いとだけ書いとけよ 答えるから続くんだろ
そこまでガチガチにしなくてもいいんじゃね、答える人がいるんだから 嫌ならさっさと誘導なりすればいいけどさ
よく判らない型は利用しない... ヘボ現場からの声でした
まぁいいじゃん。教えてあげようよ。 俺らが親切にすればその教えてもらった人もできるようになったら 「俺も、2chで世話になったな。あ。俺もこれくらい教えてやろうか」 となるだろうし。 な。俺からも頼むから。
>>919 お前も世話になってるんだからお前が教えろ
>>918 にしても、よく分からない型(MySQL?)使用してる現場って(汗
頑張れ、超頑張れ
922 :
nobodyさん :2009/08/18(火) 19:06:03 ID:NZ4pSX/j
超初心者なのですが、わかる方がいたら教えてください。 CakePHP1.2ガイドブックを買ってきて勉強を始めたんですけど bakeで焼いてみようと言う部分で、サンプル通りに作り 入力画面、更新画面などが表示されるようになったのですが 更新すると手入力をする日付(コンボボックス)の部分が「This field cannot be left blank」 とでて更新されないようなのです。 この部分がチェックの時にどうなっているのかを何処で見て修正すればよいのかがわかりません。 フォームでは日付+時間を指定しているのですが・・・ わかる方がいたらよろしくお願いいたします。
入ってたらvalidationルールの設定をミスってると思う。 とりあえず コントローラのeditアクション内 $this->Model名->save直前で debug($this->data); データdata[hoge][year]やmonthが入ってるか確認 たぶん入ってるでしょう んならModelのvalidatesの該当するフィールドのルールを確認 とりあえず消して、ブラウザから更新かけてみる たぶん通る おそらくルールはdateであるべきだけど、そうなってないんじゃないかな
出だしの「入ってたら」は無視してちょ
925 :
nobodyさん :2009/08/18(火) 19:29:12 ID:NZ4pSX/j
書き込みありがとうございます。 早速探ってみます。
922です。 validatesの該当するフィールドのルールを消したら動きました。 ルールはdateになっていたのですが、 MySQLのフィールドがdatetime 入力項目が 年 月 日 時間(1〜12) 分 AM/PM の為 dateでは駄目なんでしょうか・・・・
927 :
923 :2009/08/18(火) 20:13:44 ID:???
CakePHPかわいいよCakePHP Djangoもちょっと触ったけどCakePHPに慣れたせいで書きづらかった。もうだめだ。
みなさまありがとうございます。 頑張って見ます。
初心者的質問なのですが、お教えください。 一寸上のレスで、Cake1.2 トランザクション駄目だみたいなのを読んで、 心配なのでトランザクションのテストをしたいのですが、 トランザクションのテストって、どうすれば良いのですか? 浅い考えとして、2人の人間にほぼ同時に同じデータを編集してもらって、 結果を判断する方法しか思い浮かばないのですが、これでは間違っていますか? 詳しい方、ご教授お願い致します。
>>931 間違ってはないけど、処理途中にスリープ入れるとかしてタイミングが
取りやすい工夫はしたほうがいいよ。
1.コネクションを2つ別々に作成する。 2.コネクション1で書き込み 3.コネクション2でチェック 4.などする。
934 :
nobodyさん :2009/08/21(金) 19:18:52 ID:1U31Opzk
質問です。 cakephp1.2 + smartyでvalidateを行おうと思っていますが、ググっても modelの記述方法しかないので「view部分は何もせんでいいの?」と 思っていたのですが、ひょっとしてfromヘルパーでhtml記述しているという 前提でしょうか?
質問がよくわからんけど viewに書く書き方もぐぐれば普通にでない? こんな感じ $form->input('hoge', array( 'error' => array( 'validationるーる名' => 'るーる', ), ));
あ、ごめ ルール自体はモデルにかくわ。 formヘルパー使ってなくてもdata[モデル][フィールド]の形でデータをsaveするとバリデーションは通るはず。 エラー出力と蚊が大変になると思うけど
エラー出力は <?=$form->error('field_name');?> を表示したい箇所にぶちこめばOKじゃね??
938 :
937 :2009/08/21(金) 21:37:04 ID:???
あ、formヘルパー使わない前提か。 スマソ
939 :
937 :2009/08/21(金) 21:47:18 ID:???
うーん、validateまたはsaveに失敗したら、 コントローラ内で $this->set('invalid_fields',$this->Model->invalidFields()); とかやって、 ビュー側で <ul> <?php if(!empty($invalid_fields)){ foreach($invalid_fields as $invalid_field){ echo '<li>'.$invalid_field.'</li>'; } } ?> <ul> (Smarty的な書き方は知らん) とか
caker的にzendはどうなのよ
>>940 zend frameworkのこと?
みんなライブラリとしてvendorにぶちこんでるでしょ。
>>941 zend fwでvendorに入れて便利なのってどんなの?
教えろ、いや教えてください
945 :
nobodyさん :2009/08/23(日) 22:56:22 ID:1PDco6xA
CakePHP1.2 で hasMany先のフィールドを条件指定したときの検索でつまづいてます。 TableA hasMany TableB TableA belongsTo TableC →やりたいこと。テーブルAとテーブルBにそれぞれ検索条件を指定して結果を得たい。 class TableA extends AppModel { var $name = 'TableA'; public $useTable = 'xxxxxxx'; var $belongsTo = array( 'TableA' => array( 'className' => 'TableC', 'foreignKey' => 'tablec_id', ) ); var $hasMany = array( 'TableB' => array( 'className' => 'TableB', 'foreignKey' => 'tableb_id' ) ); } コントローラで、 $condition = array('TableB.hoghoge' => "foofoo" , 'TableB.hoghoge' => "0"); $conditions = array('recursive'=>1 , 'conditions' => array ('AND' => array($condition))); $lst = $this->TableA->find('all' , $conditions); としたが、joinされず、Unknown column 'TableB.hoghoge' in where clause ... のエラー。 796あたりのレスをみながら頑張ったのだが解決できず。 どなたかアドバイスください…
実際に実行されたSQLも張ってみれば?
947 :
nobodyさん :2009/08/24(月) 12:03:11 ID:tRXwOu7Y
ここでレス待つより、SQLを見て、試行錯誤してでも直す方が絶対はやい。 core.phpのConfigure::write('debug', 2);で出るから見るといいよ。
948 :
nobodyさん :2009/08/24(月) 12:29:31 ID:7Xy2qm5D
934です。 色々と考えて頂いてありがとうございます。 解決した訳ではありませんが、やはり一癖あるという事だけは良くわかりました。 お礼申し上げます。
949 :
931 :2009/08/24(月) 12:39:45 ID:???
>>932 様
>>933 様
貴重なアドバイスありがとうございました。
返事遅くなりまして申し訳ありません。
これから、試してみようと思います。
また、何かありましたらよろしくお願いします。
950 :
945 :2009/08/24(月) 20:20:13 ID:???
>>946 ,947
アドバイスありがとうございます。debug は 2でやってます。
時間の都合もあったので、今回はSQLを書いて->query($sql)で逃げました…トホホ
cakephp1.2 でコントローラーで外部モデル読み出すとき App::import('Model','Hyouka'); $this->Hyouka = new Hyouka(); とやってるんですけど、もっと良い方法ないですかね。 いちいち Hyouka ってのを 3つ書き直さないといけないので面倒。 かといって uses に書くと重くなっちゃうし。
Classregistry::init('ModelName')->find('all');
ClassRegistry::init('ModelName') だった すんまへん
>>953 >>954 おおおおおおおおおおおおおおおおおおおお。
ありがとうございます。
できました!
cakePHP 1.2.4.8284 でpaginateしています。 Viewでの paginator->sort で困っています。 通常のフィールドの並び替えはできるのですが、 ストアドファンクションを用いて呼び出したフィールドの並び替えができません。 SQL的に書くと、 SELECT id, name, DISTANCE(point_x1 FLOAT, point_y1 FLOAT, point_x2 FLOAT, point_y2 FLOAT) as distance FROM places WHERE 1=1 これのidやnameは並び替えができるのですが、distanceについて、できません。 これについて解決法をご存じの方、ご教授いただければ幸いです。 よろしくお願いいたします。
>>956 places.distance とかじゃ出来ないんだっけ?
958 :
956 :2009/08/28(金) 18:49:33 ID:???
>>957 ご回答ありがとうございます。
試してみましたが、やっぱりダメなようです。
debugモードを3にしてすべてダンプしてみると、どうも最終的に生成されたSQLに
ORDER BYが存在していないことが分かりました。
どこかでsortの情報が消されているような感じもします。
お前らHABTMとかどうやってんの?
俺も一時期$controller->loadModel('(モデル名)');とかでモデルを読み込んでたが、 最近は素直に$controller->usesに書くようになった。 実際$controller->usesに複数個モデルを書くとどのくらいパフォーマンスに影響が出るんだろう
961 :
954 :2009/08/28(金) 21:51:18 ID:???
あ、952に「コントローラーで」って書いてたorz だったら俺も基本 usesに追加する。 コントローラーで読み込むモデルが固定されてる場合はuses 動的に変化する場合や、モデルで別モデル使うがアソシしてない場合は ClassRegistryで読み込んでるなー
アソシエーションは便利だけど、モデル内で細かいメソッドを作ってるときに 頻繁にジレンマに陥る。
>>960 >実際$controller->usesに複数個モデルを書くとどのくらいパフォーマンスに影響が出るんだろう
けっこう変わるみたいだよ。実際 3つくらいモデルを uses で読み込むと重くなってくる。
なのでこれからは基本 Classregistry::init('ModelName')->find('all'); で読み込むことにします。
ついでに bootstrap で
//血液型一覧
Configure::write('bload', array('A','B','O','AB'));
//性別一覧
Configure::write('sex', array('女性','男性'));
を定義してるんだけど、一気に配列で読み込む方法ないかな。定義が多くなるといちいち一つずつ読み出すのが面倒になる。
$bload = Configure::read('bload');
$sex = Configure::read('sex');
じゃなくてできれば配列で
$config['bload']
$config['sex']
みたいな感じで一気に返したいんだけど。
教えて下さい。
964 :
954 :2009/08/29(土) 01:46:51 ID:???
いい加減ぐぐれ Configure::write('my.sex', array('女性','男性')); Configure::write('my.bload', array('A','B','O','AB')); debug(Configure::read('my'));
>>964 ご親切にありがとうございます。
勉強になりました。本当にありがとうございました。
966 :
960 :2009/08/29(土) 04:01:59 ID:???
>>963 そうなのか…。ありがとう。
ウェブで公開されてるCakePHP製アプリのコードを見ると、大抵$usesに書かれてるんだよね。
大してパフォーマンスに影響しないからそうしてるのかと思ってたけど、単にあまり考えてないだけなのかな
そろそろ実行時のプログラムの流れを観察しないとなー
usesよりloadModelで逐一呼び出すほうが、高速って聞いたんだけど 違うのかよ!
>>964 こんなこと出来るのは知らなかった。非常にありがとう。
Zend Frameworkなんてモデルへのアクセス方法がincludeだけなんだぜ
正直そっちのほうがわかりやすくて良い。それなりの速さであれば。
Cakeのディレクトリ構造は知らないけど、includeだとだいたいフルパスでの記述になって面倒だから include_pathにおいてオートロードさせちゃう方が楽だったり
972 :
nobodyさん :2009/08/29(土) 18:49:53 ID:9ciXgaFz
venderフォルダにユーザー関数おいてんだけど、 こっから、configで定義した定数を参照出来ないんだけど? どうすればいい? 関数呼び出し時に、値を渡すのはなしで。
973 :
972 :2009/08/29(土) 19:00:07 ID:???
すみません・・・。 参照出来ました。 初歩的なミスをしておりました。
>>967 その通り。でも1.2からloadmodel使えなくなったんですよ。たぶん。
autoLinkUrlsが改行とか日本語も含めてURLとして認識されちゃうみたいなんだけど、 この辺修正できてる人いる? なんかいろいろいじってみたけど、正規表現が複雑すぎて直せない。
976 :
937 :2009/08/30(日) 04:19:14 ID:???
メシアじゃなくて飯屋
978 :
967 :2009/08/31(月) 11:26:48 ID:???
>>974 1.2使ってるけどloadModelバリバリ使ってますです。
実際loadModelのほうが1.2で速いと確認した神はおらんのか
>>979 ベンチマークのコンポーネントでも作って自分でやりゃいいじゃん。
現時点では速度に問題を感じてないから、将来的に改良したければするかも。 $usesだっけ、のほうが見やすいかなと。
ブートストラップでビューのディレクトリを分けたのはいいんだけど、 $this->render($action); で、ビュー呼び出すのにデフォルトのほうしか呼べないのは困ったもんだよね。
983 :
982 :2009/08/31(月) 19:57:46 ID:???
$this->render('/コントローラー/アクション') ってやったらちゃんと探してきてくれた。嬉しい。
CakePHP万歳!!
万歳!!
ん? 万歳!!
こうやって中国文化が引き継がれていくんだね
日本なんて朝鮮半島と中国文化の直系じゃねぇかw
乙 だがちょっと早漏気味ジャマイカ CakPHPへの要望を意味なく連ねてみよう ・デプロイツールが欲しい、データベースschemaがしっかりしたら使えるかな・・ ・日本語、マルチバイト関連も意識してくれないかなぁ・・ ・Authコンポーネントもうちょっとカスタマイズしやすくなりませんか・・ でも1.2なってからほんと重箱突くぐらいの不満しかないんだけどな。
趣味で作るには最高だよな。 まぁ仕事でも使ってるけど。
>>991 本当にそう。趣味で作る分には全く不満ないよ。
そういうオレも仕事でも使ってるけど。
CakePHPを使う会社に入りたいです><
埋め
埋め
埋め
埋め
埋め
埋め
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。