【PHP】フレームワーク CakePHP 11ホール目【v1.3】
1 :
nobodyさん :
2011/02/16(水) 21:52:35 ID:zCTGjUMq
終了
CGI厨さん遅いよ
Userというモデルから $this->User->find("all"); とすると、Userという配列の下に情報が入っている配列を取得するのですが、 Userの部分をなくしたものを取得することはできないでしょうか? 一つ一つデータ取る時、$item['User']['api']ではなく、$item['api']だけ書くほうが楽なもので。 [0] => Array ( [User] => Array ( [id] => 1 [api] => google [coupon_id] => 6113 ) ) [1] => Array ( [User] => Array ( [id] => 2 [api] => agi [coupon_id] => 5982
>>4 afterFind()をAppModelに書いて処理したらいいんちゃう?
でもFormHelperと連動しなくなるとおもうけど。
>>6 ぐぐぐ、やはり仕様ということで諦めるのが吉のようですね。
レスありがとうございます。m(_ _)m
複数のフィールドを一度に更新することはできないでしょうか? マニュアルやcake辞典を読んだところ、 $this->Model->set('id',4); $this->Model->saveField('buy_count', 3); $this->Model->saveField('sold_out', 1); このようにすれば、複数のフィールドを更新できるのですが、いくつものフィールドを 更新した場合、何行も繰り返さないといけない。。 こんなまどろっこしいことせずに、saveとconditionで一気に上書きするのがスマート なやり方なのでしょうか。
最近、フレームワーク無しのPHPプログラムを書いてるんだけど、 いつの間にかCake風の構成にしてた。 多重配列って長くなって面倒だけど、わかりやすいよね。
生成されたpotを弄ってviewの中のctpファイルはローカライゼーション出来るようになったんだけど、 バリデーション(モデル)とか プログラム上での(コントローラー)表記を ローカライゼーションしたい場合は どうしたらいいの?
cakephpで質問です。 idを主キーにしていて データの取り出しで this->model-> findAllByName($hoge) として this->model->save($this->data) した場合、上書き更新ではなく新レコード挿入になりますよね? 主キーでモデルのデータを取り出さない限り新レコード挿入になるのは分かるのですが、CakePHP仕様だと主キーを一つしか扱えないのでupdateAll()を使うしかないのでしょうか? 主キー以外のフィールドでの検索対象の レコードを更新したい場合、 スマートなやり方だと、どういうやり方が一般的でしょうか?
findしてるのに$this->dataなのがよくわからん idが$dataに含まれていれば更新になるよ
>>11 > バリデーション(モデル)とか
cakeplusというプラグインを使うか、
自分でエラーメッセージを置き換えるコードを書く。
> プログラム上での(コントローラー)表記を
コントローラーの好きなところで__()関数を書く。
>>13 idというフィールドを主キーにしていて
nameフィールドは主キーではありません。
findAllByNameしてレコードを特定していてもnameフィールドは主キーではないので、上書き更新されません。
新規レコード挿入になってしまいます。
テーブル名をつけるときに users_codesのようにアンダーバーをつけてもいいですか? その場合は外部からアソシエーションするときはusers_codes_idでok? またフィールドにもbirth_dateのようにアンダーバーを使ってもいいですか?
>>15 横からだが、
$result = $this->Model->findAllByName($hoge);
これで取得できるデータには当然idが入ってるぞ。
ただ俺のほうでやったら、
$result = $this->Model->findAllByName($hoge);
debug($result); //データあり
debug($this->data) //NULL
だけどな。
>>16 試した事はないけど、users_codesの様に両方とも複数形で繋げると、
多分HABTMの中間テーブル扱いになっちゃうかもね。user_codesの様に1個目が単数系ならやったことある。
フィールドにアンダーバーはやってる。
>>17 絞り込む際のフィールドが主キーでなくても、それに合わせて上書き更新できるんですね!
ということは
$res=this->model->findAllByName($hoge);
this->model->save($result);
でいけるということですね!
普通、this->model->hoge
みたいにデータを取得しにいったら
自動的に$this->dataに結果が格納されるもんじゃなかったでしたか?
>>17 返信ありがとう!!!!
テーブルをuser_codesと名付けたとき
外部からアソシエーション組む際は
user_code_idってフォーインキーを用意してやればいいですか?
CakePHPだと仮に10万レコード(10フィールド)あるようなテーブルへのアクセスでもサクサク動きますか? レコードが膨大な数になったときの工夫とかあるのかな? それとユーザー写真をアップロードさせたら、どういうふうに管理すればいいですか? データベース側はあくまでファイル名を記録しておいて、画像はwebroot/image/フォルダ内に一括して10万ファイルとかですか?
>>20 レコード数の多さはmysqlのチューニングの問題じゃないの?
ファイル管理はDB+非公開ディレクトリに小分けにすんのがいいんじゃないかね
ユーザー写真なら公開ディレクトで良いんでない? 非公開エリアにおいて、画像データ取得してGDで画像生成 する処理が発生するから負荷がかかるだろ。
GDは余計じゃないか? fopen()して適切なheader()書いて出力するだけだろ。 そのほうがアクセスコントロールも出来るし。 まぁ必要なければ余計な処理だけどな。
25 :
22 :2011/02/18(金) 23:50:40 ID:???
フォルダに格納するときは下2桁ごとにフォルダわけたほうがいいですか? 10058.jpgは pic/58/ フォルダの中に 17434.jpgは pic/34/ フォルダの中にといった具合で
>>26 どうしたほうが良いかは要件と仕様しだいなんじゃないの?
ユーザーアップロードしたファイルの置き方は、CakePHPは特に関与しないし。
正解が無い部類の問題だから、
要件を満たす仕様を、見合った経験を持つアプリケーション設計者が考えるべき。
>>26 は
>>20 だと思うんだけど、
この質問をするくらいのスキルなら、10万レコード・10万ファイルを扱うシステムを、
試行錯誤無しに設計するのは無理だと思うよ。
フォルダ分けるメリットって、ファイルを視認しやすい以外にない気がする。
>>24 cakeなんだからそこはMedia Viewを使ってほしい。
俺のサイトが一日数ヒットから10万ヒットに増えたらと思うとcakephp使うのが心配
>>28 1ディレクトリにあまりに多いファイルが入ってると、
ディスクI/Oが遅くなるって聞いたことがあるんだけど
質問です。 ブログでいうブログタイトルなどの、編集する可能性はあるけど複数のレコードは存在し得ない情報ってどの様にして管理すればいいのでしょうか? 単一レコードしか存在し得ないのにRDBMSで管理するのはどうなのかなぁと思い、悩んでいます。 ネイティブPHP使ってたときは、そういった設定項目を纏めたSettingsクラスというものを作り、そのインスタンスをシリアライズしてたんですが… Cakeだとみなさんどうしていますか?
>>32 >ネイティブPHP使ってたときは、そういった設定項目を纏めたSettingsクラスというものを作り、そのインスタンスをシリアライズしてたんですが…
Configure::write('setting.title', 'ブログタイトル'); とかできるんで、
Settingsクラスというものになれているなら、bootstrapに設定を記述するのがいいのでは
WordPressだとsettingsテーブル的なのが存在してて、ブログ全体に関する設定はそこに突っ込まれてた気がする setting_nameとvalueみたいな感じで
jQuery使いたいんだけど、JsHelper経由で扱う意味ってありますか? viewにstaticで書いたほうが扱いやすい気がするけど。
パスワードを暗号化にして入力フォームでエラーで弾かれたとき、 パスワードが自動的に暗号化後の文字長になって再入力されています。 これってエラーがあった時は常にパスワードのところだけを空にしてリセットするってのが正しいのかな? 大手サイトとかも、空リセットしてますよね?
普通そうするだろ
ということは大手サイトも 個人ユーザーの暗号化前のパスワードは保持していないのかな? それって普通? 結構同じパスワードをいろんなネットサービスにおいて使ってるんだけど、 サービスの運営はユーザーのパスワードは把握できない仕組み!?
パスワードを平文で保存してたら 漏れた時しゃれにならんぞ
でもメアドとかも平文で保存してるでしょ?本名も
何を言ってるの?Cake以前の話だろ。
>>35 例えば$js->linkとかでリンク先やパラメータに変数を渡したり
メッセージを国際化したいとかそういう時はJsHelper使ったら楽でしょ。
もちろんJsHelperだけでは足りない部分もあるから場面によって使い分ければいい。
>>41 まぁ、そういうな
>>40 通常は可逆式の暗号化をしておいて、
メール送信などで利用する時だけ
元のメアドに戻してメールするのが普通だよ。
>>35 JsHelperってjQueryなどの一部のメソッドをphpから呼べるみたいだけど、
正直jQuery書いたほうが書きやすいし、使う気にはなれないな。
普通にjQueryが書ける人ほど、あまり意味の無いヘルパーだと思ってる。
>>38 サイト運営者がユーザーのパスワード見れたらまずいだろう。
自分で運営してるほぼ個人サイトならともかく、
あまり信用できないバイトとかもスタッフに居るケースもあるんだぞ。
バイトが何かやらかしても、自分(自社)に責任が来るんだから、
パスワードの平文はやめとけ。
だから、パスワードはハッシュしか残さないのが普通だな。
非可逆なものだから、パスワードリマインダーは、
ユーザー登録と同様に、短時間有効なトークン付きの
パスワード再設定URLを、登録時のメールアドレスに送るのが良くある実装。
>>44 なるほど。勉強になるよ。
メアドとかはハッシュにするもんなの?
パスワードを完全ハッシュ化(難読化)する事って常識だと思うんだけどな・・・
会員制サイト作るならまずそこから勉強するだろ。
>>45 は完全独学かよ。知識なさ過ぎる。
>>45 ヒント:ハッシュは非可逆暗号で作られている
>>46 会員制サイト作る際の、そういう細かい点まで教えてくれるサイトあったら教えて
cake使っていて知らないとは・・・?
CakePHPのctpを使いたくないです テンプレートと入れ替える方法どこかに載ってないでしょうか
51 :
32 :2011/02/19(土) 20:00:34.20 ID:???
ありがとうございます。
>>33 なるほど、専用のクラスがあるんですね。
というか、Cookbookに載ってますね。勉強不足でした。
>>34 最初その方法を考えたんですが、前述のとおり違和感があったので悩んでました。
でも結構メジャーなWordPressがその方法を取っているってことは、パフォーマンス的には良い方法なんですかね?
WordPressの開発思想は独特だよ。 DRYを積極的に無視してクラスもなるべく作ってない。 メリットは、入り組んだクラス呼び出しや 汎化してぱっとみなんの処理か分かりにくいコードが少ない。 だからプログラミングが苦手な人でも、改造したいところを変えれば、 あまり他に影響させずに改造できる。 デザイナーなどの支持を得ての普及だね。 それもひとつのやり方だけど、 コードが読みにくいし俺はあまり好きじゃないな。 設定がDBにあるのは、そういった考えの下、 管理画面から変更できるようにするためだろうね。 WordPressは基本的に設定ファイルを変えて、アップロードとかする必要が無い。
53 :
34 :2011/02/19(土) 22:02:05.74 ID:???
>>51 パフォーマンス的にはSQLを一回投げる分悪くなりそうだけど、
>>52 の言うように、管理画面からいろいろ設定を変えたりすることを考えると
DBで保持してた方が更新が楽な気がするなあ
「絶対固定!」って値ならファイルのどこかに書いちゃってもいいと思うけど
まったくお勧めはしないけどね。 WordPressはオープンソースで配布して使うから、 ブログ名の設定が管理画面から出来る必要があるだけだし。 そういう設定なんて早々変更はしないでしょ。 開発者が設定ファイルを変更するなんて簡単だし、 DBに入れるほうが余計なトラブルの元さね。 設定をDBに入れると、開発中のデバッグで泣きを見ると思うよ。
そうそう。外部ファイルにまとめられるならその方が良い。
俺は、サイト用の設定はDBでとアプリ用の設定はファイルでって言う風に分けてるよ。 使い回しする時に楽だからね。 サイト名とかサイト説明とかそういうのはDBで管理画面からいじれるように。 画像置き場のパス設定だとか外部APIのTokenみたいなのは設定ファイルに入れとくって感じで。
ん?Configure::write()を使えば設定ファイル書き換えできるんですよね? それならDB使わなくても管理画面から弄れる様に出来ません?
>>57 違うよ。write()はConfigureクラスのインスタンスに書き込むんだよ。
>>58 Configure::storeを上手く使えばok?
60 :
59 :2011/02/20(日) 03:31:43.25 ID:???
セッションをDBに保存している場合、 定期的(?)に古いセッション情報を削除しているらしく、 そのタイミングでDB側が処理に詰まってしまう。 誰か解決方法教えてください。
通常のフォルダとSSL用のフォルダに分かれてるサーバーの場合、 どうやって配置すればいいんだろう?
これ使えないね、初心者用
>>63 usernameがパラメーターである条件が明確じゃないと
両方のパターンを共存させるのは無理くさいな
やるとしたらroutesじゃなくてrewriteの分岐だろうね
例えばusernameの先頭1文字が数値の場合はパラメータとして判別するとか
>>63 routesで先にユーザーページ以外のURLにマッチするパターンを羅列して振り分ければ?
あとはユーザーネームとしてあり得るパターンの正規表現を使うか
67 :
nobodyさん :2011/02/21(月) 00:10:51.01 ID:qx7ew/PU
フォームを全て空白で送信し、controller内で if($this->User->validates()) { echo "ok"; }else { echo "ng"; } だったときに必ずOKになってしまいます。 modelのvalidation定義で下記のようにしたらしたで、 条件を満たしてるのバリデーションエラーが出っ放しになります。 これって解決できますか? public $validate = array( 'username'=>array( array( 'rule' => 'alphaNumeric', 'required' => true, 'message'=>'Username has to be 10 to 20 alphaNumeric characters!' ), array( 'rule' => 'isUnique', 'required' => true, 'message'=>'This username is already in use.' ), array( 'rule' => array('between', 10, 20 ), 'required' => true, 'message'=>'Username has to be 10 to 20 alphaNumeric characters!' ) ), )
68 :
nobodyさん :2011/02/21(月) 00:24:48.77 ID:qx7ew/PU
すみません、補足で質問させてください。 validationって基本的に if($this->User->save($this->data)){} と絡めて使いますよね。 他の判断条件も組み合わせた時、 入力フォームのバリデーションエラーも一緒に出力したい場合ってどうすればいいですか? 下記だと、まず他の条件を先に判定してしまうため、他の条件判断が満たされない場合は $this->dataのバリデーションエラーが出力されません。何かスマートな方法をご教授くださいませ。 if(他の条件判断){ if($this->User->save($this->data)){ echo "saved!"; } }else{ echo " ERROR!! 他の条件が満たされていません!" } }
69 :
nobodyさん :2011/02/21(月) 00:38:18.41 ID:qx7ew/PU
もしかして バリデーションエラーを出力するためだけに saveをこういう使い方しますか? 結果としてはバリデーションも他の条件のエラーも一緒に表示されるようになりました。 ただsave関数なのにsaveしないところで記述するってのが少し解せないかんじもします。 if(他の条件判断){ if($this->User->save($this->data)){ echo "saved!"; } }else{ $this->User->save($this->data);<<<<<<<<<<<<<<<<<<<<<<<<<<<< echo " ERROR!! 他の条件が満たされていません!" } }
70 :
nobodyさん :2011/02/21(月) 00:46:05.47 ID:qx7ew/PU
だめですね。 「他の条件以外」を完全に満たしていて、「他の条件」を満たしていない時にsaveされてしまいますね。。。(当たり前か・・・)
全然読んでないけど落ち着いてマニュアルじっくり読んでこいよ。
ちょっと疑問に思ったんだが CakePHPであることを隠蔽するってあったけど、どうしてもコントローラ名(URLの一部)が複数形の単語だったりで、特徴あるからすぐバレるよね? かといって命名規則を無視出来んし
それって特徴か?
アソシエーション組む時って リレーション先のテーブルのモデルのphpファイルも用意してやらなきゃいけないの? リレーション元のモデルからbelongsToとか使えば特に要らない?
なぁ、前から疑問に思ってたことなんだが、 なんでCakePHPはControllerにビジネスロジックを書いちゃうの? MVCとかちゃんと理解して作ったとは思えないんだよね。
ちゃんとModelにロジックかいてる人も居るよ
マニュアル読んでると、
コントローラ名
モデル名(ただし単数系)
ビューのフォルダ名
DBのテーブル名
を統一しろ!的になってますが
UsersのDBテーブルに対して、同じ名前のコントローラー、モデル(単数系)、ビューのそれぞれを持っていたとします。
ただし
http://www.hoge.com/registrations/として 、
registrations_controller.phpとregistration.php上でメインでUsersテーブル(外部モデル)を扱うことって可能ですか?
もちろんregistrationsというテーブルは一切持たないものとして、usersテーブルのレコードを処理するためだけのコントローラーです。
俺も普通にModelにロジック書いてるけどな ControlloerはあくまでModelを実行して結果をViewに渡す目的で使ってるけど。
逆にModelにロジック書かない人(というかContorllerに書いちゃう人)のソースは見たくない
CakePHPのctpを使いたくないです テンプレートと入れ替える方法どこかに載ってないでしょうか
>>77 CakePHPの場合、どういうURLにしたいか考えずに、
テーブル/Modelから考えたほうがいいよ。
そうすると、良くある形として .com/users/registration みたいな感じになる。
で、こういう規約まんまのURLがまずいなら
routesで調節するんだ。
一応、これがセオリーだと思う。
まぁ、routesって使いこなすのに慣れが必要だから、
セオリーになりきれてないかも。
>>75 MVCに慣れていない最初はControllerに書いちゃいがち。Controllerは動きがわかりやすいからね。
そのうちああこんなのモデルに書いた方がいいだろ。って気がつく。
カテゴリとか設定ファイルをDBで作っている場合
誰かキャプチャを実装してる人いる? ReCaptchaは王道だけど会員にならないといかんし、 KCaptchaは地味過ぎる Securimageが一番いいけど、他の人のブログ参考にしても、マトモに動かん
チェックボックスAとB、テキスト入力CとDがあって、 チェックボックスAが選択された場合テキストCが必須 チェックボックスBが選択された場合テキストDが必須 のようなvalidateはどうかけばええでしょう?
普通にbeforeValidateにifで書けば?
>>77 と同じ疑問を持ってるんだけど
Controllerがテーブル名っておかしくね?
他のテーブル使う時どうすんのよ?
てゆーか、普通コントローラはユースケース毎に付けね?
別にControllerとModel(=DBテーブル)が一対一対応するとも何とも書いてないだろーよ ドキュメント読め
>>91 ControllerとModelが一対一であるとは限らないのに
Modelの名前をControllerに付けるというのが意味不明だって言ってんだよ。
意味分かる?
推奨されているやり方であって、強制力はないわけだし、 自分のやりやすい形でやればいいじゃん。 ビジネスロジックもコントローラに書くことはできるわけだし。 少なからず、コントローラとモデルの名前が一緒だったら、 このコントローラは、このモデルに関する物だなと直感的にわかる
キャプチャとか使う方が面倒なもん入れないでくれ、読めねーんだよあれ 無能な技術者が思いついたとしか思えんアホみたいな仕様だよな、あれ 10年後は誰も使ってなくて「昔あんなんあったよねーキャハハ」って笑われてるよ
キャプチャは甘え
メール欄の確認があってしかもコピペ不可だとぶん殴りたくなるよね
Cakeの導入を検討してるのですが、一つ質問させて下さい。 select user_name from users; から取得したデータをビューで出力する際、テンプレートで例えばですが、 <?php foreach (...): ?> <?php echo h($data['user_name']) ?> <?php endforeach; ?> のような制御が必要ですよね。 Cakeって配列の命名はcamelCaps形式だと思うのですが、カラムがuser_name (アンダースコアを含む) の場合、 配列のキー名はsnakeCase形式になりますよね。 命名規則がバラけると思うのですが、その辺りどちらかに統一するとか指針はあるのでしょうか。
>>97 テーブル名をuser_nameじゃなくてusernameにするのがいいです。
HABTMの時に頭がごちゃごちゃになります。
無理ならInflectorを通してみて確認するといいよ。
どっかにそういうサイトもあったけど忘れた。
99 :
98 :2011/02/22(火) 03:20:23.25 ID:???
ああごめん。カラム名はなんでもいいです。
HogeUser,MogeUser,PogeUserというモデルがあって、 それぞれのユーザー同士で1対1の簡易メッセージの送受信をさせたい時、下記のような設計で問題無いでしょうか? ■モデルのアソシエーション HogeUser hasOne Mailbox MogeUser hasOne Mailbox PogeUser hasOne Mailbox Mailbox HATBM Message ■DB mailboxes: id mailboxes_messages: mailbox_id message_id sended (true=送信側, false=受信側) opened(true=開封済, false=未開封) messages: id title(件名) body(本文) created *_usersテーブルはそれぞれmailbox_idフィールドを持っています。 *_usersはそれぞれ構造が全く異なるのでusersとして統一させることはできません。
>>97 CakePHPでキャメルケースになるのは、配列のキーじゃなくって、
モデル名だよ。
usersテーブルはUserModelが担当するんだ。
UserModel->find()したら、データは
$this->data['User'] = カラム名をキーとした連想配列 //1件の時(ってこうなるよね?)
$this->data = array(['User'] = カラム名をキーとした連想配列, ... ) //複数件のとき
こんな感じだったはず。
UserModel部分がUserという配列のキーになってる。
98の言うとおり、HABTMの中間テーブルがアンダーバーで繋ぐから、
テーブル名にアンダーバーを、それ以外で使うのはお勧めしない。
カラムには全然おk
>>100 設計についてはスレチだし、めんどうだから考えないけど、CakePHPとして一言。
HABTMの中間テーブルには、プライマリキーと外部キー以外はもてない。
別にカラムがあっても動くけど、その情報はきえてしまうんだ。
だからsended openedがだめ。
消えてしまうというのは、mailbox_id = 1にmessage_id = 1と2の2通のメッセージがある状態で、
新たなメッセージ message_id = 3がきた場合、
DELETE FROM mailboxes_messages WHERE mailbox_id = 1 してから、
INSERT文でmessage_id = 1と2と3を発行するんだ。
だからmessage_id = 1と2のsended openedはきれいさっぱり。
中間テーブルに何か情報を持たせたいなら、HABTMじゃなくって
hasManyとbelongsToで作るべき。
当然、HABTMじゃないからfind()の仕方も変わってくるけどね。
>>97 基本はキャメライズするんだけどDBテーブルは慣習的にアンダースコアだからフィールド名を配列キーとして使うときだけはそのまま
Cakeの構成で違和感があるとすれば、app以下のディレクトリ構造だな。 Userと言うモデルがあったとして、それぞれmodels、controllers、views に入れないと行けない。viewsに関してはディレクトリを作成して。 一つのディレクトリ内にまとめて /app /user └controller.php └model.php └index.ctp └form.ctp でもいい気がする。ビューが増えるならviewディレクトリ作って入れるとか。 こうすればFTPで転送する時、userディレクトリだけで良いし。
Cakephpで作ってるサイトって ドメイン下に/users/ ってつけたら、大抵ページが存在するから見破るのがラクすぎる
俺そんな構成のフレームワークやだなぁ。 てかMVC毎にフォルダ分けるのってCakeだけじゃないというか、 その構成の方が主流じゃないのか? むしろ他にある?
>>106 主流なんだけどさ、ファイル編集する時、あっちこっち見に行かないと
いけないというのが作りづらさを感じるんだよね。
ま、
>>104 だとファイル名が全部同じになって分かりづらいってのもあるけど。
usersなんてディレクトリ普通あるか?
>>108 もしかしなくてもCakePHP使ってないだろ
>>104 でも悪くない気がするけど、モデルを基準にしてディレクトリ分けるというのも微妙だな
モデルはないけどコントローラーだけ存在するとか、そういう場合にわかりづらくなる気がする
>>108 userモデルを使った場合routesで/users/usernameみたいにする人が多いってことじゃね?
cakeに限らない気がするけど。
CakePHPって主テーブルしかレコードの編集できんの? belongsToとかで繋がってる先のレコードを編集できんの?
>>112 やり方を調べる方法おしえて!
Googleさんで、何て調べればいいのかわからない
>>114 時間かかりすぎるやん!!
せめて、どのページかだけでも教えてちょんまげ!
あなたには、CakePHPの知識が圧倒的に足りません 時間はかかりますが、全体を見ることをお勧めします
今日の住人はツンの日か
>>104 お前の稚拙な考えはmixiとかで発表してろ。
お前のようなど素人は秀丸とかでちまちまやってから
辛いかもしれんがプロはIDE使ってるんだよ。心配すんな。
>>119 お前、秀丸つかってんの?
俺はイクリプス一択なんだけど?w
なんか口の悪いおっさん多いなぁ
秀丸はダサイ
123 :
nobodyさん :2011/02/22(火) 23:17:28.23 ID:fDDX4hLa
すみません。素人ですが横から質問させてください。 モデルのuser.php(usersテーブルを呼び出し)と コントローラのregisters_controllers.phpと ビューのregistersフォルダがあります。 registers_controllers.phpを下記のようにしてモデルのuser.phpを呼び出し usersテーブルを読み込もうとするのですが Error: The view for UserController::add() was not found. が出ます。 viewsにはregistersフォルダを用意してあり、index.ctpも配備されているのですが なぜエラーが出るのでしょうか? ---registers_controller.php---------------------------------- <?php class RegistersController extends AppController { var $name = 'User'; 以下略 ------------------------------------------------------------ ---user.php------------------------------------------------- <?php class User extends AppModel { var $name = 'User'; 以下略
class RegistersController extends AppController { var $name = 'Registers'; var $uses = array('User');
>>123 エラーメッセージ読めよ。
UserControllerはあるのか?
CakePHPはUserControllerがあるという認識で動いてるぞ。
126 :
nobodyさん :2011/02/22(火) 23:35:19.01 ID:fDDX4hLa
127 :
nobodyさん :2011/02/22(火) 23:47:54.53 ID:fDDX4hLa
ごめんなさい、初心者ごとで申し訳ないのですがもう1つだけ質問させてください。 コントローラ(registers)で他モデル(user)を呼び出した後、 コントローラ内に他モデル(user)を扱う場合は $this->User->ほにゃらら で使えますよね? では、viewから下記のようにデータを受け取ったときはどのように すればいいのでしょうか?純粋に $this->register-> でOKですか? echo $this->Form->create('Register'); echo $this->Form->input('email'); echo $this->Form->submit(); echo $this->Form->end();
129 :
nobodyさん :2011/02/22(火) 23:55:07.65 ID:fDDX4hLa
>>127 すみません。一応このチュートリアルもACLもやったんですが、
いまだに理解できていないのが現状です。。。
130 :
nobodyさん :2011/02/23(水) 00:03:55.10 ID:gK6lHkB0
>>128 さん
>>127 でviewのForm->create()で実質ユーザーテーブルへ登録することになるけど
飛び先はそのままのページ(register.add)へ遷移させたいので
echo $this->Form->create('User',array('url'=>'.'))
としていますが、おかしいようです・・・・
131 :
nobodyさん :2011/02/23(水) 00:09:28.68 ID:gK6lHkB0
hoge.com/registers/addに飛ばしたいのですが、 formで別モデル(User)を指定しているのでジャンプ先が必ず hoge.com/users/registers/add になってしまいますねorz
133 :
nobodyさん :2011/02/23(水) 00:41:36.70 ID:gK6lHkB0
>>132 すみません。チュートリアルもやるにはやって本も400ページほど読んだのですが、
完全に把握できず、どういうものか良く分からないで何となくやってるのが現状です。
こういう理解でよいものでしょうか?
1.フォーム入力から受け取ったデータは、取り扱っているモデル名に関わらず
$this->dataという変数に連想配列形式で格納される
2.DBからのデータは $this->(モデル名)->(様々な関数コマンド)を利用して
必要な分だけを呼び出す。
もし、Modelでアソシエーションを組んでいた場合、その呼び出した際の
メインテーブルの対象レコードに紐づくアソシエーション先も自動的に呼び出される。
すなわち モデルTable1にTables2をアソシエーションで設定していたら
$str = $this->Table1->find('all');
この時点で$str[0][Table2][任意フィールド]の中に
Table1で絞られたレコードのTable2の関連レコードが格納されている
という認識でいいんですよね?
あと良く分からないのがアソシエーションを組んでるときに
$this->Table1->Table2->save()
みたいに複数のテーブルを跨いでいってる場合です。
普通に
$this->Table2->save()
じゃ駄目なのでしょうか?
134 :
nobodyさん :2011/02/23(水) 00:46:24.44 ID:gK6lHkB0
>>133 ふーむ、しょうがないのう。
> 1.
POSTに限りyes。モデルがどうなってるかは、コントローラーでdebug($this->data)とかして、
自分で見てみると良い。
あと、CakePHPでGETメソッドは上級者向けなのでなるべく使わないほうが良い。
> 2.
大体そんな感じ。このあたりは奥が深いので、
とても1レスで全てを伝えるのは無理、というか俺も把握しきれてない。
$this->Model->Model->save()はあまりしないな。
トリッキーな事をしてなければ、UsersコントローラーではUserモデルへのデータと、
アソシエーションで紐ついてるデータを保存するわけだからな。
$this->User->save()か$this->User->saveAll()で基本的には十分。
Userモデルに紐付く何かも、ViewをFormHelper使って無難に作っていれば、
$this->dataをsave()かsaveAll()すれば問題なく保存されるはず。
ただ、どういう場合にsave()かsaveAll()は俺もちょっと語れるほどじゃない。たまに試行錯誤する。
>>134 CakePHPではURLの見栄えはroutesで調節するのがセオリー。
ただ、これはちょっと難易度が高いのが難点。
ここでのやり取りから察するに、質問者はroutesにかなり時間をかけて取り組むことになるとは思う。
一応Cookbookはこのページだけど、なんかだらだらと書いてあって要点を得ない。
とても分かりにくい。が、しかたがない。
http://book.cakephp.org/ja/view/945/%E3%83%AB%E3%83%BC%E3%83%88%E3%81%AE%E8%A8%AD%E5%AE%9A > 一般的な Router の他の使い方は、コントローラの別名(alias)を定義することです。通常の /users/someAction/5 という URL の代わりに、/cooks/someAction/5 でアクセスさせたいとしましょう。このようなルートの設定は、次のようにすることで簡単に実現できます。
> Router::connect(
'/cooks/:action/*', array('controller' => 'users', 'action' => 'index')
);
一応この方法でUserControllerのまま、URLを変える事が出来る。
ただ、これだと/cools/add みたいなのもUsersController->index()に行っちゃいそうな気がするけど・・・
Cookbookが間違ってるのか俺が間違ってるのか。面倒だから確認はしない。
137 :
nobodyさん :2011/02/23(水) 01:35:30.01 ID:gK6lHkB0
>>135 さん,
>>136 さん
ありがとうございます!!!感謝感激です。
>>127 の件は下記で解決できました!!!
echo $this->Form->create('Register');
echo $this->Form->input('User.email');←モデル名. をフィールド名の前へ追加
echo $this->Form->submit();
echo $this->Form->end();
>>134 についてですが、皆さんは規約どおり
usersテーブルに関連するものであれば全てURLを
hoge.com/users/○○○○○
としてるのですか?
CakePHPで作ってるのを隠蔽したいのであれば、工夫などされていませんか?
138 :
nobodyさん :2011/02/23(水) 01:40:49.20 ID:gK6lHkB0
それと例えば hoge.com/register/でアクセスさせたいのに規約のせいで
hoge.com/registers/と複数形になるのは諦めてますか?
それとも
>>136 さんが言うようにroutesで調整してます?
そうなれば、そもそもusersコントローラとregistersコントローラに分ける
必要はなくて最後にroutesで全て設定すればいいんでしょうか?
どういうやり方が標準なのか分からず、ごめんなさい。
これソース読めん。
>>137 そりゃたまにはコントローラーとモデルの規約に沿わない名前にすることもあるよ。
1モデルに大して2コントローラーなケースとか、その逆とかな。
ただ、それなりにCakePHPの中身を分かってるから出来るだけで、
初心者がURLに見栄え目的に規約に沿わない名前にすると、
今見たくトラブるだけさね。
CakePHPは規約に沿う事で色々と工数を省略できるようになってるわけで、なるべく沿ったほうが良い。
ただ、コントローラー名=URLだと困る事も想定はされる。
でも規約に沿わないとめんどくさくなる。
だからroutesで設定できるようになってるんだ。
別に規約に沿わなくても開発は出来るよ。
ただ、CakePHPの利点を使わないで作るから、めんどうになるし、
/register/addに遷移したいのに/users/addに遷移したりとトラブルになりやすいだけ。
FormHelperでいちいちModel.fieldにしないといけなくなったのも、規約に沿ってない弊害だな。
141 :
nobodyさん :2011/02/23(水) 02:06:04.37 ID:gK6lHkB0
>>140 懇切丁寧な解説ありがとうございます。
非常に説得力があります。
確かにこれではCakePHPのメリット(省略による開発速度)が損なわれてしまいますね
やはり、基本的には
関連するテーブルは一つのコントローラ、モデル、ビューに収めていく形式がいいのですね。
そうすると、一つのコントローラの中に多くメソッド(アクション)が入りすぎてゴチャゴチャになるという理由からもコントローラを二つにして、メソッドを分けようと思っていたのですが、そのやり方は一般的ではないんですね?
一つのコントローラ内にアクションが30個入るとか普通なのかなぁー(^_^;)
URLの見栄えの件はroutes設定で了解です。
ただ全てのコントローラ(URL)が複数形になっていますが、これを全部単数系にroutes内で弄っていくのが一般的なのでしょうか?
そもそもCakePHPであることを隠してなんになるというんだろう。 CakePHPは、元々CakePHPである特徴が多くて隠蔽しにくいフレームワークだからな。 そりゃなんのフレームワークを使っているか、隠せるなら隠したほうが良いけど、 手間対効果を考えれば、あまり気にするとこじゃないと思うんだけどな。 俺だったら、予算をくれるんならやらないこともないけどね。 予算が足りなきゃ、むりっすーって言ってつっぱねるだけだわ。
>>142 予算とかではないのですが海外で公開する予定なんで、
攻撃されまくりそうで怖いんですf^_^;)
Ruby on railsとかなら、こういうCakePHPの規約ならではの弊害みたいなの無いんですかねー?
>>141 どんなのを作ってるのか知らんからなんとも言えないとこではあるが、
1コントローラーに30アクションは多いかもね。
そんなにアクションが必要になるのを作った事が無いから、イメージわかないな。
むしろ何を作ろうとすればその数のアクションが必要になるのか、ちょっと興味があるな。
とりあえず単数形にしようと思ったことが無いからよく分からん。
複数形で別にいいじゃん。何か問題でもあるの?
それで機能しないわけでもあるまいし、意味不明なURLになるわけでもないし。
FormヘルパーでModel.Fieldとするのは一般的ではないのですか? 購入した初心者用の本の中では多用されてました。 単数系、複数形については users/register(仮登録。ハッシュURL付きメール送信まで) users/regcheck(仮登録後、ハッシュURLをクリックで本登録への動作) users/list(メンバーリスト閲覧) となるよりは register regcheck list となったほうが見た目もスッキリになるからです
>>145 一般的かと聞かれると、まぁなんとも言えないところはあるね。
俺自身、CakePHPの省略に悩まされる事もあったし。まぁ、好みにもよると思うよ。
例えば、UsersController で規約どおり UserModel がusesされてる場合。
/users/add.ctpにFormHelper->create()したら、
規約(これも規約って呼んで良いのかしらんが)によってcreate('User')と同じになる。
規約によってcreate()でもcreate('User')でも、
その時点で$this->Form->input('field')はinput('User.field')と同じ。
そこにアソシエーションで紐付いたUser以外のモデルのを書く場合は、input('Comment.field')と書かないならない。
これが前提として、省略はあくまで省略なので、逐一Model.fieldと書いてももちろん良い。
トラブルは避けやすいかもね。規約による楽さを捨ててるけど。
ただ、省略が出来る以上、ネット上の情報では省略されてることもあり、
規約に沿わない作り方をしてcreate()てかいて/register/addじゃなく/users/addに遷移して困るのは、
それはそれとしてって事かな。
CakePHPのctpを使いたくないです テンプレートと入れ替える方法どこかに載ってないでしょうか
>>148 「cakephp smarty」とかでググれば幸せになれるよ
Smartyなんて久しぶりに聞いたな
<?php e($test)?> こうするのも {$test} こうするのも一緒なんだけど、 後者の方がデザイナーとかには分かりやすいんじゃない?
HTMLが分かるほうのデザイナーなら、 囲い文字がどっちでも一緒だと思うけどね。 まぁ確かに<?php echoはちょっとめんどくさいけど。 でもSmartyはオワコン感が強いな俺の中で。
えっwww Smarty使わないって仕事でCakePHPを使ってない人ですよね?www
?
何年も繰り返し議論し尽くされてきたが、 PHP自体が所謂テンプレート言語の類なのに、 その上にテンプレートエンジン構築してどうする
デザイナーがsmartyを使いたいと言ったら使わざるを得ない状況もある というのも繰り返し言われてきた 俺もテンプレートエンジン不要派だけど、必要だという人がいるのなら使うのもしょうがないんじゃないかなー
PHPのコード見るだけで逃げ出すデザイナもいるからな あとデザイナにPHPのコード壊されたりもしたから、基本いじらせたくないな。
そんなデザイナーは廃業してもらうしか・・・ 今日日サーバーサイドに何らかのプログラムが絡む案件なんて珍しくないし、 phpに理解が無くても、HTML構造の特定のまとまりを崩さなければ、 phpコードを崩す事なんてそうそうないわけで。 それを崩しちゃう人って、 もうHTMLレベルで平気で閉じの無いタグを量産する可能性があるって事だろ。 webデザイナーとしてそれってどうなの?
wordpressやMTのテンプレートなんかを作れる程度の知識はあっても cakeの場合はcakeの動きを知らなきゃviewを作るのは難しいと思うよ。
下記をもっとスマートにコーディングするとしたら、どんな風になるのでしょうか? function verify($urlparam = null) { $data = $this->Regurl->findAllByRandomUrl($urlparam); if (!$data) { $this->flash('Invalid URL!!','index'); }else{ if ($data[0]['User']['activated'] == 0) { //print_r($this->data); $this->User->id = $data[0]['Regurl']['user_id']; $this->User->saveField('activated', 1); $this->flash('Now activated!!','index'); }elseif($data[0]['User']['activated'] == 1){ $this->flash('Already activated!!','index'); } } } コントローラUserから、外部モデルRegurlの中のrandom_urlフィールドと照合して、 一致するものがあればアソシエーション先のUserテーブルのactivatedフィールド(フラグ)を 1へ書きかえる処理です。 UserモデルではRegurlのuser_idに対しhasOneで、RegurlモデルではUserのidに対してbelongsToで アソシエーションを設定してあります。
>>160 まあこの程度ならどっちでもいいって言えばどっちでもいいけど、
randomurlのチェックやらsaveFieldなんかの処理は
モデルに書くとすっきりすると思うのねん。
コントローラーは
if($this->User->checkRandomUrl()){
$this->User->activate();
$this->Session->setFlash('どったらこったら', true));
}else{
....
}
こんな感じで何やってるかわかりやすくなるっしょ。
ビューの中で表示の分岐処理ってやらないほうがいいよね?
>>162 ifメンバーだったらここになになにを表示とか普通にやってるけどダメなの?
>>161 ありがとうございます。
コントローラ内でするとしたら
どういう書き方がスマートになりますでしょうか?
>>164 コントローラーに書くこと自体がスマートじゃない
Ktai Libraryで、振り分けをしたいんですが 1.3で、bootstrap.php内に App::import('Vendor', 'ecw/Lib3gkCarrier'); $carrier = Lib3gkCarrier::get_instance(); if($carrier->is_ktai()) { App::build(array( 'views' => array(ROOT . DS . APP_DIR . DS . 'views' . DS . 'm' . DS) )); } って記載したのですが、振り分け出来ないです。 他にすることってあるんですか?
>>165 モデルにコーディングするしたら、どのように書けばスマートかを、コントローラへの記述とのセットで見せていただければ幸いです。
初心者ながらに試行錯誤して最終的に出来たの結果が、あのコードでした。
経験豊富の方のコーディングの仕方を見てみたいです。
>>167 経験豊富じゃないけど、
ロジックはモデルに書けるならモデルに書くべきってだけなんだよね。
そのままモデルに持っていけば良いと思うんだ。
以下つっこみどころ豊富なコード。動かして無いから間違いはたぶんある。
UserModel extends AppModel{
function activate($url){
$data = $this->Regurl->findByRandomUrl($url);
if(empty($data))
return false;
if($data['User']['activated'])
return 'already';
$this->id = $data['User']['id'];
$this->saveField('activated', 1);
return 'activated';
}
}
SomeController extends AppController{
function index(){
if(!$result = $this->User->activate($this->data['url'])) {
$this->Session->setFlash('Invalid URL!!','index');
return;
if($result === 'activated'){
$this->Session->setFlash('Now activated!!','index');
return;
}
if($result === 'already'){
$this->Session->setFlash('Already activated!!','index');
}
}
}
シンタックスなど各種色々エラーが出たので素人ながら手直しさせていただきました。下記で大丈夫ですか?もっとスマートなコードになればいいのいですが・・・ ---MODEL------------------------------------------------------- Class RegurlModel extends AppModel{ var $name = 'Regurl'; function activate($url){ $data = $this->Regurl->findByRandomUrl($url); if(empty($data)){ return false; } if($data['User']['activated']==1){ return 'already'; }else { $this->id = $data['User']['id']; $this->saveField('activated', 1); return 'activated'; } } } ---CONTROLLER------------------------------------------------ Class UsersController extends AppController{ function index($this->data['url'] == null){ if(!$result = $this->User->activate($this->data['url'])) { $this->Session->setFlash('Invalid URL!!','index'); } elseif($result === 'activated'){ $this->Session->setFlash('Now activated!!','index'); } else($result === 'already'){ $this->Session->setFlash('Already activated!!','index'); } $this->Session->setFlash('Invalid URL!!','index'); }
function index($this->data['url'] == null){ これが気になったんだけど、何でこんな事してるの?
パラメーター部分が未入力だとエラーになるからです
$this->dataってことはPOSTで来てるの? 未入力がどうこう言う場合はValidationかけましょうや。
>>170 ああ、モデルに移したやつには余計だったね。
このコードが何のコードか、いまいちよく分かってなかったから、
そのまま書いちゃったよ
>>173 あれ?と思ったら
>>168 ではちゃんと消してるじゃないか。
>>169 コントローラーのアクションの引数を使って、パラメーターを受け取る方法もあるけど、
あんまり使わないんじゃないかな。
function index($this->data['url'] == null){
というか、これは動くの?メソッドの引数に$thisが入ってるなんて初めてみるんだけど。
なんかめんどくさくなってきたから、もうコントローラに書いたら良いんじゃないか?
何の実装かがわからないと、スマートになんてかけない気がしてきた。
beforeValidate()やbefore/afterSave()とか使ったほうがスマートになりそうな雰囲気あるけど、
詳細わからんとねぇ。
とりあえず引数に書くよりif(!empty($this->data['url']))しといたほうが良いんじゃないか。
わからない場合は、少々複雑でも単純に書けば良いんだよ。 function index(){ $url = isset($this->data['url']) ? $this->data['url'] : null; にすればいいじゃないか。
176 :
nobodyさん :2011/02/25(金) 15:45:11.29 ID:4/qlOsDP
CakePHPでコミュニケーションアプリ作っていよいよAmazonかNECのクラウドにのせてテスト運用だけになったんだけど本日クライアントがGAEなら500万PVまで無料らしいから最初はそうしたいって言いやがった。。。
177 :
nobodyさん :2011/02/25(金) 16:24:48.62 ID:4/qlOsDP
JavaVM上にPHP動作環境作ってそのままCakePHP動かせるのかはたまたPythonに変換しなきゃならんのか...頭禿げそう
ハゲは甘え
>>176 そんなの、予算がなければNoだろ。
GAEは最初はもなにも、かなり依存するつもりじゃないとつかえねぇよ。
使ったら最後、追加予算無ければAmazon EC2への移行も出来ない。
鯖台すら出せない奴にアプリ作るなよ・・・
変更頻度の少ない変数をConfigure::writeで書くなよ。 それ定数にしろよwwwって場合が多いよ
182 :
nobodyさん :2011/02/26(土) 17:15:32.84 ID:QnS5kZ07
Lithium試したことないんだけど、 Cakeと比べてどうよ?
複数DBのトランザクションどうしてる? model の__cunstruct で ClassRegistry に登録されてるから その情報を元に関数で一気にbeginとcommitをしてるんだけど、、いいのかな?
最初にbeginしてあとでcommitするという、普通のやり方で良いだろ
CakePHPのO/Rマッピングって全然オブジェクトにマッピングしてねーじゃん。 嘘ついてんなよw
確かにモデルはエンティティオブジェクトじゃないな
HABTMを使う場合って、どんなケースがある?具体的な例を教えてください!
188 :
nobodyさん :2011/02/27(日) 15:12:11.70 ID:n/cFKC+5
使うケースを無理して探して使わなくても良いと思うが。 ユーザーが投稿した何かにつけるタグとか、 ユーザーがグループに所属するとか、 そういうのだろ。
>>190 ユーザーがグループに所属するは
分かりやすい
ユーザーテーブルから
中間テーブルをまたいで
向こうの所属しているグループのレコードを絞り込んでグループ名一覧とかを表示するとき
とかに使うってこと?
>>191 実は単に1ユーザーが所属できるのが1グループだったら、HABTMじゃなくても良い。
1ユーザーが複数のグループに所属できるようにする場合、HABTMになる。
絞込みをしたいからHABTMというのはちょっと変で、hasManyだって絞込みする。
HABTMはhasAndBelongsToManyと書くとおり、多対多の関係を作るためにある。
確か、第4正規形だったかな?
>>192 例えば下記の3つのテーブルがあったとして
users
user_groups
groups
usersのコントローラで特定のユーザーが
所属している全てのグループを表示する
時とかにHABTMは使うんじゃないの?
>>193 その構成を扱うなら基本HABTMだろ。
多対多だからな。
まぁ細かい事を言えば、そのテーブル構成でも複雑な事をしようとすると、
HABTMじゃ力不足な場面はあるが。
一緒にサイトを立ち上げたい!協力して一緒に作り上げようと言って インターフェースやデザインの部分だけにしか携わらないパートナーがいる。 (コーディング関係一切しない) そのパートナーとの取り分は 何対何くらいが妥当? こっちはアルゴリズムから詳細設計まで全て受け持ってるんだが
5:5だろ。デザイン舐めすぎ。
だってデザインのほうが気楽じゃん 連動するところとか論理的思考とか 必要ないしw
>>195 さっきのテーブル構成で行くと、user_groupsテーブルにはこの3つのカラムしか、
実質作る事ができない。
id,
user_id
group_id
createdとかmodifiedを作っても、関係テーブルに限り
日時は書き込まれないし、書き込んだとしても消える事になる。
例えば、ユーザーAが既にaとb2つのグループに所属しているとして
3つ目のcに所属するための処理をすると、
一旦ユーザーAの関係テーブル上からユーザーAがaとbに所属というデータを削除し、
改めてユーザーAがaとbとcに所属というデータを書き込む。
という動きをする。
なので複雑な事は例えば、関係テーブルに何か他のデータを合わせて置く。などだな
なんだか難しいんだなw
>>196 設計からプログラミング、デザインとhtmlコーディングを全部やることがあるけど、
気楽さでいえば、俺はデザインよりプログラミングの方が楽だな。
もちろん工数見積はプログラミング>デザインだけど。
ただ、その時のデザインは、無難に整って見れればおkってやつだけどね。
何つくろうってのかしらんけど、
web系って基本はDBに書いて取って調節して出力だし、
あんまアルゴリズムとかいらなくないか?
そんなむずかしい事をするわけでも無い気がする。
やることが全然違うし、単純に比較できるものじゃないと思うけどね。
>>198 「綺麗なデザインは?」「使いやすいデザインは?」「格好いいデザインは?」
これらに答えを出せますか?
しかし、「会員登録する機能を作る」「メールを送信する機能を作る」
これらに答えは出せますよね。
果たしてどちらが”気軽”なんでしょうかね。
196「顔より中身が重要です!(キリッ」
>>202 お前バカだな
コーディング部分を担当だと
最終的に機能条件を100%満たせる。
けれどデザインったら、世界レベルから
html最近覚えましたレベルでも一応完成させることが出来る。
君は後者のヘナチョコデザイナーにも
100%機能要求を満たせたプログラマーと同じ対価を与える訳?
errorというコントローラーを作ったらアクセスできないんだけど、 使えないの?
>>204 自分でもわかってるじゃん。デザインに答えがないって。
答えがないもの・判断が付かない物に対して比較するのがそもそもの間違い。
で、君みたいな凄腕プログラマーは当然パートナーにも
凄いデザイナーがいるわけだよね?ヘナチョコとなんてやらないよね。
だったら、凄いデザイナーさんの方がもっと貰うべきだよね。
>>206 料理の素材を育てる人と
料理を作る人
どちらが難しいかくらいかは君にも分かるよね?w
あ、そうそう君の質問に答えてなかったね。 >君は後者のヘナチョコデザイナーにも >100%機能要求を満たせたプログラマーと同じ対価を与える訳? 僕はヘナチョコデザイナーを雇わないからね。 僕より出来るデザイナーに僕より多くの金額を与えるよね。当然だろ?
>>207 良い素材でも美味しくないと誰も食べてくれないし、
いくら料理の腕があっても素材が悪いと美味しくないよね。
それぐらい僕も分かってるけど、君も当然分かるよね?w
>>209 君は分かった気分になってるだけだよねw
>>199 ん?俺はそこでいうuser_groupsにいろいろ情報持たせてるよ。
消すか消さないかは書き込む時に指定できるし。
デザインvsプログラムの構図になってる時点でダメだろ。 どっちがどっちにも踏み込めない物しか出来上がってこない。まさに日本のIT物作りw
ただこっちが渡されてイラッとくるHTMLとかデザインとかCSSとか 埋め込み型の変なJavaScript(当然全部グローバル空間)とかは多いなw その辺イケてるデザイナ・コーダに知り合いが少ないのが自分の問題だが 中途半端にそっちの方も審美眼というか基準を持ってしまうと、ストレス溜まる
俺らはPG寄りだろ?で、デザインが出来ないわけだ。 自分が出来ない事を他人が出来て、それに対する対価が半分。 これって普通の考えだと思うけど、どうして196はファビョってるの?
196が何対何が妥当と言ってないから、何ともいえん。 196が例えば5対5が妥当と考えるなら、5以上を要求してきたら断ればいい。 何を悩んでいるのやら。
>>213 指定っていうとどういう方法で?
CakePHPのアソシエーションとしてのHABTMを、
UserモデルとGroupモデルにちゃんと設定した上で、
save()すると消えると思うけど。
まぁ普通に仕事で考えたら、 案件受注してデザインを外注に出す時、 どう考えても半分なんて出さないけどな。 実際、デザインにそんだけの仕事量は無いし。
お互いが逆を担当すれば苦労が分かち合えていいんじゃねW
>>220 プログラマーにデザインは出来るだろうが
逆は絶対に無理だろうな
ってことは5:5じゃないな
>>221 え?デザイナーがプログラム出来る場合の方が多いだろ?特にPHPは。
そんな夢みたいなデザイナーがいたら紹介して欲しいわ
>>221 >>224 プログラマならデザインが出来るとか、その逆だとかじゃないと思う。
プログラマは基本的にデザインは出来ないものだし、
デザイナはプログラムは書けないものだろ。
Wordpressのテンプレート関数をちょっといじってphp書けますなんてのは、
プログラミングのうちに入らないんだ。
でも、プログラマがちょっと頑張ったデザインだって、
デザイナから見れば及第点以下だと思うぞ。
両方出来る人も少しはいるけど、それはプログラマでありデザイナなんだよ。
お客さん「うーん・・・こっち(PGデザ)がいいかな」
でっていう
プログラマならソースのようにコピ・・・
デザインってオナニーでしょ
いい加減スレチ
>>226 デザイナーにレイアウトや配色教えている俺は何なんだ・・・
どっちも出来る奴って珍しくないと思うけどな。
逆に出来ないとSOHOや個人事業として成り立たないでしょ。
>>232 > デザイナーにレイアウトや配色教えている俺は何なんだ・・・
ヒント:最後の行
プログラマやデザイナがみんなSOHOや個人事業でやってるわけじゃないと思うぞ。
俺の観測範囲で言えば、
デザインが出来ないフリーランスのプログラマや、
その逆のデザイナが多いな。
俺はデザイナからプログラミングやコーディングの仕事をもらい、
逆にデザイナーにデザインを依頼してる。
同じようなフリーランスのプログラマも、
やっぱり一緒になってやってるデザイナーとかいるよ。
>>233 でもそうなると収入減るよな?
客はデザインでいくら、プログラムでいくらで、計算してないだろうし。
>>234 収入が減るって考え方がよくわからんが、
外注費がかかるのは当たり前だろう
最近CakePHP勉強してるんだけどなかなかいいね。 色々と誤解があってこのスレでも散々煽り倒してきたりもしたけど これからは使わせていただきます。
>>235 1人で出来る奴なら、デザイン費+プログラム費込みで見積出せるが、
デザイナー、プログラマーと分かれてるなら、それぞれが希望する金額になって、
1人でやっている人と比べて見積が高くならないか?ってこと。
会社の場合も外注に出すと高くなるだろ?
でも、当然客は「2人分の費用」として考えていないわけで、
高くなる分、損だと感じると思うんだが。
>>235 その金に見合った価値があれば客も納得だろ?
受注側が気にすることで無い。
>>237 まぁそういう面はあるかもしれんけど、俺はデザインは出来ないわけでな。
仮に頑張ってやったとしても、
時間もかかるし頼んじゃったほうが早いし良いのが出来るんだよね。
無理してデザインやるよりも、CakePHPが得意とする中規模のアプリで、
作れる幅を広げたり、スピード上げたりしたほうが利益になると思ってる。
まぁhtmlだけ頼まれた時なんかは、
もったいないなぁとは思ってるけどね。
客側のデザイナーがコーディングまで出来れば、
もっとコスト圧縮できたろうにね。
>>239 なぜか外注のデザって結構な金とらね?
別にシステム開発の方が技術は上だとは言わないが、
少しの修正(色やサイズの違い)で、修正費取ろうとする奴がいるぞ。
俺の経験では1人や2人じゃなく、ほぼ全てのデザイナーに共通した。
(´・ω・`)
>>240 俺はそんな取られたりはしてないと思ってるけど。
案件が終わってからのは流石に費用かかるけど、
検収前でちょっとした修正はかからないだろう。
小さい修正なら、場合によっては自分でやっちゃうし。
大きな修正の場合は・・・って、大きな修正が出たことがほとんどないな。
デザイナーとやる際の悩みとしては、
htmlコーディングが出来る人でもCakePHPのビューファイルに抵抗感があることかな。
phpタグくらいは別に良いんだけどelementやヘルパーがなぁ。
説明すると向こうが自信なさ下だから、
こっちがそこ頼むのに抵抗感を感じてしまう。
>>242 小さい修正でも自分でやっちゃう事が、コスト負担になってるからなぁ。
あと、デザイナーにビューファイル触らせるのは絶対駄目だと思う。
htmlファイル貰ってそれからPGがctpのテンプレに移していく形が一番だよ。
Dreamweaverのデザインビューじゃないとわからないって人多いし。
ベタで組み上げてもらうやり方が一番安心だね
244人のバカゴミがいるスレですかここは^^
いえ。245人です。
247 :
nobodyさん :2011/03/01(火) 22:21:38.57 ID:MzfiBR71
2.0-devがリリースされているみたいですが、 メジャーバージョンアップともあってやっぱり1.3とだいぶ変わりますか? 今開発中のものがあって、1.3で作っているのですが まだ初期段階なので、2.0に変えることも考えています。 それほど変わらないようであればこのまま1.3で進めようと思っているのですが、、、
Web::Scraperに勝てないごみくずPHP(笑) ばかでもつかえるw PHPがたくさん使われてるとかいっても、Perlユーザーの方が頭いい むしろざまあみろ(‐^▽^‐) お前らの負けだよw完全に私の勝ち 二度と話かけんな カス野郎 じゃあなああ〜
遅延ローディングと例外で やっとマトモなかんじになってきたな。 あとはBakaryが整理されてCPAN並になれば。。
てかそろそろphpは衰退期だと思うけどな。 Perlの様に終わっていく言語だと思う。 緩やかに終わっていくから、その間に稼ぎつつ、 別言語を覚えておいたほうが良いと思うよ。
今度の開発はCakePHPで!と社長の一声でデスマ。
Rubyの方が衰退してんだろ。 PHPはやっぱりWebでの使い勝手の良さがあってますます流行る。 てゆーか今LAMP技術者引っ張りだこじゃん。
その次の言語が何になるかだよ。 Perl CGI時代は一択だったし、サンプルも多かったから爆発 (標準入力と標準出力さえ使えればホントはなんでもいいんだけど) PHP HTMLに手軽な機能を追加するテンプレート言語として SSIなんかとともに勃興、その手軽さから爆発。それから高機能化 の次は、何だ? RubyもPythonもBetter Perlとしての機能と文法の良さは持っているかもしれんが、 Next Perl の地位は築けてないじゃん かといって関数型言語がいきなり爆発するとか、もう何もかもJavaでいこうよとか、 サーバサイドJavaScriptが流行りすぎて大変なことになっていますとか、 そういう流れになるとは予想しにくいわけで・・・
何で作るかじゃなくて、”何を”作るかだ(キリッ
>>254 俺はRubyが来ると予想してる。
現状がまだ盛り上がってないのは、phpが盛り上がってる時代だからね。
もう地位を築いてたら、次が何かという予想じゃなくって、事実になっちゃう。
Pythonは個人的には頑張ってほしいけど、現状劣勢だからなぁ。
GAE/pが出た時が最高潮だったんじゃないかと。
でも俺、Ruby嫌いなんだよなぁ・・・
>>252 CakePHPは慣れるまではむしろ時間がかかるフレームワークだよ。
ソースコード読まないと分からない事が多いからね。
小さめの案件とか、社内開発とかで、
まずはチームの成熟度を上げてから、
メインに使うべきもの。
まぁCakePHPに限る話じゃないと思うけど、
特にCakePHPはそういう面が強いと思う。
>>257 レスありがとう
自分の予想は、Rubyというか、RoRがマジョリティになるかどうかは、
mod_passengerの成熟度次第・・・だと思う。
結局多くの素人や初心者がホイホイとレンサバで動かせて、それなりにパフォーマンスも出て、
かつ「Apacheで走る」かどうかはデカいと思うよ。
もちろん自鯖でとんがったことやったりするなら、lighttpdでもnginxでもfastCGIで何でも来いなんだけど、
Webサーバのこと考えたくない人でもPHPっていじれるじゃん・・・・
CakePHPが初心者ホイホイな状態なのも、結局、実行環境が手軽に手に入るってのも大きいと思う。
良くも悪くもね。
260 :
nobodyさん :2011/03/02(水) 04:40:27.67 ID:fRmytaac
javaよりPHPが人気あるけど給料はどうなん? PHP安くね?
JAVAより安いよ。
JAVAの方が難しいイメージあるけど実際どうなの?
JAVAの方がとっつきにくいよ。 とりあえず書けばなんか出るPHPと比べて、 反応が返ってくるまでが長いからね。 ある程度覚えちゃえば、言語なんてどれも一緒。 むしろ型にうるさいJAVAの方が、IDEの力を借りて簡単に書ける。 と言いたいところだけど、 業務レベルになるまでに覚えないといけない事が多すぎて、 新人を育てるのが大変って話を聞いたことがあるな。
みんなアプリケーションフォルダはどこに配置してる? 俺はcakeのコアフォルダと同じディレクトリに置いてたんだけど、bakeする時の文を見るとデフォがapp/myappっぽいので、コアフォルダと同じディレクトリにappフォルダを作って、その中に各アプリケーションのフォルダを作ったほうがいいのかな?
開発環境 /path/to/cakephp /path/to/myapp //公開ディレクトリ /path/to/myapp/webroot とある稼働環境 /path/to/cakephp /path/to/myapp /path/to/webroot //公開ディレクトリ こんな感じ
Linuxのいわゆるユーザーのホームの中にappの中身をぶちまけて、webrootをpublic_htmlにリネーム。 って感じでやってる。 cakeのコア自体は/usr/local/lib/php/の中とかそんな所
/cakephp /app /cake /vendors /webroot 俺はこんな感じ。
CakePHPの参考書でおすすめ教えてください
2冊ほど持ってるけど、どっちもオススメはしないなぁ。 それなりに役には立ってるけど、不満点もそれなりにあるからなぁ。
俺も2冊持ってるけど、どっちも同じ作者だw(CakePHP辞典の人)
CakePHP1.2ガイドブック
CakePHP1.3.7を使ってるんだけど cake/libs/validaton.phpのminLength, maxLengthのメンバ関数でmb_strlen使ってるんだけど これって日本語でも対応してますってこと?
1.2系使ってたときはmodelに function maxLengthJP($wordvalue, $length) { $value = array_shift($wordvalue); return (mb_strlen($value, mb_detect_encoding($value)) <= $length); } とか書いてたんだけど そういうのやらなくて良くなったってことかな?
276 :
nobodyさん :2011/03/03(木) 17:57:07.62 ID:P58hQK5O
セッションコンポーネントにて... セッションがタイムアウトしたのと、 ログアウト時に明示的にdestroyしたのって区別つかないのかな? expireが取得できるメソッドでもあればいいんだけども
277 :
nobodyさん :2011/03/04(金) 02:57:20.01 ID:8qRY678r
>>243 大幅なデザイン変更あったときは
デザイナがhtmlファイル作って、PGがテンプレに移して・・・
って作業をやり直しになるの?
あくまでデザインの変更なんだからPGは一切作業無しで・・・
という風にできる方法はないのかな?
>>277 お互いにきっちり話し合ってデザイナー向けにマニュアルでも作るしかないんじゃないすかね。
でも実際大変じゃないの?
例えば入力フォームのページ1個作るにしたって
デザイナーにform helperの使い方を調べてもらって・・・なんてお互いに不安にしかならないもんなw
smartyはそう言うのを解決してくれるって姉さまが言ってた
頑張ってctpをSmartyに置き換えてもヘルパーは使う事になるから無意味
Smartyのヘルパー使えよ
CakeはFormHelperとHtmlHelperは必須といって良いレベルだからな。 特にFormHelper。 Smartyのヘルパーがどういうものか知らないけど、 置き換えられるものじゃぁないと思うよ。 FormHelperを使わないことで発生する問題や制約を飲み込めるなら、 使ったら良いんじゃないかな。 Smartyの囲い文字もctpのphpタグも、変わらないと思うけどね。
データベースに保存した画像をビューで出力したいです。
以下のようにしたけど、表示できませんでした。
※コントローラ
function index(){
$images = $this->Image->find('all');
$this->set('images',$images);
}
※ビュー
foreach ($images as $image) {
$photo = base64_encode($image['Image']['contents']);
echo "<img src='data:image/jpg;base64,${photo}' />";
}
ちなみに、コントローラ側からechoするとちゃんと表示されます。
参考にした記事
http://matya.dyndns.info/diary/?p=283
俺としてはHtmlHelperはいらないと思うが、 FormHelperは必須だな。特にCMS系システム開発には。 でも、FormHelperを開発するのってそれほど難しくないよね。 みんなもCake使う前は、自作のFormHelper作ってたんじゃないか? だから、どうしてもSmartyをビューで使いたい場合は、 Smarty用のFormHelperを作っても良いと思う。Cakeの書式に合わせて。
285 :
nobodyさん :2011/03/04(金) 21:34:56.65 ID:6a/ByBcS
Lithium 0.9.9でユニットテストをしようとしたんですが /test/にアクセスしても、自分が作ったテストクラスが表示されません 解決方法知っておられたら教えてください。
スレ間違ってますよ
FormHelperなんて使ったことないな まともに動かない
まともにってどういう意味で? フォーム処理のやりとりに関しては、普通に出来てるけど。
CakePHP使う前はFormHelper的なものは使ってなかったなぁ。 だから最初はフォーム書くだけなのにphpなのめんどくさいって思ってた。 まぁ正直今でもちょっと思ってる。 でもちゃんと使ってるよ。
モデルから読み書きするときだけえ使えばええんちゃうん
>>289 inputならわかるけど、selectやcheckbox(などの選択肢)はどうしてたの?
PHP使わないと逆に難しいと思うんだが。
ねえねえ何で君たちはこんな時代遅れのフレームワークを使い続けるの? もっと良いフレームワークあるでしょ
>>292 お前の言うもっと良いフレームワークを教えてくれ。
CakePHPの2.0.0っていつになったら正式リリースされるのかね?
295 :
nobodyさん :2011/03/06(日) 01:55:17.88 ID:5hZ883U1
夏以降って聞いたよ
いつも
>>292-293 この流れで止まるなw
煽りに来たんだろうが、あっさり論破されちゃ世話無いぜ
>>296 いやきっと
>>292 みたいな人はcakePHPに使われるような仕事して
ストレス溜まってるんだろうなーって生暖かい目で見てるよw
よく小学校の頃、学校なんてクソ。無くなれ〜とか思ってたじゃん。それと同じだろ。
CakePHPはお世辞にもモダンなフレームワークとは言えないけど、 良いフレームワークだよ。
CodeIgniterでいいやん
CodeIgniterはもっと古臭いフレームワークだからなぁ。 まったく興味がわかない。
MVACアーキテクチャができるFWないかな
M = モデル V = ビュー A = アクション? C = コントローラー
もうMCだけでいいよ
304 :
nobodyさん :2011/03/06(日) 16:00:47.25 ID:PLgQNz0S
デザインとシステムの部分を切り分けるのに最も都合良いFWってなんだろう? ちょっとしたデザイン変更でいちいちシステム屋が出ていくのもねぇ
意外とSmartyなんじゃないか?
Smartyはねーだろ…
なぁ、そんなことより CakePHPの2.0.0はいつくらいに正式リリースされるのよ?
>>304 デザインとシステムの両方がhtml部分に手を入れる必要があるから、
切り分けは出来ないだろう。
無理を承知で言えば、cssはデザイナーの領域だから、
なるべくcssで頑張ってもらう。
システムを使う処理にはどうしてもプログラム書かないと駄目だもんな。 で、PHPはDreamweaverで反映されるけど、プレビューはサーバがないと駄目。 だから、完全に分離できないとデザイナーが手間かかるし、 デザインを表示させる為に下手にソースから得られたら、プログラマが困る。
普通は一番最初にHTMLの紙芝居をお客さんに見せて Goが出たらそのHTMLをテンプレート化するだろ。 簡単な修正の場合はCSS含めてプログラマがやるし 大幅な修正や画面追加はデザイナに任せればええやん。
311 :
nobodyさん :2011/03/07(月) 16:31:11.34 ID:2kfcEYNx
ファイルや処理を細分化するのは、1ファイルのデータ量を減らして 同じコードを書かなくても良いという目理とがあるけど、 ファイル数が増えてややこしくならないか?という懸念もある。
規模によるんだろうけどな。 俺が扱ってる規模なら不要だな。 JAVAでも使っとけって思う。
Yiiのスレもよろしく
315 :
nobodyさん :2011/03/08(火) 21:31:52.80 ID:PsYppCp1
ビューやコントローラ、モデルなどで、金額*税率を返す関数を使いたいんですが、 どこで定義するのがベストでしょうか? ちなみに金額と税率はDB内にあり、別テーブルに入っています。
じゃあモデルでいいんじゃね
コンポーネントは?
318 :
nobodyさん :2011/03/08(火) 22:53:06.76 ID:PsYppCp1
>>316 どのモデルに書くのが良いんでしょう?
>>317 金額*税率が必要な部分で毎回コンポーネント読み込むんでしょうか?
319 :
nobodyさん :2011/03/08(火) 23:11:48.23 ID:PsYppCp1
小出しで申し訳ないんですが、 Array ( [Item] => Array ( [0] => Array ( [id] => 2 [name] => aaaa [price] => 1000 [created] => 2011-01-01 04:41:50 [modified] => 2011-01-01 04:41:50 ) [1] => Array ( [id] => 3 [name] => bbbb [price] => 1300 [created] => 2011-01-01 22:17:20 [modified] => 2011-01-01 22:17:20 ) : ) ) こんな感じで、商品DBには税抜価格が入っているんですが、 別テーブルに税率フィールドがあり、それを掛けた値を表示させたいのです。
>>319 俺ならモデルから税率データを取ってきてsetに入れて
ビューで計算して表示する。
#Controller $this->set('TaxConfig', $this->TaxConfig->find('first') ); #View 価格:<?php echo number_format( $data['Item']['price'] * $TaxConfig['num']); ?> こんな感じで。
322 :
nobodyさん :2011/03/08(火) 23:42:55.57 ID:PsYppCp1
jsヘルパーで質問です。 jQueryを使用して、下記のようにjsヘルパーでサブミットボタンを2個並べてます。 action「jstest」は、10秒待ってレスポンスを返すだけのメソッドです。 保存1、保存2と間をおかず連続してボタンを押した際、end2のalertが表示されるのが 保存1を押してから約20秒後となります。 期待してるのは約10秒後にend1、2のalertが連続表示されることなのですが、 なにかおかしい点はありますでしょうか? <?php e($js->submit('保存1',array( 'url'=>array('action'=>'jstest'), 'buffer'=>false, 'complete'=>'alert("end1");' ) )); ?> <?php e($js->submit('保存2',array( 'url'=>array('action'=>'jstest'), 'buffer'=>false, 'complete'=>'alert("end2");' ) )); ?>
コントローラーを太らせたくなくてロジックを全部コンポーネントで書いてたら コンポーネントが100個ぐらいになった
325 :
nobodyさん :2011/03/09(水) 17:15:23.38 ID:4pX38QJO
ビューやコントローラで共通で使える関数ってどこで定義したらいいですか?
>>325 本当にModelやComponentにも属さないなら app/vendors/ 以下だね。
Cake1.2です 何箇所か画像をアップロードする機能をもたせていて現状下のようになっています。 1.画像を保存する処理を書いたファイル 2.渡された変数を適切なフォーマットにして1.を呼び出すファイル 3.ユーザーが画像をアップロードする際に使うファイル 3.でフォームから画像を指定してsubmit 2.が受け取って色々いじった後1.にデータを投げて画像を保存 1.2.では文字を表示する必要は一切無いため画像を保存したら 3.にリダイレクトをかけたいのですがどのようにすればいいかわからず悩んでいます。 よろしくお願いします。
こちらこそよろしく!
よろしくよろしく!
夜露死苦
>>327 マジレスすると、何いってんのかよくわからん。
何だよファイルって。
コントローラー、ビュー、モデル、コンポーネント、ヘルパー、ビヘイビア、アクション
を使って説明を書き直してくれ。
すいませんがそれは教えられません
それでは、お引き取りください
>>334 そのようにします。ありがとうございました。
とりあえずテーブルをつくり、 scaffoldで値を入れてみようと思ったのですが、 外部キーをうまく認識してくれません。 テーブルは、次の二つを作成しました。 products id, created, updated, name, product_type_id product_types id, created, updated, name 両コントロールは、以下のように作成しました。 //class ProductsController extends AppController class ProductTypesController extends AppController { //public $name = 'Products'; public $name = 'ProductTypes'; public $scaffold; } product_types/addで任意のデータを追加した後 products/addでさらにデータ追加しようと思ったのですが、 product_type_idのセレクトボックスに選択できる値が入っておらず、 データを追加できませんでした。 products/add時にproduct_typesテーブルの内容を選択肢として表示するには どのようにすればよろしいのでしょうか。 よろしくお願いします。
ごめん、嘘。
アソシエーションの設定教えてくれ
>339 ありがとうございます。 モデル・ビューともに作成していませんでした。 scaffoldでは、必要ないみたいなことを読んだのですが、 違ったということでしょうか。 後で、アソシエーションを設定するモデルファイルを作成してみます。
ビューはいらないけどモデルはいるよ。アクションもいらない (最近scaffold使ってないから記憶薄いけど)
原因不明だけど、scaffoldでセレクトボックスにだけ値が入らないことはよくある。 気まぐれに入っていたりもする。 でもそのまま使うことはないからみんな放置してるんじゃないかな。
scaffoldって使ったことないなぁ。 使い道がよく分からん。
コントローラーやモデルって使った事無いなあ 使い方がよくわからん
scaffoldで日本語表示出来ればいいのに
俺はWebrootにhtml置いて使ってる コントローラとかモデルは小規模サイトだし必要ない
347 :
nobodyさん :2011/03/11(金) 23:09:11.08 ID:34T7XTKb
http://d.hatena.ne.jp/bennylee/20090402/1238665508 ↑この問題が自分の環境でも起こっているんですが、
解決法などありますか?
Cookieコンポーネントを使って配列を書きこむと、一番最後の配列以外がArrayとなってデータが消えてしまいます。
Array
(
[0] => Array
[1] => Array
[2] => Array
(
[id] => 1
[ab] => 2
[cd] => 1
[ef] => 3
)
)
↑このように、同じデータを追加しているはずなのですが、末尾のデータしか残っていません。
348 :
nobodyさん :2011/03/11(金) 23:11:03.03 ID:34T7XTKb
最近以下のように対応したんだが Cookie::readの最後で return $this->__values[$key][$names[1]]; //return Set::extract($this->__values[$key], $names[1]); いいのかな。。
350 :
nobodyさん :2011/03/13(日) 23:51:06.58 ID:JC24c2uV
コントローラでの$this->Model->validates()の使い方がわからん。 事前に何をsetしようがcreateしようが必ずtrueが帰ってくる。2日悩んだがお手上げ状態 たしけて
>>350 setしたか?Modelにsetしないと値は渡らないぞ
すまん、setしたって書いてるな・・。俺は↓のようにやってるよ。 $this->Model->set($this->data); if ($this->Model->validates()) { $this->Model->save($this->data); }
353 :
nobodyさん :2011/03/14(月) 10:38:15.65 ID:3Afc8bli
>>352 そのとおりやってるんだけど、どんな値を渡してもtrueが帰ってくる。
>>353 じゃ、文字コード疑ってみろ。モデルの。
たまにそこがShift_JISになっていて、エラーにならない時がある。
355 :
nobodyさん :2011/03/15(火) 11:45:26.02 ID:pIi0VVUh
>>354 UTF-8だったわ。
<?php
class Stock extends AppModel {
var $belongsTo = array('Item', 'Size', 'Color');
var $validate = array(
'name' => array(
'rule' => array('notEmpty'),
),
'item_id' => array(
'rule' => array('notEmpty'),
),
'size_id' => array(
'rule' => array('notEmpty'),
),
'color_id' => array(
'rule' => array('notEmpty'),
),
'quantity' => array(
'rule' => array('numeric'),
'message' => '半角数字で入力してください'
),
);
}
?>
なんだ?バリデーションのかき方間違ってるわけじゃないよな
ファイル壊れてんのかね?
ちょwwwお前バリデーションの書き方間違ってるじゃんw なんでnotEmptyを配列にしてるんだw 'name' => array( array( 'rule' => 'notEmpty' ) ) こうだろ。もう少し勉強しろよ
あ、すまん。俺は1つのフィールドに複数ルール書くから↑してるけど、 'name' => array( 'rule' => 'notEmpty' ) これでも動くよ。(むしろこっちが一般的かも知れない)
書き方間違ってないなら、 もう本体のソースにdebug()入れて目デバッグするしかないんじゃないの? こんなところで聞くよりずっとはやいぜ。
359 :
nobodyさん :2011/03/15(火) 17:30:17.19 ID:pIi0VVUh
>>356 サンクス。
いろいろ試したが、
そのコードに、'required' => true,つけたらfalse帰ってきたわ。
'name' => array(
array(
'rule' => 'notEmpty'
)
)
↓
'name' => array(
array(
'rule' => 'notEmpty'
'required' => true,
)
)
お前、根本から間違ってるよ。 冗談抜きでcookbookの例見ながらやれよ
361 :
nobodyさん :2011/03/15(火) 21:33:40.21 ID:pIi0VVUh
>>360 いや、ブックもAPIも毎日見てるよ。
何が間違ってる教えてくれ
>>369 のやりかたで今のとこうまくいってるんだが
見てたら何で
>>355 なコード書いてんだよ。後出しで言い訳するなって。
363 :
nobodyさん :2011/03/16(水) 00:11:30.27 ID:H/WJFHht
そもそもルールで、「空はダメ」って指定してるのに requiredが必要な設計が悪いんだよ。
何故bakeしたものを書き直さないのか・・・ だからそういう凡ミスするんだよ。開発プロセスを見直せ
まぁrequiredだのallowEmptyだのnotEmptyだの、ややこしいといけばややこしい
CakePHPの売上を被災地に寄付しよう!
>>366 それは運営が決めることで外部から善意という名の圧力かけるような卑劣な方法は止めてくれ
368 :
nobodyさん :2011/03/16(水) 17:41:11.35 ID:OBkWdnDA
実際の開発でbakeって使ってますか?
369 :
nobodyさん :2011/03/16(水) 19:10:01.24 ID:aP3af6LX
cakephp 1.3.7 ダウンロードできないんだが・・・。 さばおち?
cake使って作ったサイトの利益の一部を寄付するわ cakeへのdonationはもうちょっと待ってくれw
371 :
nobodyさん :2011/03/17(木) 15:25:53.81 ID:V4uSlNhx
>>368 bakeって便利なの?なんかめんどくさくて全然使ってない
>>370 いくら儲けてるの?
CakeDCのsearch pluginでSQLエラーが出るなあと思っていたら、 $actsAsを$actAsって書いてた orz
374 :
370 :2011/03/17(木) 18:09:13.88 ID:???
小規模、普段は酒代に消える程度の額
小規模って、コントーローラー数でいうとどのくらい?
376 :
370 :2011/03/18(金) 00:21:26.72 ID:???
システム的な規模かよw いくつかサイトあるけど、どれもコントローラーは10個もないな 3〜8くらいか
そりゃかなり小規模だなw 俺が作ってるポータルサイトでも、30〜40はあるぞ。
じゃ僕は50個
じゃってなんだよじゃってw
controller30〜40個ってどんだけゴミクズプログラムだよw
コントローラーの多さを誇るとかwww
30〜40で多いとか・・・
管理画面とかアクセスが多くないページをCakeで作って それ以外を素のPHP(か独自クラスか)で作っている人いる?
>>384 なるほど。他のサイトでもそういうの見たんだよ。
だから割と普通なのかな?って思ってさ。
386 :
nobodyさん :2011/03/19(土) 16:07:57.11 ID:LrB5RKVB
ユーザ登録ページを作成しています。 validation後、問題がなかったらpasswordを指定の暗号化(authsome)してからinsertしたいのですが、どうすればいいでしょうか? 一般的な方法をご教示いただければと思います。
キャッシュやPHPアクセラレータの導入しても何ともなりそうにない場合の最終手段という感じがする そこまで多くのアクセスをさばくサイトを作ったことがないからわからんが
個人的な運用事例ですが、今のところ、1日100万PVだけど問題は起きてない。 というかそれ以上でもDB部分の設計次第、データ次第という感じがする。 別サイトでは月1億PVでもcakePHPが原因で ということはおきてないです。 結局それくらいのPVになったらWEB複数台にしたり、DB分けたりして対処できてます。
>>388 俺がパフォーマンス出来になるのは、Ajaxの処理なんだけど、
そう言う点での遅いとか重いとか言うのは感じない?
例えば、ボタン押す→Ajax通信で指定データを取得→
閲覧しているWebページに結果を返す
って処理が、体感的に数秒かかる。
>>388 その規模をCakeで運用しているって凄いな。SNSか何かか?
≫389
私の事例とは違うのでちょっとわからないです。
でも遅いのってだいたいDB周りですよ。
>>390 携帯向けサービスです。
ただ$this->Model->findとかは使ってないのでフルでcakePHPを使っているとは言えないです。
$this->Mode->queryでSQL文を書いて常に把握できるようにしてます。
>>391 うん?どういうこと?
find使わないでSQL文書いて、query実行してビューに出力しているの?
あ、ごめん書き方が悪かった。 findとかsaveとか使わないとなれば、Cake使う意味あるのかな? って疑問に感じたんでさ。
>>393 もともとcakePHPを使う理由が、コードを読みやすくする(開発者以外が手を加える可能性があるため)
ことだったのであるとは思います。
cakeでなければ駄目だったかと言われると他のでも良かったですが。
ただfind部分の処理は結構重そうだったので、クエリキャッシュとかしてないのであればボトルネックになるのかもしれません。
Model->queryってコントローラに書いてるの?
396 :
nobodyさん :2011/03/20(日) 22:14:15.49 ID:GCcZIJSQ
query()使うのとfind()使うのって変わらないんだが
そんなこと無いよ
SQL文に組み直すだけで、そこまで負荷がかかるとも思えないな
399 :
nobodyさん :2011/03/21(月) 00:43:56.18 ID:XkLv7npg
app/models/foo.phpと app/controllers/foos_controller.php 用意して、example.com/fooへアクセスして動いたのですが example.com/にアクセスして fooってテーブル使うようにするにはどのファイルをいじればいいのでしょうか? app/controllers/pages_controller.phpでしょうか
400 :
399 :2011/03/21(月) 02:09:09.74 ID:XkLv7npg
解決しました。すいません
mysql> select id,email,flag from users;
+----+------------------+------+
| id | email | flag |
+----+------------------+------+
| 1 |
[email protected] | 0 |
| 2 |
[email protected] | 1 |
+----+------------------+------+
ガタついてると思いますが上記のようなテーブルがあってflagは
0=仮会員
1=本会員
でメール認証で仮会員から本会員にとなります。
会員登録の際にemailにバリデートをかけたいのですが
DBを参照してフラグが0ならupdate、1ならisUniqueで弾くにはどうしたらよいのでしょうか?
cakephpのバージョンは1.3です
402 :
nobodyさん :2011/03/21(月) 22:43:32.95 ID:fIwUydDA
>>401 ユーザーがメールを送る
↓
メアドを見て、
変な書き込みになってしまった、すまん。 どこでバリデーションが必要になるのかわからんけど、メール認証後の登録の際のセッションIDでユーザー特定するのがセオリーなんじゃない? 本登録の際にemail情報は必要ないと思うが、どのタイミングでバリデーションするの?
説明が不足していてすいません。 バリデートをかけたいのは仮登録の際のemailフォームです 'email' => array( "rule1" => array( "rule" => 'isUnique_flag1', "message" => "このメールアドレスは既に本登録されています", ), "rule2" => array( "rule" => 'email', "message" => "メールアドレスを正しく入力してください", ), "rule3" => array( "rule" => 'notEmpty', "message" => "メールアドレスを入力してください", ), ), rule1のisUnique_flag1が欲しいのです さらにいえばflag0のemailの登録があった場合はupdateをかけたいと思っております 分かりづらくてすいません
>>404 仮登録は普通空メから始めないか?
フォームから始めると登録する方も運営者側も面倒なことになりそう
フォームでメアドを入力させるとなると、複数のフィールドを見なきゃいけないので、isUniqueをそのままは使えないし
この辺を参考にして複数フィールドのチェックしてみたら?
http://dxd8.com/archives/212/
>仮登録は普通空メから始めないか? それ、携帯サイトだけだろ。
完全にケータイサイト前提で考えてた
スマンコ
PCの場合は
>>405 でやるのがいいとおもう
EC CUBEでは用途によってテーブル名の接頭辞を分けているのですが、 Cakeのdatabase.phpで接頭辞を指定した時、 モデルによって別の接頭辞を参照させる事って出来るのでしょうか?
やったことはないが、 $model->tablePrefix で接頭辞は設定できるよ
ありがとうございます。それを使います。
コントローラー間でリダイレクトの際そのままformで受け取っていた値を受け渡したいと思ってます。 どのようにすればよいでしょうか?
リダイレクト前に値をセッションに入れたら?
cakePHPって糞だよな
糞しかないPHPフレームワークの中では、なかなか美味しくいただける糞だよ
もう少しファイル数が少なくて、動作が速ければ言うこと無いんだけどね。 CodeIgniter並とは言わないが
コンポーネントに書いたコードをやっぱりappコントローラーに書こうとか、 appコントローラーに書いたコードをやっぱりコンポーネントに書こうとか。。 と考え出すとリファクタリングの沼に入る。 小さいアプリならOK。大規模アプリならOK しかし中途半端な規模のアプリだと途端に境界性が曖昧になる。
海外サーバーを経由してネットする方法を詳細にしるした書籍もしくはサイトを教えてください 悪いことをするつもりはありませんがw wikileaksのハッカーに興味をもっております 彼らは、どうやってするのでしょうか?非常に興味があります。よろしくお願いします。すいません。マルチします。
ハハッ ワロス
未だにCakePHPしか使えない奴ってここにはいないよね?
CakePHPしか使えなくてもいいじゃない。
人間だもの
みつを
くだらないこときくけど、「user_diary」みたいな「メイン項目+サブ項目」 のテーブルの場合、ルーティングどうしてる? 「会員の日記に新規登録」みたいな要件の時、 普通に/user_diary/add みたいな形? それともルーティングして /user/diary/add みたいに分けるとか? ピュアPHPで言うとディレクトリ分けして /user/diary.php、/user/diary_add.php みたいなファイル名になると思うけど、Cakeの場合どうしたらいいか悩む。
いや普通に/diary/addだと思うが… なぜuserが必要になるのか
じゃ、管理者が日記書こうと思った場合は? あるいは、ぐるなびのようにお店が日記書く場合は? 前者はadmin_diaryで後者はshop_diaryにテーブル名がなると思うんだが。
/admin/diaryとshop/diaryだろzk
念の為聞くけどadminがコントローラーでdiaryがアクションだよね? それなら新規登録とか編集の場合はどうするの?
ggrks
adminについてはマニュアル嫁
いやいやいやwさすがにそんな項目ねーよw prefixの事でもないんだろ?
そもそも質問の主旨が「テーブル名をどう表示する?」なのに 全然答えが違うのは俺が糞質問したせいですかそうですか
cake関係ねえし
436 :
nobodyさん :2011/03/31(木) 10:17:31.74 ID:PPG+iO3g
>>426 ユーザ日記
/diaries/add
管理者日記
/admin/diaries/add
admin部分の文字列は自由に変更できます
それは分かるんだが、結局「ルーティングする」って事で良いんだよね?
ルーティングしないでどうしようと?
>>428 あえてテーブルを分ける必要があるとは思えない。
diaryテーブルを作ってUserに紐付ける。
userが管理者なのかショップなのか一般ユーザーなのかはGroupで分ける。でいいと思うんだけど。
そうすればACLでそれぞれの権限を付けるのも楽だし。
>>440 その方法もありなんだが、テーブルがごちゃまぜにならないか?
今回の例は「日記」だけど、これが「カテゴリ」だったらどうだ?
テーブルのカラム構成は一緒だろうけど、中身が違ってややこしいぞ。
それに、日記のようなデータ量が多くなる場合は
用途毎にテーブルを分けた方が良いと思うんだけどな
どうも
>>436-437 や
>>440 のいう設計が俺には具体的に理解できない
>>442 俺も
>>440 とおなじ設計をする。
ECサイトを設計するとして、
服と靴は別テーブルにしないだろ。
ショップが複数のECサイトだとしても、
商品テーブルはひとつだろ。
>>441 テーブルがごちゃまぜになっても、必ずuserならuserに紐付いてるわけだし、
データを適切に出し入れすればいいだけなので、
俺は何も困らないけど。
cakeから見て違うものとして扱いたければ、テーブルは同じでもモデルを複数作ればいいし。
質問者の意図が いまだによくわからない。
>>443-44 なるほどな。必要以上に正規化しすぎなのかもな。
>>445 俺は「日記」というコンテンツがあったら、
使用する人毎にテーブルを分けると思ってるんだよ。
だから、
>>426 みたいな質問をしたんだが、
そうなるとルーティングとか考慮しなければ行けないし、
app以下のファイル構成もどうしようかと悩んでたんだ。
まぁ、app以下の構成については同じテーブルを使うにしても悩むけど。
>>446 そうだね。
例えばユーザーの追加と削除する場合の事考えてみたらいいかもね。
君の設計だと、ユーザーを追加するたびにテーブルとプログラムを追加することになるし、
削除する場合もテーブルのドロップとプログラムの削除が発生する。
他の人の場合だと、ユーザーテーブルにユーザーを追加or削除で完了する。
>>447 ま、俺の場合は「会員」とか「店」とか固定ユーザは決まってるから
そんな頻繁にテーブル作成が発生するとは思えないんだけどね。
OSSのシステム見ると、割とテーブル分けているケースが多いんだけど、
それはOSSだからであって、実際は分けないのかな。
あ、 >俺は「日記」というコンテンツがあったら、 >使用する人毎にテーブルを分けると思ってるんだよ。 これは、Aさんというユーザが居たら、Aさん用のテーブルを追加するって 意味じゃないからなw誤解を与える書き方してすまん。 普通に、user_diaryは会員用の日記テーブルで、 shop_diaryは店用の日記テーブルって意味です。
伝達能力に欠けてるな
451 :
nobodyさん :2011/04/01(金) 02:01:02.57 ID:vplR+RLt
createdのカラムを追加したけど1つのテーブルだけ日時入んないぞ。。
453 :
nobodyさん :2011/04/01(金) 19:42:12.09 ID:OVR2Hl6V
コードの見通しを良くするために、Controllerからコードを追い出せってよくいわれていますが、 さすがにpaginate関連は移動できないですよね?
paginate関係ってソースが肥大化するか?しないと思うんだが。
しない。ちょっと書く内容が異なるだけ。
モデルが複合主キーのテーブルに対応してないのは 問題だと思うんだが。 リプレイス案件とか既存のシステムと同じDBを使うとかだと 逃げ道作ってくれないと困るんだよ・・・
複合キーなんていらなかったんや
最近のトレンドであるActiveRecordが複合キーを使う事を考慮してないからね。 ActiveRecordを実装するにはO/Rマッパーが必要で、 O/Rマッパーは複合キーと相性が悪いよね。 ActiveRecordにも得手不得手があるから、ActiveRecordが苦手なスキーマが必要ってなら、 ActiveRecordを前提に成り立ってるフレームワークであるCakePHPは、 そもそも道具選びが間違ってるんじゃないかな。 それは言いすぎだとしても、 CakePHPをはじめとしたフレームワークは、 ニーズの多いところをよりよくカバーするから、 ニーズの少ないところにサポートが無いのはしょうがないと思うよ。 各テーブルにidという主キーが必ずあるようなスキーマで、 大抵のものは作れるし、その規約に沿ったほうが楽ってのもあるね。 長々と書いたけど、 俺はそんなスキーマで作るようなのしか、今のところ作る予定が無いから、 複合キーなんていらなかったにゃって思ったんだ。 もちろん冗談交じりだぞ。
CakePHPを始める時に参考にした図書とかあります?
本はいらない。公式のCook Bookでサンプルを作ることをおすすめします。
Cookbookってお勧めできるほどには参考にならない気がする。 英語版はまだマシだけど、 日本語版は古い・間違いが多い・サンプルがシンプルすぎて実務で悩むとこは結局学習できない。 読む必要が無いってわけじゃないんだけど、Cookbookだけだとつらいと思うよ。 CakePHPによる実践Webアプリケーション開発って本を参考にしたけど、 これはもう古いからなぁ。1.2ベースだし。 でも一応、Cookbookのサンプルを作って基本的なことを理解してからなら、 この本はそこそこ役に立ったよ。 余談だけどACLが複雑すぎて使う気が起こらない。
昔は積極的に本を買ってたけど、最近は不作だから買ってないな… そういうユーザーが多いから、良い本が少ない→売り上げ少ない→次の本が出ない、の悪循環なんだろうか
464 :
nobodyさん :2011/04/04(月) 00:08:26.97 ID:6xfhCach
はじめはCook Bookでいいと思う。 CookBookには詳細な機能はあまり丁寧に載っていないので、いちいちネットで調べることが多くなってくる。 そうなったらリファレンス本を買って眺めながらいろいろつくってみるといい。 自分の場合はそれでかなり覚えたよ。 個人的には秀和システムのCakePHP辞典がおすすめ。 手持ちの初版には誤字が少しあるけど、暇な時に眺めるだけでおもしろい。
まぁ、Cakeに限らず、リファレンス本が一番便利だよな。 自分が何したいかで調べたらいいし、作者の作法を身につけなくても良い
一次情報だけで十分。 Cookbookで流れをつかんで、開発しだしたらAPI Class Indexを参照すればほぼ足りる。 そのうちタイミングとかインスタンス生成が気になってソースを見ることになるけど。
467 :
nobodyさん :2011/04/04(月) 04:07:47.83 ID:her01YtQ
お前らタイトルの設定はどうしてる? 俺はctpファイルの先頭に、 <?php $this->set('title_for_layout', '新規投稿'); ?> みたいにしてるけど 他にスマートな方法あるかな? コントローラのアクションの中に書くのはまずいよな。 タイトルはビューの情報だし
アクションじゃなんか問題あるの? てか、例えばユーザーのプロフィールページの場合、ユーザー名とか書きたいから、 モデルからユーザー名など貰って、アクションでセットする事になるんじゃ。
アクションでセットは良いんだけど、編集するのに、 controller見なきゃ行けないというのがな・・・ かといってビューで編集するのもなんか違う気がするし
>>467 設定ファイルの中に、
$config['title']['Users']['signup'] = '新規登録';
みたいに、コントローラー名、アクション名をキーにした設定を作る。
コントローラーから
$pagetitle = Configure::read('title'.'.'.$this->name.'.'.$this->action);
って感じで読み込んでタイトルにセットする。
ってやればタイトルは設定ファイルで管理できるよ。
でも、タイトルってビュー(デザイン)の部分じゃないか?
そう思うなら別に$title_for_layoutを使わなくてもいい
画面に出すテキストが全てビューにあるなら、 Cakeってかphpで作る必要ないっしょ。
>>472 そうだよな。
だけど、viewの使い回しが出来なくなるよな。
レイアウト使わずに、ヘッダをエレメントにすればいいんだけど、美しくはないね。 変数にタイトルをセットしてエレメント呼び出しの手順で。
>>467 それに加えて文字定数をdefineしてる。
define("TITLE01", "タイトル01")
>>476 それしたら前にめちゃくちゃこのスレで罵倒された
「決まったもん以外定数にするな!」ってw
cakePHPを利用したデータのやりとりを勉強してるんですが、 リクエストを送っても何も戻ってこないんですが modelフォルダの中に何も入れてないのがいけないのでしょうか? 教本にはcontrollerのファイルとcomponentのファイル、ctpファイル、と合計3つしかファイル作ってないんですが・・・
480 :
nobodyさん :2011/04/05(火) 02:28:06.37 ID:9HAh5AGu
CakePHPでUtilクラスを作る場合置く場所は何処になりますか? ちなみにUtilクラスとはDateUtilとかStringUtilとか 共通処理を集めたスタティックメソッドのクラスです。
>>480 うちはvendorsにcommon_function.phpを置いて、
app_controller.phpでrequired_once
484ですが、インストール画面を出すことには成功しました。 ただ、ググったサイトを参考にHello_World_controller.phpをつくり、ソース↓ <?php class HelloWorldController extends AppController { public $name = 'HelloWorld'; public $uses = array(); public $autoRender = false; function index() { echo "hello world!"; } }?> これをapp/controllersフォルダに入れて、xxx/hello_world/にアクセスしたところ、 HelloWorldController could not be found.と言われてしまいます。 なぜ認識してくれないんだろうか、、、
>>485 ヒント controllerのファイル名
487です。 すいません、$nameの部分だったんですね。できました!! ありがとうございました!
478ですが、やっと原因がわかりました。 JSON形式で出力するはずが、HTML形式で出力されているのが原因でした。 478で言っているctpファイルで、JSON形式にエンコードする旨が書かれているのですが、 調べたところ、layoutフォルダにdefault.ctpを作ればよいと書いてあり、 [default.ctp] <?php echo $content_for_layout; ?> というファイルを作ったところ、確かにブラウザで直アクセスしたときの表示は変わったのですが、 javascriptからのリクエストに対するレスポンスは変わらずHTML形式のままでした。 あともう少しだと思うのですが、、、何か良い方法があればご教授ください。
自己解決しました。数々の連投、ご迷惑をおかけしました。(・ω・)
IDも出ないスレで何言ってんだ
EclipseとかIDE使った方が良さそうなレベル。
493 :
nobodyさん :2011/04/06(水) 02:23:36.12 ID:3ifgNuIv
womanって入れると、テーブル名がwomenになったんだけどさ、 これってややこしいよな。それならテーブル名がwomanでもいいじゃん。 Cakeの規則に合わせるのは大事だけど、 英語得意じゃない日本人にとっては、分かりやすい形で良いと思うんだけどなあ
495 :
nobodyさん :2011/04/06(水) 06:51:01.77 ID:6d97kR6l
>>494 いや、
Aというデータがあるとして、
・Aの複数形=その中には複数のAデータがある
・Aの単数形=Aのデータ1つ
複数形は、DBでいうとテーブル。
プログラミング言語では配列。
単数形は、DBでいうとレコード
プログラミング言語では配列でない変数
複数形になれると、無意識に使うようになるよ。
英語が得意でなくても英単語覚えるのは別。
実際英単語組み合わせてプログラミングしてるんだから。
>>495 だから、それらを開発者が、あるいはその他の人間が覚える必要あるのか?
と言いたいんだ。せっかく作ったのを自慢したいのはわかるけどさ。
別にテーブル名はあくまで”識別名称”なだけだから、何だって良いんだよ。
別にCakeに従わないからと言ってエラーになるわけじゃないんだし。
womanという単語で分かるなら、womanというテーブルで良いんだ。
categoryをcategoriesにしなくても良いんだよ。categorysが誤訳でもさ
>>496 皆が1つのルールを覚えて使う事による効率というのがあるんだよね。
というかフレームワークってそういうためのもの。
使わない自由もあるけど、Cake使うならCakeのルールを覚えて使う事をお勧めするよ。
まあCookbookでpeopleテーブルととPersonモデルって見たときは、
最初は誤植か何かかと思ったよ。
そしてちょっとやりすぎだとは思う。
「皆が」って言うけど、ぶっちゃけ複数人で開発向きじゃないよね。Cakeって。
複数人開発に向いてるフレームワークって何?
500 :
nobodyさん :2011/04/06(水) 14:06:34.56 ID:6d97kR6l
>>496 あなたプログラミングに向いてないわ・・・。
自分が気にしないからって、categorysとか付けちゃう人と開発したくないな。
自分しか触らないって言うんだろうけど、
その精神は今後絶対に成長に影響する。
不特定多数が使うようなライブラリを開発することも、
複数人で開発することも、全て否定するんだよね。
>>498 一人で開発しようが、規約(=レール)は大事だよ。
統一された規約のもと開発するのは、とても安心するし、効率的。
そのレールの上に乗って進んでいくだけになるからな。
向きか向きじゃないかは何と比べるかによるけど、 普通に複数人で開発に使えると思うよ。 シンフォニーと比べると、規模は小さめのあたりが得意だとは思うから、 人数的にも少なめかもしれないけど。 関係ないけど、シンフォニーっていつも綴りわからんくなるわ。
>>500 逆だ逆。俺は仕様にめちゃくちゃこだわって規約を厳守するようにしているが、
結局、人間だ。必ず・絶対厳守させるには、それ相応の知識・経験が必要。
で、womanをwomenに変えなくても一般的なwomanで皆が分かるなら
それで良いじゃんって話だ。俺もそれで良いと納得してる。
お前は自分が作ったツールを是が非でも認めて貰いたいのかも知れないが、
ぶっちゃけ、お前のそれは無駄だと思う。
そしたら次は「お前のプロジェクトが低レベルなんだろw」って煽るだろうけど、 まぁ、それならそれで良いよ。ただ、そういうプロジェクトもあるって事は理解しろよ。
「一般的」の範囲が違ってる人の意見は参考にならんな。
小・中学程度の英語を勉強しなかった事をそこまで自慢しなくても・・・
なんか規約を完全に守る必要ないという人が定期的に出てくるが、 ある程度の規模のプロジェクトだと100%の規約の遵守を求められるよな。 規約を守っていなければ、動作が正常でもバグ扱い。 俺もそれが普通だと思っているのだが、そうじゃない人にとって規約ってなんなんだろう。
まぁCakeの英単語の単数・複数はちょっとやりすぎだとはオレも思ってる。 が、英語圏製なので仕方が無いのかなとも思うよ。 最良のフレームワークだとはまったく思ってない。 でも、Cakeというフレームワークを使って、 楽になる部分は多いし、使う以上は規約にそったほうが効果もでやすいからな。 それにCakeは規約どおりじゃないと苦労するフレームワークだとも思う。 単数・複数や主キー名をid以外にしたりと、逃げ道は用意されてる部分もあるけど、 そういうの使うのは、ハマリの元だわ。
>>506 お前らからしたら、俺がその「規約を守らなくてもいい人」だと言うことだろうけど、
>>502 に書いたとおり、
俺は「規約が守らない人もいて、完全に厳守させるのは人間だから難しい。
だから、チーム毎、プロジェクト毎で分かればそれで良いじゃないか」
と言いたいだけなんだけどな。お前らはどうも頭が固いようだな。
間違った英語でもいいってのはどうかって話だろ
そこまで難しい、わかりづらい規約じゃないと思うぞ。 複数形にしても、間違ってたらエラーになるわけだし。 エラーになったから規約が難しいのがおかしい、ということを許し続けると それこそフレームワークを使う意味のないほど混沌としたソースに なる気がする。 「複数形がわからなければ辞書で調べろ」くらいはルールにできるだろ。
elementキャッシュをしているのですが、 <?php echo $this->element('header', array('cache' => true)); ?> テストの時にキャッシュをしたくないので、core.phpの Configure::write('Cache.check', true); をコメントアウトしました。 しかし、キャッシュされます。 冒頭のようにビューに書いた場合、どうしてもキャッシュされるのでしょうか?
複数形に困ったら、inflection.phpでも作ればいいのに…
webroot/img の中の画像ファイルを、サブディレクトリを作って 分類したいんだけど、単純にビューで echo $html->image("sub/foo.png") としても 表示出来なくて…。 こういうのは、どうすれば良いのでしょうか? すごく簡単な事なんだろうけど、どなたか教えて頂けませんか?
514 :
nobodyさん :2011/04/06(水) 22:38:28.84 ID:8sZZCO1i
質問です。 CakePHPは複合キーに対応していないとのことですが、 別に複合キーのテーブルのモデルでも $Controller::primaryKeyに設定できないだけで、 モデルのfindメソッドとかは使えるし、 特に問題ないのかなーと思ってしまうのですが、 どのような場合に困る(対応していない)のか 馬鹿な俺にでも分かるように教えてもらえませんか?
>>513 うちでは出来てる。
パーミッションとか大丈夫?
>>514 belongToやらのJOIN機能が使えないだけ
>>516 そそそ・・・それだけですか!?
素早いご回答ありがとうございました。
CakePHPってDBにアクセスする時に、 カラム名どんなのがあるか最初に調べに行くのなw そんなのModelに定義するようにすりゃーいいのに。 速度より使いやすさを取ったか。
>>518 デバッグモードの時はね。
実運用時はキャッシュされてるのを使う。
XAMPP上でシェルを実行テストしたいのですが、 ググってもこれと言った方法がありません・・。 Windows上でシェルのプログラムが正しいかテストする方法はないのでしょうか?
あるよ 小リナックスかアンドリナックスを入れる
シェルってCakeのシェルだよね? ちゃんとCLIでphpが動くように設定しておけばうごくんじゃね? Winで開発してないから、断定的なことは申し上げられないが。
仮想PCでも使えばいいのでは。本チャンがWindowsなら知らないけど。
わかりました! コマンドプロンプトで php C:\htdocs\cakephp\cake\console\cake.php -app app test みたいなコマンドで普通に実行されました。 3時間ぐらい悩みましたが、問題なく出来そうです。ありがとうございました。
英単語の複数形がわからないってレベルが低すぎるんだよ。
わからないじゃなくて、分からない奴もいるって話だろ。お前がルールの全てか。
「英語の複数形がわかる俺まじレベル高いw」
「英単語の複数形がわからないってレベルが低すぎるんだよ。(キリッ」
間違えてたら 教えてやりゃいいことだと思うんだが
>>526-528 煽りでもなんでもなく、マジでわかんないの?
わかんなくても調べられるでしょ?
>>530 お前本当に馬鹿だな。全てがお前と同じ人間ばかりかよ。
これだからプログラマ脳だと言われるんだ
すごいな・・・ちょっとカルチャーショック受けたわ 日本のマの平均給与が低いわけがわかった
義務教育で習うことをわからない奴に合わせる必要は無いよね。
A「ソースのコメントに漢字使うんじゃねえボケ!読めねーだろうが!」 B「え?いや・・・え?これが?」 A「お前本当に馬鹿だな。全てがお前と同じ人間ばかりかよ。 これだからプログラマ脳だと言われるんだ」 C「わからないじゃなくて、分からない奴もいるって話だろ。お前がルールの全てか。」 D「「漢字読める俺マジレベル高いw」←wwwwwww」 B「・・・」
つか、コメントに日本語入れるのやめようぜ。 つぎに誰がそのソースみるのかわかったもんじゃない。
>>534 A「ソースのコメントに漢字使うんじゃねえボケ!読めねーだろうが!」
B「わかりました。Aさんの仕様に合わせます」
こう言えばあっさり終了するわな。どんだけコミュ力ねーんだw
自ら関係をややこしくしてるのな
>>536 ちがうだろ。
B「わかりました。えーさんのしようにあわせます。」
>>536 いいからお前はだまってニューホライズン買ってこいよw
>>536 そのうちメソッド名もローマ字でとか言い出しそうだな。
でも、意外と携帯用のライブラリを「ktai」って名前にしている人多いよね。
区分はKBNで
>>540 モバイルだとスマフォも入っちゃうような気がするからな
CakeDCがなんか沢山プラグイン出してるけど、お勧めある? 少し見てみたら、ものによっては完成度低いのもあるっぽいんだけど、 沢山ありすぎて全部みて使えるの探すのつらす。
>>544 お前本当に馬鹿だな。全てがお前と同じ人間ばかりかよ。
これだからプログラマ脳だと言われるんだ
コピペしかできない低脳
$model->save($this->data);でidを指定しているのにUPDATEじゃなくINSERT文が実行されるんだけどなんだこれ
文字コードを疑ってみろ
おい、文字コードさんよぉ本当はあんたがやったんだろ?ん?
find()を使ってテーブルから指定したレコードの要素を取り出したいんですが find('all', array("test"=>"test"); で、ひとつもヒットしないはずなのに なぜか全てのレコードの要素がヒットしてしまいます なぜヒットしてしまうのか検討がつきません どなたか詳しい方いましたら教えていただけませんか。よろしくおねがいします
>>551 読解力ないからよくわからんけど、
Cakeが最新なら引数の指定がすでにちがう。
んでcore.phpでdebugレベルあげたらSQLや件数が確認できるから
それで見当つくんじゃないかな。
553 :
551 :2011/04/08(金) 18:02:13.57 ID:???
あれ??すいませんマルチ投稿してました・・・
気分を害した方いましたらすいません
>>552 ありがとうございます。引数を調べたところ無事できました。
参考にしている本の内容ではfindAll()メソッドを使っていて、
そのメソッドが新しいバージョンだと使えないみたいで
findでも同じ引数でできるものかと勘違いしてたみたいです。
>>548 文字コードってdatabase.phpで設定するやつ?
encoding=utf8ってやってもupdateしてくれないわ
これどういう条件だとinsertじゃなくupdateしてくれんだろ
>>554 周りのコードも書いてくれないとわからないよ。
>>555 スマン
テーブルのidにauto_incrementを設定してなかったのが原因だったっぽい
各ビュー共通の関数、 各コントローラ共通の関数 これらは作れるけど、 各ビュー・コントローラ共通の関数の置く場所って用意されてないよね。 結構用途として必要な気がするけどなぁ
>>557 この質問たびたび見るけど
cakephp/libs or cakephp/vendors
だからな。
>>555 やはり自民党清和会の下に結集し、日教組を壊滅させることでしょうね。
日教組の教師に「労働者の権利」などという左翼思想を吹き込まれた連中が義務も果たさずに
サビ残は嫌だ、有給取らせろなどと権利ばかり主張しています。
あとは残業代を要求して裁判を起こしてるような腐った輩を社会全体で徹底的に叩くことでしょう。
え、そうなの? 自作の共通関数をlibとは考えられないな〜。
質問です。 /model配下には各テーブルに対応したvalidationなどを作成すると思うのですが、 実装者が存在しないテーブルのmodel名でmodel.phpを作りました。 要件的に「動けばOK」なので特に問題は無いのですが、Cakeの規約に反しているように感じています。 テーブル: files(web上にアップロードしたファイルのパスやファイル名を保持する。ここでDL可としたファイルのみ、ダウンロードなどが可能) 実装: files.phpにはvalidation。upload機能の場合のみ、upload.phpを使用。 個人的にはfiles.phpにすべて記述すべきと思ったのですが、どうでしょうか。
>>560 vendorsは廃止になってないよ。
以前は、vendors/cssやvendors/img、vendors/js にファイルを置くと
webdir配下に置いてあるのと同じように使えてたけど、それが廃止になっただけ。
CakePHPは終わコン
>>566 >2. DBを使わないといけない(DB操作が無いと使えない)
なるほど。
テーブルに直結していなくてもいいのですね。controllerの肥大化は確かにまずいですね。
>>568 よくわからんけど、URLが変化してるってなら、リダイレクトしてんじゃないの?
遷移・リダイレクトなしにURLが変化する事は流石にないし。
というかCakeがどうこうできる部分でもない。
>>556 なに、IDってauto_incrementじゃないとUPDATEできないの?
それ問題だろ。マジで。
質問させてください。 Tag hasMany Postの関係のモデルがあるのですが、 Tagのうち、Postと結びついているもののみを取得したい場合どのように検索するのが一番よいのでしょうか?
>>568 form->createのarrayに'url'を追加してみたらどうでしょう。
同じ問題を見たことがある
>>571 Tag hasMany Postって変わった構造だな。
まぁそれは置いといて、Tag側のテーブルにカラム追加しないと使えないけど、
belongsToアソシエーションのcounterCache使えば?
Postモデルの$belongsTo = array('counterCache' => true) して、
tagsテーブルにpost_countフィールド作れば良かったはず。
詳しくはぐぐれ。
>>573 TagとPostの名前を例に使ったのはちょっと不適切でしたね。
counterCasheの存在を知らなかったので、調べてみます。
ありがとうございました。
例えばmixiやモバゲーの規模のものを作るとしたらcakephpだとコントローラーはいくつくらいになりますか? また一人で開発しようとする場合は何人日かかります?(デザイン抜きで) そもそも、その規模のものはcakephpでは運用無理ですか?RoRとかのほうがいいのかな?
>>575 聞く暇あったら作れ
ソーシャルプラットフォームとしてのmixiやモバゲなら相当時間かかると思う
>>575 大規模アクセス前提としてるなら
Cakephp やめてRORへ行くべき
>>575 俺だったら1ヶ月あれば出来るよ。
運営出来るレベルのものになるかは別としてだが。。
>>575 規模なら結構作れると思うよ。俺も似たようなSNS作ってるし。
アクセス増加はキャッシュでどうにかなると思う。
Cakeのじゃなくてmemchachedを使うとか。
大規模って事だと、 CakeってDBのレプリケーションに本体レベルで対応してなよね? Cakeは中・小規模向けだと思うから、mixi規模は無理じゃないかな。 機能だけそろえるってなら話は別だけど、 シンプルなSNSから発展していろんな機能がついてるから、 作るのはかなり時間かかると思うぞ。 開発者の能力にもよるだろうけど、普通に3桁人月じゃないかな。
モバゲーはアイデアと良質な絵が無いとつまらないと思う。
>>582 コンテンツの事まで言うと、
アバターなんかも3Dで作った物をgifに変換して・・・みたいにしてるみたいだし
cakeなんかで作る部分とは違う技術が必要だよね。
581がいうレプリケーションとかもプログラムで対応させる事じゃないな。 てか、Cakeで生成するファイルでDB分けられるんだから、 そういう負荷対策出来ると思うんだけど。
List に SubList をアソシエーションしてるんですが、 List, SubList にそれぞれ no という項目あって、それぞれを no 順で取得したいのですが、 List から find('all') で取得した場合 List は no 順になっても SubList が id 順になってしまいます。 以下のように取得して View に渡しているんですが、いいやり方ありますでしょうか? $this->set('lists', $this->List->find('all', array('order' => array('List.no, List.id DESC'))));
order= > array('List.no' => 'DESC', 'SubList.no' => 'DESC')
既存のDB2流用しなくちゃいけなくて 結局SQL書いてるわ....
>>586 それはやってみたんですが、
$this->List->find('all', array('order' => array('ListSub.no, ListSub.id DESC')
とすると ListSub なんてないと怒られてしまいます。
いやだから array('order' => 'List.no DESC, ListSub.id DESC') か array('order' => array('List.no' => 'DESC', 'SubList.id' => 'DESC')) のどっちかにしろって話じゃないの?
>>590 何度もごめんなさい。
書き方変えてみたけどダメでした。
List から id はとってこれるけど、
$this->List->find('all', array('order' => array('List.id' => 'DESC')
こうすると ListSub.id なんてカラムはないよと言われるんです。
this->List->find('all', array('order' => array('ListSub.id' => 'DESC')
SQL Error: 1054: Unknown column 'ListSub.id' in 'order clause'
List は ListSub を hasMeny、ListSub は List を belongsTo でそれぞれ関連づけています。
まだモデルの仕組みなどわかってない部分が多いので、ここを調べろなどのアドバイスでもお願いします。
>>588 悩むくらいならそれもありだと思う。
ナンバリングのために、あるテーブルにsaveした場合の処理は、
sqlでUPDATE文書いた。
>>591 たぶんやりたいことは
this->ListSub->find('all', array('order' => array('ListSub.id' => 'DESC')
なんじゃないか
モバゲーのソーシャルゲームCakePHPで作ったよ。 コントポーネントの数がすごいことになった。
>>594 おお、そういう情報もっと書いてくれ。どのくらいになった?
コンポーネントなんかそんなに書くか?
597 :
513 :2011/04/11(月) 23:27:39.13 ID:???
>>515 親切なレスありがとうございます。
パーミッションは問題無くて、単に拡張子が大文字になってただけだった。
すぐにお礼レスしたかったけど、規制かかって書き込めず、忘れてしまってた。
>>595 数えたら50〜60ぐらい。たいしたことなかった。
コントローラも同じくらい。
ゲームはロジックが複雑だから、コントローラにごちゃごちゃ書きたくなくてコンポーネントに書いた。
どんくらいアクセスあるのかしらんけど Cakeだと重くね?
てす
重いね。許容範囲内ではあるが、次からはCake使わないと思う。
作るものにもよるけど、ボトルネックはほとんどDBなので フレームワークを変えても重いのはあまり変わらない事が多い気がする。 で、対処の方法もキャッシュ効かせたりとかで、やることも変わらない。
重いのがコンポーネント数十個になってるからとかモデルが薄すぎるんだろう。 それでcakeが悪いとか…頭ごなしに批判する奴は大抵こういうふうに理解が浅いよな。
頭ごなしに批判してないと思うが。 それにFW使ったら重くなるのは当然だろ。
コンポーネント数十個っても常に全部使ってるわけないだろ だいたい1コントローラあたり数個使ってる
自動テストで質問です。 fixtureの$recordsに配列でデータを記載しておくと、テストごとにこの$recordsの値で テーブルが初期化されます。 この$recordsをテストごとに切り替えたいのですが、どのようにすればよいでしょうか? たとえばtestAは$records、testBは$records2を使う、といった具合です。
bakeでつくったコントローラは $this->Session を使えるのに、 自分でつくったのは、 var $components で読み込まないと使えない。 bakeで自動作成されたコードはどこでSession読み込んでるんだろう??
610 :
nobodyさん :2011/04/13(水) 11:38:58.52 ID:89duiIHJ
あともう1つ、app_error.phpをつくって、 error404をオーバーライドすると、HTTP/1.1 200 OKが帰ってくるようになる。 app/app_error.php <?php class AppError extends ErrorHandler { function error404($params) { extract($params, EXTR_OVERWRITE); $this->error(array( 'code' => '404', 'name' => 'Not found', 'message' => sprintf(__("The requested address %s was not found on this server.", true), $url, $message) )); $this->_stop(1); } } ?> このオーバーライドしたerror404を消したり、 parent:error404($params); とかにすると、404 Not found が帰ってくるようになる。 バグかな? 関数の中身は、 cake/console/error.php の error404 をまるまるコピーしてます。
611 :
nobodyさん :2011/04/13(水) 11:51:22.60 ID:89duiIHJ
すまん勘違いだった。 <p class="error"> <strong><?php __('Error'); ?>: </strong> <?php printf(__('The requested address %s was not found on this server.', true), "<strong>'{$message}'</strong>"); ?> </p> こうなってたから $this->cakeError('error404' array('message' => '削除されてるよ')); みたいにやってた。 HTMLのmessageはurlのことで、 PHP側のmessageはステータスメッセージのことなのな。 ややこしすぎワロタ
modelについて質問です。 UPDATE時に、同一テーブルの現在の値を取得する必要ができました。 model.php内で this->$date とやってももちろんダメでした。 sqlを書いてクエリーとして得た結果をarrayに代入することで要件は満たせたのですが、 何かもっと良いスマートな方法は無いでしょうか?
613 :
nobodyさん :2011/04/13(水) 23:28:39.98 ID:JM0N9TIZ
モデルのバリデーターで一つの項目に 複数のバリデーションをかける場合、 バリデートする順番を指定したいのですが、 できますでしょうか? 例えばログインIDに対して半角英数チェック・文字数チェック ・独自バリデーションの3つをする場合で、 独自バリデーションではDBに値を見にいって実際に存在するかを チェックするとします。 その際に半角英数チェックと文字数チェックの前に 独自バリデーションが走ってDBにアクセスしに行っちゃうと SQLエラーになってしまいますよね。 その他にもバリデーションに優先順位を付けたいと思う場面って 多々あると思うんですが、そのような方法があれば教えて下さい。
>>613 出来ます。
validationのarrayに実行したい順番で代入すれば、上から順に処理します。
例題や公式ページに1項目に対しての複数のvalidation実装例は載っているはずです。
615 :
底辺 :2011/04/14(木) 09:26:19.34 ID:???
616 :
nobodyさん :2011/04/16(土) 00:30:56.91 ID:IZGr1QKI
auto_increment属性の付いていないIDのテーブルでも Model::save()でINSERTやUPDATEできますか?
んなもんやってみるしかねーだろ。 あまり想定はされてなさそうな事だから、こんなとこで聞くよりも確実だぞ。 そういえば確か、ユニークIDを生成して、それを主キーの値に使う方法があった気がするな。 ユニークIDは確かStringだったと思うぞ。
例えですが、ブログチュートリアルの削除リンクにCSRF対策を行いたい場合、 どんな方法で実装すればいいのでしょうか? adminページを作ってアクセス制限するか、投稿フォームなどと同じようにトークンを使うか という方法を考えましたが他に一般的な方法やライブラリなどあれば教えてください
619 :
Perl忍者lvl4 ◆M5ZWRnXOj6 :2011/04/16(土) 17:00:51.46 ID:uU0OblS5
発 者 同 . 。_ ____ 争 生 同 .じ . /´ | (ゝ___) い .し 士 .レ .__/'r-┴<ゝi,,ノ ro、 は、 .な で .ベ ∠ゝ (ゝ.//` ./`| }⌒j .い し .ル } ⌒ /`ヽ、_∠l,ノ ・ヽ´ .! ! か の / ´..:.} >、、___, .r、 ソ、`\ / ..:.:.} / |∨ ` ̄ / ..:.:./ | 丶 / _、 ..:.:.:.{ .{.:.:. \ { ..:Y .ゝ、 {.:.:.:.:. ヽ |、 ..:/ 丿 .:〉 >.- ⌒ . ヽ / {. ..:./ ソ ..:./ .( ..:.:.:` ..:} ./..:.:}.:.:./ ヘ、 ..:./ .\ ..:.:r_,ノ、.:.:} ./..:.:/|.:/ {.:./ X.:.:}.} X X /..:.:/ .}.:| }:/ .Y丶ヽ Y.:Y . __/.:/ { } 《.〈、 _,,__>.:》丶 Y.:\ /.:.:.:.:.::/ !.:.:ゝ ゝ.:. ̄ヾ ´:.:.:.:.:.:.:.:.:ヾゝ \.: ̄>
>>618 beforeFilterでログイン時の情報をセッションで持ち回る。
更新(UPDATE)の条件で、point=point+1 みたいな書き方ってCakePHPではどうすればいいのでしょうか?
updateAllとか
conditionsの書き方はどうするのでしょうか?
$field = array('Model.point' => 'Model.point + 1'); $cond = array('Model.id' => intval($id)); $this->Model->updateAll($field,$cond); こんな感じ?
いいと思う。 もちろんpointは数値列だよね。
アクセスしてきた携帯端末の情報をコントローラーとビューで使うのですが、 AppControllerのbeforeFillterでConfigure::write()を使って書きこんで、 コントローラとビューでConfigure::read()で読み込むのって 使い方合ってますかね?
controllerからviewに値を渡すのは$this->setでしょ
$this->addじゃないのが腹立つ setだとキー追加じゃなくて完全に代入されるイメージ app_controllerに作るか
Cakeはコントローラ名に使えない名前が多くて罠が多いな どこかに書いといて欲しい
注文テーブルをorderにしてしまい、トラぶったことはある
なるほど。
632 :
nobodyさん :2011/04/20(水) 00:31:33.15 ID:NKIgYW4j
Formヘルパーでググると Form::input()を使ってる記事が多いんですが、 これって1.3でも使って良いメソッドなんでしょうか? あと、1.3で<input type="image">を出力したいんですが、 Formヘルパーのどのメソッド使えばいいですかね?
html->imageでonclick="javascript.js"
>>633 ありがとうございます。
Formヘルパーではないのですね。
Form::inputあたりをつかうのかと予想していたのですが、
1.3のCookbookにもメソッドが載ってないんですよね。
かなり謎です。
>>634 マニュアルは英語版から読むようにしよう。
form->submitに画像のURLを入れれば自動でできる。
echo $this->Form->submit('ok.png');
↓
<div class="submit"><input type="image" src="/img/ok.png"></div>
モデルとビヘイビアに同じ名前の関数がある場合、$this->関数名で呼ぶとモデルの方が呼ばれるようですが、 ビヘイビアの方を呼びたい場合はどう書けば良いのでしょうか
htmlヘルパーでlink要素ってどうやって書いたらいいんでしょうか
具体的には<link rev="made" href="mailto:
[email protected] " />ってのを書きたいんですけど
html->linkとやるとa要素になってリンクが張られてしまいます
639 :
nobodyさん :2011/04/21(木) 00:46:29.17 ID:fExhpbbE
formヘルパーでラジオボタンとかチェックボックスとかにcheckedの設定をすると バリデーションエラーでその画面に戻った時にその値に戻っちゃうんですが これってどうしたらいいですかね?
>>638 英語版cookbookにそれこそ載ってるよ。
もしくはGoogle検索「CakePHP a href」とかやればいくらでも実例が出てくる
実装してて分かったのは、タグ名が分かったら、 本来のHTMLで書きたい要素を arrayに 'name' => 'value' で書いてブラウザーで開いてソース見れば、解釈されているかどうか分かって楽だった
それならもうHTMLで書けよ
書き方は合わせたい。 array( "key" => "value" )
>>640 CakePHP a hrefでぐぐったらリンクのことしかでてこないんですが
>>645 foo/posts/edit とbar/posts/edit はやることが違うの?同じ事をやるの?
fooとかbarは種類が決まってるの?
>>645 mod_rewriteで何とかしろや。
>>646 やることはほとんど一緒です。
ただ読みに行くデータが違います。
テーブルごと分けるか、種類を分けるフィールド追加して区別するかはわかりませんが、
とりあえずカテゴリごとの動作ということにしたいんです。
>>648 なんとかRouterでPostControllerのedit に誘導するのがいいと思うけどね。
>>644 すんません、HTMLヘルパーに自分で書く必要がありますね。
cake/libs/view/helpers/html.php
の
function link
を参考にして、
自分で a が付かない<link rev=〜を出力するように頑張ってください。
iモードシミュレータIIで携帯フォームの動作確認をしているのですが、 モード7の時はSJISで送信され、モード8の時はUTF-8で送信されます。 Cakeでは、ビューをUTF-8で作り、出力時の文字コードは <?php echo $html->charset('SJIS'); ?> と言う感じでShift_JISにしています。 ただ、$form->createのencodign(accept-charset)はutf8のままなので、 UTF-8としてデータが送信されてくると思うのですが・・・原因が分かりません。 古い端末だと文字コード変換が上手く行かないとかあるのでしょうか? 直接Cakeの質問と違うかも知れませんが、分かる方いたら教えて下さい
CakePHPの1.3でDBの更新処理をSQLで直書きしなくてはならなくなったのですが、 普通のINSERT文をModel::execute()で実行しようとするとシンタックスエラーに なってしまいます。 でもちゃんと正しいINSERT文なんです。 ちなみにModel::query()で実行すると正しく実行されます。 Model::execute()って何か問題があるのでしょうか?
どこのexecute()が実際呼ばれてるか 追いかけてみたらいい
CakePHPのdebug出力してみたら?
モデルとビヘイビアに同じ名前の関数がある場合、$this->関数名で呼ぶとモデルの方が呼ばれるようですが、 ビヘイビアの方を呼びたい場合はどう書けば良いのでしょうか
$this->Behaviors->BehaviorName->method($this, ... );
ありがとう そういうことをちゃんとマニュアルに書いておいてくれればいいのにと思います
マニュアルに書くレベルのものとそうではないものもあると思うけどね。 マニュアルにない使い方するときは、ソースコード追ったほうがいいよ。
hasMeny や belongsTo で指定のテーブルだけ取得することは可能でしょうか? 下の例では Data に Category を belongsTo して、 Category は Auther を belongsTo、Data を hasMany してます。 $this->Data->find('first', array( 'conditions' => array('Data.id' => $data_id), 'recursive' => 2 )); Array( [Data] => Array( [fields] => 'value', [Category] => Array( [fields] => 'value', [Auther] => Array( [fields] => 'value' ) [Data] => Array( [fields] => 'value' ) ) ) ) これで find すると data['Data']['Category'] 以下にもう一度 Data を取得してしまいます。 data['Data']['Category']['Auther'] は欲しいので、アソシエーションを利用してData を読まずに Auther だけ取ってくる方法はありますか?
>>659 です。
読みにくくなってしまったので・・・。
$this->Data->find('first', array(
'conditions' => array('Data.id' => $data_id),
'recursive' => 2
));
Array(
[Data] => Array(
[fields] => 'value',
[Category] => Array(
[fields] => 'value',
[Auther] => Array(
[fields] => 'value'
)
[Data] => Array(
[fields] => 'value'
)
)
)
)
よろしくお願いします。
661 :
底辺 :2011/04/23(土) 11:34:30.80 ID:???
>>660 containerビヘイビアを使いなさい
>>661 ググっても出てこないんですが、サードパーティですか?
もう少し詳しくおしえてもらっていいですか?
ログイン管理って要はセッション管理なわけだし、 Auth使うよりも自作(か、セションコンポーネント)使う方がいいんじゃね? なんかAuthの使い勝手が良いんだか悪いんだか分からなくなる時がある。
664 :
底辺 :2011/04/23(土) 15:05:11.60 ID:???
>>662 containか?
最初からcakeに入ってるよ。
アソシエーションは、時間かけて勉強した方があとあと役に立つから、焦らず、ゆっくり。
665 :
底辺 :2011/04/23(土) 15:06:38.87 ID:???
>>663 俺もある。
一つ言えるのは、ログイン後に前のページに戻るのが楽。
うちもセッション管理は自前で持ってる。 ユーザー区分が3つあって、見せていい画面が決まっていて、その遷移もphp上で実装した。
Authに限らずセッション周りは色々挙動が謎すぎて、全部自前で作って使ってる まあタダだしそのくらいはしょーがないよね
やっぱり、みんなセッション管理は自前だったかw 俺はなんとかCaleの機能で出来ないかと悪戦苦闘していたが、 やりづらいこともあるよな。こだわりすぎはよくないな
Cake自体が完成されたFWじゃないからな しかし使えないほど駄目でもないのが悩み所
いやー、他でMVCを学んだ人には話が通じやすくていいよ。
Cakeはmod_rewriteに依存しすぎてるの駄目なんだよな。 テスト環境で他のアプリと相乗りさせようとしたらハマりまくった。
それはあるな。サイトの規模が大きくなるほど、ファイル構造がややこしくなるし。
mod_rewriteのせいでクエリストリングがurl=xxx付加されて変わるから OAuthの生成シグネチャが合わなくなってハマった事がある
674 :
nobodyさん :2011/04/24(日) 17:01:45.23 ID:YIdiQXQP
htmlしか書けない初心者ですがcakephpでハマってます。 トップページのctpファイルに貼ったswfから 他のページのctpファイルにリンクしたい場合、 どのようなasを書けばリンクできるのでしょうか?
flashVarsに基底URLか完全なURLを渡せばおk
ちょうど上にAuthの話題があるので、質問します。 ログイン→リダイレクト→ログイン後のページ に移動するのがAuthの機能だと思いますが、 ログイン成功時に、ユーザ情報以外のセッションを付加して ログイン後のページに推移させるにはどうすればいいのでしょうか?
677 :
674 :2011/04/24(日) 22:00:11.95 ID:YIdiQXQP
>>675 レスありがとうございます。
ヘッダー、フッター、サイドメニューをctpで出力し、
コンテンツ部分をiframe(ファイル名を十進数にして出力)で
表示させてるらしいのです。
ctpでのphpは以下のような記述です。
-------------------------------------------
<?php global $directory;
$url = $this->Html->url(array('controller' => 'common',
'action' => 'ヘッダー、フッター、サイドバー出力.ctp'),
array('escape' => false));
?>
<a href="<?php echo $url;?>/iframeurl:<?php echo bin2hex($directory.'aaaa/bbbb.html');?>">リンク</a>
----------------------------------------------------
上記で出力されるページを、
swf内のボタンでactionscriptでリンクさせたい場合、
以下のように単純な指定でリンクすることはできますか?
疎くてflashVarsすらよくわからず申し訳ございません。。
on (release) {
getURL("
http://ドメイン/ctp格納ディレクトリ/ヘッダー 、フッター、サイドバー出力.ctp/iframeurl:<十進数で出力されたaaaa/bbbb.html>");
}
>>676 $this->Auth->autoRedirect = false; にして、 login() ルーチン内で
if ($this->Auth->user()) { // ログイン成功時
$this->Session->write('xxxx', 'yyyy'); // セッション情報追加
$this->redirect($this->Auth->redirect()); // ログイン成功時のリダイレクト先に飛ばす
}
みたいにすればいいんじゃないかな
>>678 うちもそれで実装してます。
書きたいこと全部Sessionに書いてファイルとして保存。
680 :
676 :2011/04/25(月) 23:10:01.61 ID:???
>>678 ありがとうございます。autoRedirect = falseがキモですね。
この方法でやってみます。
681 :
nobodyさん :2011/04/26(火) 00:35:52.43 ID:ITZhMk+T
会員登録画面で 登録画面→確認画面→完了画面 直接完了画面のURLを叩いた場合に エラー画面に飛ばすみたいなのは どのように実装するのがスタンダードでしょうか?
普通はセッションじゃないすか?
if (empty($this->data)) { $this->Session->setFlash('登録画面からやりなおしてください'); $this->redirect('/xxxx/error'); } }
684 :
681 :2011/04/26(火) 01:17:51.28 ID:???
すみません、完了画面でもバリデーションはやってるので $this->dataの値はチェックしてました。 完了画面ではユニークなキーを発行してmemcachedにフォームの値を入れて 確認メールを送信するのですが、 完了画面でブラウザの更新ボタンを押すともう一度 ユニークなキーでmemcachedにフォームの値を入れて 確認メールを送信してしまうのです。 これどうしたらいいかなーと。
サイトで、 hogehoge.com/controller/action/ と hogehoge.com/abc/controller/action/ を同じアクションにして、かつ リンクはabcのprefixつきにしたいのですが、良い方法ありますでしょうか? 動きとしてはprefixルーティングで abc_indexを呼ぶのではなくindexを呼ぶようにしたいのです。 dispatchを書き換えていまはうまくいっていますが、スマートでないような気がして、、
>>684 俺はPOSTで画面毎に値を渡してチェックしてるよ。
登録
<input type="hidden" name="next" value="confirm" />
確認
<input type="hidden" name="next" value="complete" />
フォームヘルパーじゃなくて普通のHTMLで用意すれば
$this->dataの配列内で差別化できるし。
昔ながらのやり方だけど、これで良いんじゃないかな?
CakePHPで、コントローラにどのビューから飛んできたかを取得するには $this->referer()しかないでしょうか?
コントローラにアクセスした時、セッションかクッキーで保存すれば?
>>685 URLが異なるならviewもcontrollerも別ファイルにして、
共通のphpを読むようにしたら?
2ch のスレッドとメッセージのような t hasMany m の関係で、 スレッドの一覧を取りたいんですけど、メッセージの投稿日時で スレッドをソートしたいときは、どう書けば良いのでしょうか?
SQLのORDER BYに date型のcolumn DESC でいいのでは?
692 :
690 :2011/04/27(水) 19:33:54.84 ID:???
>>691 レスありがとうございます。
説明不足で申し訳ありません。
$this->paginate での条件指定方法が分からないのです。
693 :
690 :2011/04/27(水) 19:36:38.21 ID:???
こんな感じでやってみたのですが、SQL をデバッグで見ると FROM に message が指定されておらず・・・。 $this->paginate = array( 'contain' => array( 'Message' => array( 'fields' => array('id', 'created') ) ),
694 :
690 :2011/04/27(水) 19:39:00.83 ID:???
'conditions' => array( 'Thread.delete_flag <>' => 1 ), 'limit' => 10, 'order' => array( 'Message.created' => 'desc' // ダメなとこ ) );
test
>>690 $usesにMessageを追加して
$this->paginate = array('Message', array(...
とするとか
その場合は、Messageモデルのhasmanyの定義にorderを書く。 それが嫌な場合はページネートにjoin句を書く。 $this->paginate = array( Thread=> array( 'conditions' => array(), 'limit' => 24, 'order' => array(), 'joins' => array( array( 'type' => 'LEFT', 'alias' => 'Message 'table' => ''messages', 'Message.created' => 'desc' ) )) );
698 :
690 :2011/04/28(木) 21:41:37.52 ID:???
>>696 すみません。私が理解出来ず、うまく行きませんでした。
SQL 文を見ると "SELECT Thread.Array, ..." と訳の分からん状態に。
でも、ご助言ありがとうございました。
699 :
690 :2011/04/28(木) 21:50:08.53 ID:???
>>697 Thread の一覧では created DESC ですが、Thread の内容、
つまり Message の一覧では、created ASC にしたいので、
hasMany の定義に書くことに抵抗感がありました。
(あまり CakePHP のこと分かっていないのですが・・・)
700 :
690 :2011/04/28(木) 21:52:25.68 ID:???
冷静に SQL でやりたい事を書いていたら、DISTINCT か GROUP BY を使うことなると今更ながら気づきました。 ただ(MySQL の仕様なのか)意図した形でソートできず、 結局 Thread の modified フィールドを Message の 挿入時に update するのが手っ取り早いのかな・・・と 諦めの段階に入っています。 レス下さった皆様、ありがとうございました。 また、何かあれば宜しくお願いします。
701 :
底辺 :2011/04/29(金) 00:48:18.72 ID:???
CakePHP で共通の関数ってどこに置くのがセオリーですか? コンポーネント、ビヘイビア、ヘルパー全部で共通で使いたいってときがあるんですけど、そういう場合どうしてますか?
うちはvendors/ vendors/common_function.php
704 :
底辺 :2011/04/29(金) 14:15:06.85 ID:???
俺はbasic.php
俺は /cake └/common ←ここに入れてる
俺は/ore/←ここに入れてる
Cakeに合わせて/Strawberry
普通はapp/libsでしょ
710 :
707 :2011/04/29(金) 23:54:09.93 ID:???
>>707 俺も頼む。
おもしろすぎるのでコテつけてください。
コテは重要だよね NGにしにくいし
かけPHP
XP+XAMPPだと何故かレスポンスが悪かったcakephpだけど Windows7に換えたらその現象がなくなった・・・気がする
>>714 マジ!?俺も悩んでるんだけど、7だとそんな違うのかよ・・・
メモリ増やしたか?
日付を扱ってるテーブルがあり、各曜日で一気に値を入れるにはどうしたらいいでしょうか? 今月の月曜日に全部1を挿入といったようなことをしたいです。
>>717 それってSQLの話だけど、例えばDATE_FORMAT()をつかって条件指定できる。
Cake的にはupdateAll()をつかうだけ。
最近、ソーシャルアプリをCakePHPで作ってますという案件が増えたね。 CakePHPは大量アクセス前提のアプリも問題なく開発できるってことですね。 分かります。
>>719 俺が思うに、それは管理画面だけの話で、
アプリ側やアクセスが頻繁に発生する部分では、
限りなくピュアPHPで自作してると思うよ。
うちはアプリ側もCakeで作ったよ
Cakeに慣れると、簡単なPHPのプログラム作ろうとしても いつの間にかCake風のプログラミングしてることあるよな
Cake風のプログラミングってどういうのだ?
RoR風MVCと言いたいのかな? PHPあんまり知らないJavaはよく知ってる人が、ぱっと見で 「あ、これ分かりやすいね」と言ってた。
MeioUpload Behaviorを使っているんだが 確認画面で画像を確認した後、saveってできるのかな? やっぱりそこは自作しないといけないのかな
2.0はいつ正式版でんのかな Symphonyに先行されたくはないよな
>>726 それはあなたが参加チームに入ればいい。
あなたも参加チームに加わって、2.0のバージョンの開発スピードを速くしましょう、ボケ。
ちょっと気づいたんだけど、 app_controller.phpに「var $autoLayout = false」を指定してないと、 エラーページにもレイアウトが使用されるんだな。 会員専用ページとか、レイアウトに「default.ctp」を使用してたら これが読み込まれるから大変な事になる
729 :
nobodyさん :2011/05/06(金) 20:26:56.51 ID:aIuVNDEL
コントローラに変数を書くのは $this->set('foo', 'bar'); ってやってビューで$fooでbarが出るようにできたんですけど、 このfooを配列にしたいんですけどどう入力したらいいんでしょうか $this->set('foo', 'bar'); $this->set('foo', 'bar2'); とやったらただ$fooが上書きされただけで配列にはなりませんでした
$this->set('foo', array('bar', 'bar2'));
>>730 あ・・・
なるほどありがとうございます
助かりました
ヒマだったんでローカル鯖にエロ動画データベースみたいなのを作ってみた。 今まで使った事無かった機能とかいろいろ使ってみて勉強になるわ。 やっぱ実益を兼ねると捗るな。
エロサイトは技術レベル高そうだね。 みんなのDMM様とかね。
737 :
nobodyさん :2011/05/12(木) 00:21:57.52 ID:RDtqq4sq
CakeでModelのfind・save・delete等のDBアクセスメソッドで エラーハンドリングするのって $res = $this->Model->save(); if ($res === false) { // エラー処理 } って感じでいいですかね?
if(!$this->Model->save()){ // エラー処理 } これじゃ駄目なのか?
save()ならいいけどfind()だと空arrayをどう扱うかにもよる。 delete()は場合によっちゃgetAffectedRows()がいる。
740 :
nobodyさん :2011/05/12(木) 08:57:26.67 ID:i1t11ChC
Cakeを何年か使ってきて、結局分かってないというか、初歩的なところを 何となくスルーしてきたんだけど、 例えば、 ・コントローラ内からモデルの関連モデルをとり回す ・モデルから関連モデルをとり回す 時に、$this->Post->User とか、モデル内なら $this->User とかやるけど、 これって何が嬉しいの? 関連モデルも取ってくるだけなら、$recursiveとかunbindModel, bindModel やContainableビヘイビアとか あるわけだし、直接関連しないモデルとの突き合わせや何かに使うならClassRegistry::init('Model')でいいわけじゃないすか $this->Post->Comment とか、 $this->Post->User とか使って美味しい場面ってどこなんですか? 初心者のつもりじゃなかったけど、この部分だけ何年もスルーしてました。
ClassRegistryが登場するまでは、関連モデルをたどる事が基本だったんじゃないかな。 設計として関連モデルまでのアクセスを基本とすることを良しとすることもあるのかも。 他にもシュガーシンタックスとか色々推測はできるけど、コアチームに聞いたほうが早い かもしらんね。 こういう話題はフォーラムとかに振ったほうがいいんじゃないかなぁ。
742 :
nobodyさん :2011/05/13(金) 00:53:55.24 ID:bOFdFGkg
CakePHPのバリデーションで ある項目で半角英数のみを許可するというチェックで 入力がされなかった場合はスルーさせたいのですが、 以下のような感じでいいでしょうか? var $validate = array( 'id' => array( 'alphaNumeric' => array( 'rule' => 'alphaNumeric', 'message' => '半角英数で入力して下さい' ) ), 'pass' => array( ・・・ ) );
>>742 'allowEmpty'=>true,
Authでログインし、print_r($_SESSION)を見ると 配列のConfigに”[timeout]=>10”とあります。 これってタイムアウトの秒数じゃないですよね? あと、セッションタイムアウトになったら自動的にログインフォームに戻りますが、 またログインするとそれまで、↑になる前のページが表示されます。 これって単にリファラをチェックしているだけなのでしょうか?
CakePHP使ってみたけど駄目だわー。 あぁRoR系ってこの程度の物だったのねって感じ。 全然ダメダメで安心した。 俺の作ったフレームワークの方が万倍良いわw
比較対照も示さずに
CodeIgniter移行余裕
使いこなせるものを使えばいい
CodeIgniterからまたもどってきちゃった
Cakeの仕様に合わせたオレオレフレームワーク作ってるけど 746もそういうことかな?
自分の用途に過不足なく機能があり 自分で隅から隅までわかっているライブラリのほうが良いと感じる 当たり前といえば当たり前の話です
Cake(RoR)から学ぶことなんか何も無かったね。 あえて言えばアンチパターンを学んだね。 ActiveRecordなんか最悪だぜ。
じゃ、普段どういう書き方してるの?
755 :
nobodyさん :2011/05/16(月) 13:05:48.45 ID:Buwzzl2B
>>751 Cake真似てDispacherとかなんやらかんやら複雑に創り上げた黒歴史の俺俺フレームワーク思い出すからやめろ・・・
みんなやるんだよ
$this->dataで指定配列があるか無いか調べないとエラーになるから ifやissetばかりのコードになるんだが、みんなはどうしてる? if (isset($this->data['User']['name'])) { if ($this->data['User']['name'] <> "") { echo $this->data['User']['name'] . 'さん'; } } みたいな。画像があるか無いかのチェックならもっと複雑になる。 俺の書き方が悪いかもしれないけど、良い書き方はないかな? ちなみにめんどくさい時は@を付けてる。
(isset($this->data['User']['name']) ?: '') PHP5.3以上限定だったっけな
ごめん、上のじゃダメだわw
>>757 何もしない。そのままエラーで例外発生させて、例外処理に飛ばしてる。
>>760 入力されてるか否かの、この程度の動作でも例外処理に飛ばすの?
確認画面を出力する時とか困らないか?
>>761 普通にCakeのコードを書けば、データの入力有無に関わらず
配列の要素だけは最低限存在するんじゃない?
もしも場合によって要素が無いというケースを作ったのであれば、
そこは例外にならないようチェックを入れれば良いし。
CakePHPのビヘイビアの仕様にいつも引っかかる($this->ビヘイビア名->関数と書いてしまう) 第一引数の&$modelにもよく引っかかるし なんでこんな実装になってんのよ
それは単に悪い癖がついてるだけだろ まさかいつも直接ビヘイビアのメソッド呼び出してるわけじゃないよな?
765 :
nobodyさん :2011/05/17(火) 01:45:48.69 ID:p7ZABAr6
cakeでDBのUPDATEをする場合でIDの値を持っていない場合は Model::save()使えないんだけどその場合どうしたらいいですか? 1)他のメソッドを使う 2)Model::find()等でIDを取得した後Model::save()を使う
普通、IDを持って更新するんじゃないか?Cakeに限らないが。
>>757 trueであることと、空文字列でないことをチェックするなら
isset()じゃなくて、!empty()を使えば一行で済む
<?php
$str = '';
var_dump (isset($str)); // true
var_dump (!empty($str)); // false
一応updateAll()で素のUPDATEステートメントに近い形で更新はできる 基本はIDを元に更新するけど、フラグや日時一括更新の場合など、場合にも拠る。
769 :
765 :2011/05/17(火) 08:31:56.73 ID:???
>>768 つまり2)ってことですかね。
基本UPDATEはIDを元にするけどModel::updateAll()を使えば
ID以外でもUPDATEできるということですね。
ありがとうございます!
>>739 findって空の場合falseが返ってくるんじゃなかったっけ?
>>739 firstとかIDベースのじゃなくてallとかlistだとarray()が返るとおもた。
>>767 指定配列があるかどうかって書いてるから、isset使ってるんだろ?
お前さんのは$strを最初に書いてるじゃん。
>>772 isset と empty の挙動の違いは頻出ネタだと思うが。
つまり、こう書けるってこと。
if (!empty($this->data['User']['name'])) {
echo $this->data['User']['name'] . 'さん';
}
POSTでUser.nameが送られてこなかったら?
あと、0を入れたらどうするの?ってのもあるな。 名前に0を入れる奴がいないとも限らないぞw
776 :
nobodyさん :2011/05/17(火) 13:57:44.20 ID:YbRN4g9b
めんどくせーからemptyで判断してるわ でも判断してるのは$this->dataだけだし、emptyでもよさそうだな
関数作るのはどうなの? if (checkData($this->data)) { echo $this->data['User']['name'] . 'さん'; } みたいな。
いや、Cakeだからヘルパーにするべきだな・・・
validateしろよ
780 :
nobodyさん :2011/05/17(火) 17:24:54.66 ID:ceh4vxWU
empty(0)ってなんでtrueにしたんだろ empty('0')はfalseなのに たまわらんわ
>>780 0だと変数の型がintegerで'0'だとstringだから。
ちなみにfalseはbool型の0。
782 :
nobodyさん :2011/05/18(水) 23:55:26.02 ID:M1/yO2iL
findで以下のようにSQLの関数を使うと戻ってくる値がおかしくなります。 以下の例だとUser.sexの最初の値は$res[0]['DECODE(User']['sex']の中に入ってきたりします。 この現象を回避する手立てはあるのでしょうか? $params = array( 'fields' => array( 'User.id', "DECODE(User.sex, 1, '男', 2, '女')" ), ・・・ ) $res = $this->User->find('all', $params);
virtualFieldsを使えば良い。 1.2とかだったらasで名前指定すればOK、ただしUserの配列の中に入れることはできない
784 :
nobodyさん :2011/05/19(木) 13:25:40.80 ID:hw1vryEv
class OrderDetail extends AppModel { var $hasMany = array('Stock'); } これで注文テーブルから注文レコードとると、 注文詳細レコードも一緒にとってくるようになったんだけど、 注文詳細レコードから、商品レコードも一緒に自動で取りたい場合はどうしたらいいんだろう。 1階層?しか自動でとってこないのかな
>>784 他モデルの設定が分からんからなんとも言えないけど
マニュアルは読んでやってみたけどできなかったっつう話?
>>784 自前でjoin書かないと1階層までじゃないんだっけ?
>>784 テーブル設計が分かってないけど
recursive使えばいいんじゃない?
$this->Model->recursive = 2;
さんくすおまえら
>>786 recursiveを使えば取得できるけど、joinされたSQLが発行されるわけではない。
パフォーマンスを考えれば自前でjoinすべき。
joinとかサブクエリちょっと複雑なfind書こうとすると とたんにSQL書き始めちゃうみたいになるよね。 コントローラでSQLって書いちゃ駄目だろとか思う。
>>783 1.3ですけどうまく行きませんでしたよ。
フォーム送信された電話番号に全角があったら半角に変更しようと、 beforeValidateに以下のように書きました。 function beforeValidate(){ if (isset($this->data[$this->name]['tel'])) { $this->data[$this->name]['tel'] = mb_convert_kana($this->data[$this->name]['tel'], 'rnask', 'UTF-8'); } return ; } しかし半角に変換されません。何か間違っているのでしょうか? ちなみに、コントローラーでバリデーションを実行する前に $this->Model->set($this->data); こうしてます。
>>792 >この関数は true を返さなければなりません。
>そうでない場合、現在の save() の実行が中断されます。
でないの?
>>793 return ; にしているところを return true; にしても変化はありません。
全角が半角になりません。
また、確認画面を入れてますので、saveでの動作ではありません。
$this->Model->set($this->data);
if (!$this->Model->validates()) {
$this->set('error', 'エラー');
}
みたいにしています。
>>789 これって2階層以上になるとjoinしなくなるってわけじゃないよな?
cakeのモデルの結びつけは全て単に個々のレコードをselectしてるんだよな?
っていうか、たとえば、「MySQLにとって最適なクエリはどう書くのか」っていう考えが出来てない奴大杉。 はじめからORマッピング使うからそうなる。 フレームワークのDBアダプター使えば全てのDBサーバに最適なクエリが発行できると 思ってる奴多いけど、最適なクエリはDBサーバによって書き方が異なるのだ。 って、ねーちゃんが言ってた。
>>795 1階層目まではjoinされる。
2階層目以降はjoinされない。1階層目のデータをキーに、複数のSQLが実行される。
アソシエーションで質問なんですけど、 FooとBarがそれぞれ3つのHogeを持たせるため、 Foo、Barそれぞれに hoge_id, hoge1_id, hoge2_id カラムを作成して関連づけました。 これでHogeをfindで取得した場合、 Array ( [0] => Array ( [Hoge] => Array(~) [Foo] => Array(~) [Foo1] => Array(~) [Foo2] => Array(~) [Bar] => Array(~) [Bar1] => Array(~) [Bar2] => Array(~) ) ) こんなふうになるんですが、(foreignKeyごとにエイリアス名を変えています) これを [Foo] => Array( [0] => Array(~) [2] => Array(~) [1] => Array(~) ) こんな感じに取って来れる方法はないでしょうか? もしforeignKeyを分ける以外にいい方法があればそちらも教えて下さい。
そういう関数を作る
800 :
nobodyさん :2011/05/20(金) 16:16:52.10 ID:haTOk0oR
primary(文字列)に"0"設定したいんだけど、save()で登録できる方法ない?
$results = $Model->find('threaded',$options); これでツリー式のデータを取得できますが、 それを出力する方法で悩んでます・・。 目的はセレクトメニューのoptionに入れたいのですが、 何か良い参考ページかやり方はないでしょうか?
>>801 セレクトに使う程度ならツリービヘイビアのgeneratetreelist使った方が楽だよ。
803 :
nobodyさん :2011/05/21(土) 00:18:07.82 ID:/xyh+Ud4
findでちょっと複雑なこと(と言ってもjoinとかサブクエリ程度)を しようとすると本当に面倒くさい。 もう面倒だからquery()でSQL直着書きしちゃうんのってアリ?
どの程度の事なのかようわからんけど ほとんどはcontainableビヘイビア使ってなんとかなってるけどなー
>>803 検索オンリーならDBにビュー作ったらいいよ
DBにビューってなんだ?
データが決まっているなら、CREATE VIEWしてそれをfindした方が早いと言っているのでは。
それすら知らなかったんだろ
cakephp2.0ってphp5.3にちゃんと対応してる?いつでんの?
810 :
nobodyさん :2011/05/21(土) 11:27:17.26 ID:/xyh+Ud4
CakePHP1.3.7使ってるんだけど Model::execute()って無くなってない? PDTの候補にも出てこないし実際に無いし。
>>810 executeは1.2で無くなったっぽいよ。
互換性のためにメソッドは最近まで残してあったのかも知れないけど。
CakePHPは終わコン
始じコンは何?
今後はなんでもJavaScriptで組まれるようになるよ
設計が良いCodeIgniterが始まってます数年立てば日本での立場は変わってくるよ
サーバサイドJSってやつか。面白そうだね。
CodeIgniterは情報が足りなすぎる。数年も待てない。
あれほど分かりやすいマニュアルはないない
Cakeのマニュアルよりマシなんじゃないの Cakeのは簡潔すぎてマニュアルになってない
情報=マニュアルじゃなくて、使ってる人の事ね
なんか本とかWebも1.2の情報がベースで1.3の情報少ないよね。 非常に困る。で、1.3の本が出始める頃には2.0が出てると。
DooPHPはどうよ?
>>822 リファレンス本が欲しいんだよね。
CakePHPポケットリファレンスが1.2までにしか
対応してないのでほぼ使えない状態となってるのが悲しい。
>>814 デバッグがしにくいのと、変数の型がPHPよりも自由すぎるのが非常に気になる。
>>822 使ってるよ
CIよりは速度は遅いけどCakeよりは十分使える
そういや、なんで findAll() って無くなったの? findAllBy() は残ってるのに
まあなんでもかんでもfindAllするバカが多かったので廃止したんじゃないかね。
>>827 find('all')に統合した方がきれいだし、拡張性も高い。
findAllByは特殊な呼び出し方だからどうしようもないでしょ。
Cakeを使い始めの頃、1.2と1.3の違いを知らずに ぐぐってfindAllを使って動かなくて困ったのも良い思い出 いや良くない思い出、マジ困るんですけど
MySQL の tinyint(1) を booleanとして使ってて、 毎回PHP側で判断するときに (int)$hoge === 1 みたいに毎回intに変換して判断してるんだけどしょうがないのかな?
tinyintじゃなくて、smallintの方が良いよ
複数のモデルに共通する hasMany 設定をビヘイビアで設定しようと思い、setupメソッドに $model->hasMany = array(...); としたんですが以下のエラーがでます。 Notice (8): Trying to get property of non-object [CORE/cake/libs/model/datasources/dbo_source.php, line 813] Notice (8): Trying to get property of non-object [CORE/cake/libs/model/datasources/dbo_source.php, line 838] Notice (8): Trying to get property of non-object [CORE/cake/libs/model/datasources/dbo_source.php, line 841] Fatal Error (256): ConnectionManager::getDataSource - Non-existent data source [CORE/cake/libs/model/connection_manager.php, line 102] ビヘイビア内で hasMany などアソシエーションを設定する方法はないでしょうか?
>>833 $model->bindModel()で出来ると思う。
>>831 tinyintはもし何かの拡張で値が増えた場合小さくて不安になる
コントローラAで、コントローラBのメソッドを使いたいときどうしたらいいんだ? 同じコントローラなら $this->setAction でいけるんだけどな。 なぜこれがやりたいかと言うと、 あるコントローラから、別コントローラのアクションにリダイレクトさせたいんだけど、 変数の値も渡したい。 ただリダイレクトさせると変数が渡らないので、 リダイレクトじゃない方法があれば解決するはずなんだけど、無いのかな?
共通関数作ってオブジェクトで値渡せばいいのでは?
まぁやろうと思えばできるんだけど、 Cake Wayなものがあればいいなと思って聞いたんだ。 別コントローラに行くときにメッセージをビューで表示したい場合とかどうやってるんだろみんな 結構出てくるケースだと思うんだが・・・
ビューに表示ならヘルパーで良いじゃん
>>839 class AController extends AppController {
function add() {
$this->A->save()
$this->redirect('B/view');
}
}
↓AからBへリダイレクトする
class AController extends AppController {
function view() {
$this->set('finish_message', $finishMessage);
}
}
こんな感じで、AからBへリダイレクトするときに、Aから何らかのメッセージを渡したいんだ。
いいってことよ!
$this->Html->link( 'xxx', array('controller' => 'aaa', 'action' => 'bbb' ) );
で生成されるURL
http://www.example.com/aaa/bbb を文字列として取得するにはどうすればいいのでしょう?
viewの他のか所で使いたいのですが
>>845 わかりました
$this->Html->url
ですね
失礼しました...
Authを使ったパスワードをmd5に変更したいのでマニュアルを見たのですが、 「Security::setHash('md5');」と設定しろとありました。 これってどこに書くのでしょうか?
どこでもおk。 before_filter() app_controller.php bootstrap.php などなど
うちは >app_controller.php ここ
CakePHPでCSRF対策ってSecurityコンポーネント使うのがスタンダード? ちょっと使ってみた感じ使いにくかったような気がしたんだけど。 ググると自作してる人もいたりするんだよね。
ダブルコロン
>>851 普通にデフォルトで出力される部分はエスケープされるんじゃないの?
CakeってSQLの特殊文字って自動的にエスケープされるよね?
アスタリスク(*)やクエスチョンマーク(?)のこと? やってくれてるはずだよ
もの凄いくだ質なんだけど、、、 $data = $this->User->findById(1); こういう時の返り値を受け取る変数ってどうしてる? 上の例なら普通に$dataに入れればいいけど、 モデルが複数ある場合とかさどう書いてるのかな?と思ってさ。 $category_data = $this->Category->findById(1); というのもなんか違う気がするし・・・
$user = $this->User->findById(1); $users = $this->User->find('all'); $category = $this->Category->findById(1); $categories = $this->Category->find('all');
>>858 俺もこれで良いと思う事はあるんだが、出力時に
$user['User']['name']
$categories[0]['Category']['name']
みたいになるわけだろ?
「ユーザにユーザ?」みたいな重複した無駄な間隔に襲われるんだよw
まぁ、フレームワークなんてどれもそんなもんだろ 無駄でも分かりにくいより分かりやすいほうが良い
今までindex.htmlのファイルにアクセスされていたのですが、 Cakeに移行したのでindex.phpにアクセスになります。 ただ、以前のURLでアクセスされた場合、ページが表示されなくなります。 index.htmlのファイルを作ってMETAで転送を入れようと思ったのですが、 それも無理でした。何か良い対策方法はないでしょうか?
CakePHP使える人って、人月いくらくらいで雇えるもの? CakePHPでの経験が1年以上という前提で。
マジレスで20万は必要だと思います。
>>863 本気の話、50万出せば結構集まります?
>>864 冗談じゃなければ集まると思いますよ。
それぐらいだせば、PHPの経験5年以上、Cake3年以上は見つかると思います。
>>866 まじですか。募集に向いたサイト、是非教えてください。
ハローワーク
1週間雇われて捨てられるのがオチ
1週間50万なら捨てられても問題ないな
集まった人数で50万山分けだ!
業者を通すと20万になります
俺ならその20万をもらってマッチングサイトに10万で流す
俺、人月80万だけど50万とかありえるの?
メルアドさらしてくれれば、詳細送ります
ガチでぐるなびレベルのサイトをCakeで半年かけて作った 50万だった・・・
実働 半年?
実働
881 :
nobodyさん :2011/06/04(土) 18:26:58.34 ID:+J1aexiq
CakeのViewヘルパー内で$this->Session->writeしたいんですけど やろうとするとエラーになってしまいます。 やり方があるのでしょうか?
>>882 Cookbook見てもwriteメソッドないんだけど。
やり方あるの?
どうしてビューに渡さないの?
とりあえず、ビューヘルパーの中で$this->Session->writeは できないってことでいいのな? それなら$_SESSIONに直接ぶち込むだけだから。 出来るとか思わせぶりなこと書いてんじゃねーよ。
URLでアクセスするとき、例えば example.com/profiles/ にアクセスするとcontroller:profiles、action:indexが実行されるけど、これを example.com/profile/ でアクセスしてもcontroller:profiles、action:indexを実行したい。 profilesだけじゃなくabouts、contacts、worksすべてを単数形でアクセスしても実行したい。 また、example.com/profiles/hoge/のようにactionが指定されていても、example.com/profile/hoge/のようにしたい。 これについて、routes.phpに記述するうまいやり方ってありますか? あればぜひお教えいただければと思います。 よろしくお願いします!
設計を見直すべきだとおもうが、 ClassRegistryつかったらどこからでも参照もってこれる。
ユーザテーブル ・ID ・画像ID ・名前 : 画像テーブル ・ID ・パス : こんなテーブルがあって、 ビューからユーザの画像IDをユーザテーブルから取得して、 画像IDをもとに画像テーブルから画像パスを取得して、<img />で表示 ってしたい。 $this->Hoge->getUserImage($this->data['User']['image_id']); <!-- (HogeはComponent) --> ビューの中から以上のように1ラインで取得できるのが一番使いやすいんだけど、 ビューでテーブルのデータを動的に取るのはMVCに反しているだろうし、 実際Cakeでやろうとするとちょっとレールから外れた方法とらないといけない。
891 :
890 :2011/06/05(日) 18:32:58.67 ID:???
コントローラでユーザデータ配列を foreach でまわして、上記の処理をして ユーザ画像データ配列をつくる(もしくはユーザ配列に画像パスを入れる場所をつくる) そしてそれを $this->set で渡す。 って方法を一番最初に思いついたんだけど、 ユーザ情報は1ページに数十レコード取得する必要がある場合もあり、 これってどうなんだろうなぁと思って質問してみた。 ベストプラクティスはどうするのが良いんだろ?
Cakeは手段であって目的ではない。 お前のやりたい事を実現できる方法を取ればいいよ
hasmanyは使ってる? ユーザーテーブルと、画像テーブルを結合して 取得すればよさそうだけど。
LazyModelを入れてみたんだけど、あまり速くなった印象はない。 これってどう言うときに速くなるの? コントローラーの$usesにモデルを10以上、設定している場合とか?
>>894 速くなる代わりにメモリ馬鹿食いになるらしいからサーバスペックにもよるんじゃない?
モデルの数も少数じゃ体感できないね
>>895 メモリ馬鹿食いって事は、メモリ開放せずにDBのレコードを保持するのかな?
ちょっとその辺の仕組みがよくわからないけど、
あまり有用なライブラリではないみたいだね。
色んなところでお勧めされてるけど。
>>896 馬鹿食いはいいすぎた
それによって今のPCスペックなら
パフォーマンスは向上することがあっても降下することはないよ
CakePHP2.0では正式に採用される有能プラグイン
ま、PCスペックというか鯖スペックが大事だと思うけどな。 俺なんてさくらVPSで使う事多いから、 512MBの鯖で大丈夫なのか?と心配だw
Cakeのフレームワーク通さないで、 単体でモデルをfindで呼び出して配列を取得する事って出来ないかな?
>>900 管理画面ではCake使って
公開画面ではピュアPHPからCakeのモデル読み込みたいんだけど、
シェルでどうやってやるの?
>>901 じゃぁWebサービス組めば良いんじゃない?
なんか話しが噛み合わないなw
>>902 つまり、XMLで出力してAPIみたいにして受けとれってことか?
まぁ、データをDBに保存しているわけだから、
ピュアPHPのファイルにmysql_connect書いてmysql_queryで
情報持ってきて出力するのは簡単だけどさ。
そうじゃなくて、Cakeのfindで得られる配列形式で受け取りたいんだよ。
だから、モデルを単体で読み込めたらいいなっと思ってさ。
>>903 大丈夫、噛み合ってるw
modelを直で使えればと俺も思うが、多分厳しい。
苦労するよりは、WebサービスとしてバックエンドでCakeを使うのが
色々と使い回しが効いて良いと思う。
ちなみに今フロントは.netで作って、DBアクセス周りはCakeでWebサービス、
という構成でシステム作成中。
>>904 なるほどな。やっぱりバックエンドで使う方が良いよな。
今フロントもCakeで作ってるんだが、
単なるブログのようなものでも重い重いw
サイトの一部だけCakeにする場合、Apacheウェブルートにcakeをもってきて 非Cakeのファイルをwebroot以下に置くのと、 Apacheウェブルート下の特定のディレクトリにCakeを置くのどっちがいいかな? 後者のほうが融通はきくと思うんだけど。
俺は後者だな。君の言うように融通が利くし。
ショッピングサイトとかで、注文のデータを保存するとき、 別のデータ(例えば注文と商品を結びつけるレコードなど)を同時に保存するとき、 両方がバリデーション通ったときのみ、両方を保存する、 としたい場合どういうコード書いてる? 今悩んでいるケースは、 別のデータが、前に保存した別テーブルのIDを必要とするので、ややこしい。。。 テーブルA ・ID ・フィールド1 テーブルB ・ID ・テーブルAのID このような感じ。 if ($this->Model1->validates()) {} if ($this->Model2->validates()) {} こうやって、両方のバリデーションが通ることを確認したあとでやりたいんだが、 上述したとおり、Model1のIDがModel2で必要になるとしたら、 どういうコードをかいてバリデーションさせたらいいんだろう?
普通にsaveAllすればいいのでは。
「CakePHPは重いからCodeIgniter使え」って書かれてるのみて CodeIgniterの公式みてたんだが、オレオレFWと大差ないな。 他のフレームワークを悪く言うつもり無いんだが、 速い理由わかってガッカリしたよ。何かもっと特別なやり方してると思った。
んまあ適材適所だろうね。使えるものの幅は広くても損しないし。 ciで良い時もあるし、ciじゃめんどくさい時もある。
それはそうなんだが、わざわざ新たなFW覚えるほどでもないなっと。
Cakeは小規模向きって良く解説されてるけど、
小規模ならそれこそオレオレでいいわけだ。更新もあまりないだろうし。
けど、ポータルサイトとかモデルが50も100もあるような場合、
更新性や他者との連携に備えてCakeみたいな有名FWが活用できる。
CIのメリットは「高速・軽量」だろうけど、Cakeの代替には向かないなと。
それならオレオレのリファレンス作って共同作業者に渡した方が
よっぽど無駄が省けるんじゃないか?っと思い、
>>910 の結論に達した。
Lithiumの情報少ないなぁ・・・ いつ移行するか悩む。
Cakeのバージョンうpしたいんだけど cake以下だけ上書きすればいいの?
そうだよ
>>899 >単体でモデルをfindで呼び出して配列を取得する事って出来ないかな?
これでできたけど。
$_GET['url'] = 'favicon.ico';
require_once('path_to_app_dir/webroot/index.php');
// and then for example:
$PostModel =& ClassRegistry::init('Post');
print_r( $PostModel->find('all') );
http://osdir.com/ml/CakePHP/2009-08/msg01425.html
>>916 なぜか
$_GET['url'] = 'favicon.ico';
を入れないとビューまで取得されたけど、
たぶん、$_GET['url']にデータ入れないといけないとか
そういう決まりあるのかな。
何にしろ、これが出来たらかなり可能性が広がる。
凄く助かった。情報ありがとう!
>>916 俺もこの記事読んだが
require_once('path_to_app_dir/webroot/index.php');
これをやっている時点で、パフォーマンス的には
あまりメリットが無いんじゃないか?
そう言われればそうだな。どういう内部処理してるんだろ? モデル操作以外はすっ飛ばしているなら パフォーマンス的に早くなるのも理解できるが・・・
>>909 saveAllって片方がinvalidateになったら両方saveされないの?
dbがinnodbならされない。
>>921 ほう。。。あんまりその辺の知識がないなぁ。。。
CakeのAPIとか見てても付かない知識なのかな
>>916 index.php読むくらいならShellDispatcherつかえばいいじゃん。
>>922 APIというかマニュアルに書いてあるけど。
まあMySQLのトランザクションに関しての知識はCakeとは別だけどね。
926 :
nobodyさん :2011/06/18(土) 13:26:22.69 ID:MtjEaHV0
1.3.7使ってるんですが core.phpのCacheの設定でMemcacheを使おうとするとエラーが出てしまいます。 エラーのメッセージからInflector::slugを使用しているのが問題みたいなんですが、 なにか回避する方法ありますでしょうか? もしくは現在の安定版(1.3.9)を使うべきですかね?
安定版使ってみたら?
928 :
nobodyさん :2011/06/18(土) 13:52:16.37 ID:FmefRTLq
質問ですが、cakeのコントローラーにmysqlのクエリ文を書くのって普通ですか? クエリ文はモデルとかに書いた方がいいですか?
そもそもクエリってあまり書かないからな。 書きたいならモデルが良いと思うけど。
930 :
nobodyさん :2011/06/18(土) 15:46:04.92 ID:FmefRTLq
>>929 クエリって
$this->Model->find('first',array('conditions'=>array('id'=> 1));
ってやつですよ。
$query = "select * from user where id = 1";
mysql_query($query);
ってやつじゃないですよ
なんのこっちゃ
SQLを直接書きたいのではない、ってこと?
>>930 お前質問ずれてるよ。
てか、$this->Model->queryってのがあるの知らないのか?
俺はこのことを言ってるとばかり思ってたんだが。
>>930 どこでも書けるけど、modelに書くべきだと思う。
うちはcontrollerにSQL書き散らかしてしまって、本来のcontrollerから離れてしまった。
保守では困らないけど純粋なMVCモデルから離れてしまったと反省している。
>>930 viewに渡すデータが一行で取得できるならコントローラ。
アソシエーションの設定、findに渡すオプションで対応できないデータを作る必要があるなら、
そのデータを作成するファンクションをモデルに定義。
936 :
nobodyさん :2011/06/19(日) 01:36:40.13 ID:FFWzWxUl
CakePHPをSJIS環境で使ったらやばいかね? CacheをMemcacheにしてるんだけど SESSION周りがすげー怪しい動きしてるんだけど。
threadedでツリー構造のデータのうち、 親IDを削除したら子IDも削除されるようにしたいのですが、 Cakeの機能だけで削除できるのでしょうか? やはり、一旦threadedでデータを取得して 1つずつ再帰して削除するしかないのでしょうか?
>>936 appまでの途中のパスに日本語使ってるとか無い?
>>937 treeビヘイビアを使えば、親のIDを指定してModel->delete()で子も消せるよ。
ダルマ落しみたいに中抜きしたい時は、 Model->removeFromTree()で。
>>939 treeビヘイビアというのがあったんですね。
今まで自作してツリーをカスタマイズしてました・・。
大変参考になりました。ありがとうございました。
都道府県のDBってどうしてる? 1~47まで都道府県のテーブル用意して、住所などが必要なテーブルでそのIDを設定するのが 本来の正しい設計かもしれないけど、 実際Cake(PHP)でやるとめんどくさいよね。毎回selectが増えるだけのような気がするし。 VARCHARで実装してしまうのはだめかな?
lithium、0.9.9の次、1.0じゃねーのかよw 公式リリースはまだ先なのかね?
>>942 面倒だったら日本郵政グループのKEN_ALL.CSVでマスターテーブル1つ作っちゃえばいいのでは?
>>942 フォームの選択の時は、bootstrapに書いてるな。
Configureに入れて。DBでは管理しない。
>>944 郵便番号から住所検索するとき、それ使ってるけど
ちょっと思うのが気になるよね。10万件ほどあるから当然なんだけど。
思う→重い CakeでAjaxから読み込むとき、ちょっと重いんだよな 出力されるまで時間がかかる。
まだこんな時代遅れなの使う奴が存在してたのか
時代の最先端はどこですか?
文句言う前に時代後れじゃないFWを教えてください
やっぱりJavaのSpringだろ。 フレームワークなのにそのフレームワークを使って 書いたコードはフレームワークに依存しない。 という優れもの。
ちょっと何言ってるか分からないです
phpでおながいします
cakeで書いたものは移植性がない
フレームワークの変更はプログラミング言語が変更されるくらいのイメージ
もしかしてsetActionで別のアクション呼んでしまったら、 error-messageは出力されなくなるのか? actionA() { if ($this->validates()) { $this-Model->save(); } else { $this->setAction('actionB'); return; } } ↑このような状況で、actionBに飛んでactionBのビューが表示されたときに、 フォームのinputの下にerror-messageがでない。 ちなみに、actionAとBは同じフォームを中で呼んでいて(element)、Aを表示させるとerror-messageはちゃんと出る。
hasMany関係のデータを削除するとき、どうしてます? ModelにhasManyを書いて、dependentをtrueにして削除するか、 削除時に各テーブルをforeachで回してdeleteするか。 自分はhasManyをModelに書かずに必要なときだけ bindModelしています。
そうですか
そうですよ
PaginationHelperで出力するリンクって 設定かでquery string形式の(?page=1みたいな)リンクに 変更できますか? 結局PaginationHelperのソース書き換えて対応したんですが 書き換えずに済む方法があれば方法を教えて欲しいです。 バージョンは1.3です。
Lithium 1.0は11月リリースの予定らしい。 symfony2に浮気しようかな。 他にPHP 5.3ベースのフレームワークってある?
どうして5.3ベースが良いの?
もはや5.2以前のシンタックスがタルい。
でも、5.3以前の鯖も多いよね
5.3以降と以前で主に何が変わったの?
cakephpで3年くらいやったけど 俺俺フレームワークの方が開発速度が速い。 そしてphpだけしゃ武器にはならんから object-cを習得中。 先を見越せばphpのフレームワークなんて、時代おくれ。
とバカが申しております
>>967 俺もCake風のオレオレフレームワークを作った
どうせMySQLしか考慮しないし、速度の遅さは致命的だからね。
キャッシュ作っても新たにデータを投稿する度に削除する必要があるし、
速いに越した事はないだろう。
メンテする身にもなれや
自分がメンテする場合は?
会社でやるんじゃなくて個人でやるんならいいんじゃない? 会社ならやめてほしいな。 お前がずっと責任とれるはずもないんだから
会社でやってもドキュメント作ればいいじゃん。 Cakeのコーディングすら、個々のPGで癖があるのに
>>973 多分他人が作ったオレオレフレームワーク触ったことないんだろうな。
ものすごい苦痛だよ。
フレームワーク自体のバグは誰がなおす?
そのフレームワークの思想は大多数にウケるのか?
俺は生PHPが好き
自分が一年前に作ったオレオレフレームワークだっていじるの苦痛だもんな。
だから、他人のコードはオレオレじゃなくても苦痛だっての
俺ベーマガ世代だから他人のコード読むのなんて余裕
バーチャルフィールドで登録数を表示する事って出来るのでしょうか? ・Userモデル id,categories_id,name ・Categoriesモデル id,name として、「そのカテゴリに何人のユーザが登録しているのか?」 をバーチャルフィールドとして取得したいと思います。 バーチャルフィールドで書ける場合、書き方を教えてください
>>980 UserがbelongsTo Categoryならば、
Categoryにuser_countフィールドを作れば自動でカウントしてくれるよ。
>>981 var $virtualFields = array('user_count'=>'COUNT(User.id)');
を、Categoryモデルに書いたらカウント数を取得できました。
ありがとうございます。
cakephpで3年くらいやったけど 俺俺フレームワークの方が開発速度が速い。 そしてphpだけしゃ武器にはならんから object-cを習得中。 先を見越せばphpのフレームワークなんて、時代おくれ。
言語がどうのって考えてる時点でセンスないからやめたほうがいい
センス無くても仕事は出来るよ
$this->set('items', h($items)); コントローラで上記のように毎回h()でエスケープするのが面倒だし、 エスケープし忘れも発生してしまいそうだから、 自動でsetした値をエスケープしたいんだが、どうしたらいい?
え?エスケープって既にされてなかったか?俺の勘違いかしら・・・
エスケープはViewの出力する部分で使うべきだよ
>>987 されてるの?
俺はされてないぞ
>>988 例えば
ビューで
名前だすときは、
echo h($user['User']['name']);
住所出すときは
echo h($user['User']['address']);
ってやるってこと?
>>986 の方法のほうが楽なような・・・
エスケープって自動でされた覚えが俺もあるんだけど、気のせいかしら
990 :
nobodyさん :2011/06/30(木) 18:22:21.93 ID:/bA75Cwr
DBってよいのでしにない性別(1:男、2:女)と年代モデル(1,10代,2,20代・・・)をつくろうとしているんですが、(DBを使うまでもないデータ 普通のdaoと同じようなディレクトリ&クラス名で作ってしまょうか? SeibetuModel NendaiModel みなさんどうされてますか?
日本語でおk
慣れない日本語を使って書き込んでくれてるんだろうから答えてあげたいけど、 ごめんわからんw
>>961 doophp,codeigniter,zendはphp5.3に対応してて警告もエラーも出ない
PEARとかのクラス名とCakeのコアクラスが衝突しちゃう場合 どう対応してますか? ソース修正して、クラス名が出てくるところ全部書き換えるくらいしか思いつかないんですが・・・ Cakeはコアクラスにプリフィックス付いてないのがツライ・・・
そのために主要フレームワーク開発者が集まって議論したじゃないか 2.0が出るまで待つしかないだろ
>>990 テーブル、モデルとも作らない。
bootstrap.phpに
$GLOBALS['masters']['sex'] = array(1 => '男', 2 => '女');
みたいに書いてる。
$GLOBALS?? 俺は、bootstrap.phpに Configure::write('Masters.sex'array('1' => '男', '2'=> '女')); って書いてるけど・・・
そういう意味だったのか。君たちすごい。 enum / set が使えれば良いのになって思う事はあるな。mysql限定になっちゃうけど。
1000取る人次スレ立ててから取ってくれ
やなこった
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。