【PHP】フレームワーク CakePHP 11ホール目【v1.3】
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2011/02/16(水) 21:52:35ID:zCTGjUMqCakePHPから派生したLithium(li3)も専スレできるまではここでどうぞ
質問するときはCakePHPのバージョンを書きましょう
※sage推奨
※質問時もsageること
※他フレームワークとの比較等はスレ違いです
テンプレは>>1-5くらい
■本家
http://www.cakephp.org/
APIドキュメント
http://api.cakephp.org/
the Bakery
http://bakery.cakephp.org/
CakeQs
http://cakeqs.org/
CheatSheet (PDF)
http://cakephp.org/files/Resources/CakePHP-1.2-Cheatsheet.pdf
github - cakephp
http://github.com/cakephp
■日本語公式
http://cakephp.jp/
フォーラム
http://cakephp.jp/modules/newbb/
cookbook(マニュアル)
http://book.cakephp.org/ja
0514nobodyさん
2011/04/06(水) 22:38:28.84ID:8sZZCO1iCakePHPは複合キーに対応していないとのことですが、
別に複合キーのテーブルのモデルでも
$Controller::primaryKeyに設定できないだけで、
モデルのfindメソッドとかは使えるし、
特に問題ないのかなーと思ってしまうのですが、
どのような場合に困る(対応していない)のか
馬鹿な俺にでも分かるように教えてもらえませんか?
0518nobodyさん
2011/04/07(木) 00:31:02.97ID:???カラム名どんなのがあるか最初に調べに行くのなw
そんなのModelに定義するようにすりゃーいいのに。
速度より使いやすさを取ったか。
0520nobodyさん
2011/04/07(木) 01:29:37.39ID:???ググってもこれと言った方法がありません・・。
Windows上でシェルのプログラムが正しいかテストする方法はないのでしょうか?
0521nobodyさん
2011/04/07(木) 02:46:08.85ID:???小リナックスかアンドリナックスを入れる
0522nobodyさん
2011/04/07(木) 02:54:26.99ID:???ちゃんとCLIでphpが動くように設定しておけばうごくんじゃね?
Winで開発してないから、断定的なことは申し上げられないが。
0523nobodyさん
2011/04/07(木) 03:29:37.72ID:???0524nobodyさん
2011/04/07(木) 03:35:45.09ID:???コマンドプロンプトで
php C:\htdocs\cakephp\cake\console\cake.php -app app test
みたいなコマンドで普通に実行されました。
3時間ぐらい悩みましたが、問題なく出来そうです。ありがとうございました。
0525nobodyさん
2011/04/07(木) 04:32:01.56ID:???0526nobodyさん
2011/04/07(木) 13:28:09.21ID:???0527nobodyさん
2011/04/07(木) 14:38:28.18ID:???0528nobodyさん
2011/04/07(木) 14:43:49.48ID:???0529nobodyさん
2011/04/07(木) 15:24:13.83ID:???教えてやりゃいいことだと思うんだが
0532nobodyさん
2011/04/07(木) 16:30:13.31ID:???日本のマの平均給与が低いわけがわかった
0533nobodyさん
2011/04/07(木) 17:02:38.88ID:???0534nobodyさん
2011/04/07(木) 19:10:52.62ID:???B「え?いや・・・え?これが?」
A「お前本当に馬鹿だな。全てがお前と同じ人間ばかりかよ。
これだからプログラマ脳だと言われるんだ」
C「わからないじゃなくて、分からない奴もいるって話だろ。お前がルールの全てか。」
D「「漢字読める俺マジレベル高いw」←wwwwwww」
B「・・・」
0535nobodyさん
2011/04/07(木) 19:54:40.69ID:???つぎに誰がそのソースみるのかわかったもんじゃない。
0536nobodyさん
2011/04/07(木) 20:00:22.84ID:???A「ソースのコメントに漢字使うんじゃねえボケ!読めねーだろうが!」
B「わかりました。Aさんの仕様に合わせます」
こう言えばあっさり終了するわな。どんだけコミュ力ねーんだw
自ら関係をややこしくしてるのな
0540nobodyさん
2011/04/07(木) 22:05:38.14ID:???0541nobodyさん
2011/04/07(木) 23:13:04.80ID:???0544nobodyさん
2011/04/08(金) 05:06:31.14ID:???少し見てみたら、ものによっては完成度低いのもあるっぽいんだけど、
沢山ありすぎて全部みて使えるの探すのつらす。
0546nobodyさん
2011/04/08(金) 11:13:22.78ID:???0547nobodyさん
2011/04/08(金) 13:41:36.04ID:???0548nobodyさん
2011/04/08(金) 13:46:25.03ID:???0550nobodyさん
2011/04/08(金) 13:49:24.40ID:???0551nobodyさん
2011/04/08(金) 16:19:21.29ID:???find('all', array("test"=>"test");
で、ひとつもヒットしないはずなのに
なぜか全てのレコードの要素がヒットしてしまいます
なぜヒットしてしまうのか検討がつきません
どなたか詳しい方いましたら教えていただけませんか。よろしくおねがいします
読解力ないからよくわからんけど、
Cakeが最新なら引数の指定がすでにちがう。
んでcore.phpでdebugレベルあげたらSQLや件数が確認できるから
それで見当つくんじゃないかな。
0553551
2011/04/08(金) 18:02:13.57ID:???気分を害した方いましたらすいません
>>552
ありがとうございます。引数を調べたところ無事できました。
参考にしている本の内容ではfindAll()メソッドを使っていて、
そのメソッドが新しいバージョンだと使えないみたいで
findでも同じ引数でできるものかと勘違いしてたみたいです。
0554nobodyさん
2011/04/08(金) 21:00:03.96ID:???文字コードってdatabase.phpで設定するやつ?
encoding=utf8ってやってもupdateしてくれないわ
これどういう条件だとinsertじゃなくupdateしてくれんだろ
0557nobodyさん
2011/04/09(土) 00:42:48.52ID:???各コントローラ共通の関数
これらは作れるけど、
各ビュー・コントローラ共通の関数の置く場所って用意されてないよね。
結構用途として必要な気がするけどなぁ
0558nobodyさん
2011/04/09(土) 01:14:29.30ID:???この質問たびたび見るけど
cakephp/libs or cakephp/vendors
だからな。
0559nobodyさん
2011/04/09(土) 05:15:53.72ID:???やはり自民党清和会の下に結集し、日教組を壊滅させることでしょうね。
日教組の教師に「労働者の権利」などという左翼思想を吹き込まれた連中が義務も果たさずに
サビ残は嫌だ、有給取らせろなどと権利ばかり主張しています。
あとは残業代を要求して裁判を起こしてるような腐った輩を社会全体で徹底的に叩くことでしょう。
0561nobodyさん
2011/04/09(土) 14:22:34.77ID:???自作の共通関数をlibとは考えられないな〜。
0562nobodyさん
2011/04/09(土) 14:26:08.69ID:???/model配下には各テーブルに対応したvalidationなどを作成すると思うのですが、
実装者が存在しないテーブルのmodel名でmodel.phpを作りました。
要件的に「動けばOK」なので特に問題は無いのですが、Cakeの規約に反しているように感じています。
テーブル:
files(web上にアップロードしたファイルのパスやファイル名を保持する。ここでDL可としたファイルのみ、ダウンロードなどが可能)
実装:
files.phpにはvalidation。upload機能の場合のみ、upload.phpを使用。
個人的にはfiles.phpにすべて記述すべきと思ったのですが、どうでしょうか。
0563nobodyさん
2011/04/09(土) 14:53:58.71ID:???vendorsは廃止になってないよ。
以前は、vendors/cssやvendors/img、vendors/js にファイルを置くと
webdir配下に置いてあるのと同じように使えてたけど、それが廃止になっただけ。
0565nobodyさん
2011/04/09(土) 15:00:10.04ID:???0566nobodyさん
2011/04/09(土) 15:02:11.37ID:???その実装者の実装みてないから、良い実装かどうかはなにもいえないけど、
モデルを作ったことに関しては問題ないと思うよ。
この辺を読むとなにか分かるかもね。
http://www.1x1.jp/blog/2008/04/cakephp_model_6misinformation.html
http://d.hatena.ne.jp/hiromi2424/20101122/1290379655
0567nobodyさん
2011/04/09(土) 16:44:49.74ID:???>2. DBを使わないといけない(DB操作が無いと使えない)
なるほど。
テーブルに直結していなくてもいいのですね。controllerの肥大化は確かにまずいですね。
0568nobodyさん
2011/04/09(土) 20:07:55.18ID:???コントローラのメソッドの引数が バリデーションに引っかかると消えてしまうので悩んでいます。
http://localhost/lists/additem/7
↓ バリデーションに引っかかると
http://localhost/lists/additem
cake bake で作られた edit メソッドではバリデーションに引っかかってもちゃんと引数を引き継いでいるんですが、イマイチ仕組みがわかりません。
どの辺りを調べれば良いかなど、アドバイスをお願いします。
0569nobodyさん
2011/04/09(土) 20:13:14.37ID:???よくわからんけど、URLが変化してるってなら、リダイレクトしてんじゃないの?
遷移・リダイレクトなしにURLが変化する事は流石にないし。
というかCakeがどうこうできる部分でもない。
0570nobodyさん
2011/04/09(土) 23:04:19.28ID:???なに、IDってauto_incrementじゃないとUPDATEできないの?
それ問題だろ。マジで。
0571nobodyさん
2011/04/10(日) 00:14:09.48ID:???Tag hasMany Postの関係のモデルがあるのですが、
Tagのうち、Postと結びついているもののみを取得したい場合どのように検索するのが一番よいのでしょうか?
0572nobodyさん
2011/04/10(日) 00:18:50.03ID:???form->createのarrayに'url'を追加してみたらどうでしょう。
同じ問題を見たことがある
0573nobodyさん
2011/04/10(日) 01:30:39.63ID:???Tag hasMany Postって変わった構造だな。
まぁそれは置いといて、Tag側のテーブルにカラム追加しないと使えないけど、
belongsToアソシエーションのcounterCache使えば?
Postモデルの$belongsTo = array('counterCache' => true) して、
tagsテーブルにpost_countフィールド作れば良かったはず。
詳しくはぐぐれ。
0574nobodyさん
2011/04/10(日) 02:04:25.16ID:???TagとPostの名前を例に使ったのはちょっと不適切でしたね。
counterCasheの存在を知らなかったので、調べてみます。
ありがとうございました。
0575nobodyさん
2011/04/10(日) 18:52:08.74ID:???また一人で開発しようとする場合は何人日かかります?(デザイン抜きで)
そもそも、その規模のものはcakephpでは運用無理ですか?RoRとかのほうがいいのかな?
0580nobodyさん
2011/04/10(日) 21:04:02.20ID:???規模なら結構作れると思うよ。俺も似たようなSNS作ってるし。
アクセス増加はキャッシュでどうにかなると思う。
Cakeのじゃなくてmemchachedを使うとか。
0581nobodyさん
2011/04/10(日) 21:44:52.07ID:???CakeってDBのレプリケーションに本体レベルで対応してなよね?
Cakeは中・小規模向けだと思うから、mixi規模は無理じゃないかな。
機能だけそろえるってなら話は別だけど、
シンプルなSNSから発展していろんな機能がついてるから、
作るのはかなり時間かかると思うぞ。
開発者の能力にもよるだろうけど、普通に3桁人月じゃないかな。
0582nobodyさん
2011/04/10(日) 23:46:27.64ID:???0583nobodyさん
2011/04/11(月) 02:22:00.62ID:???コンテンツの事まで言うと、
アバターなんかも3Dで作った物をgifに変換して・・・みたいにしてるみたいだし
cakeなんかで作る部分とは違う技術が必要だよね。
0584nobodyさん
2011/04/11(月) 03:36:02.16ID:???てか、Cakeで生成するファイルでDB分けられるんだから、
そういう負荷対策出来ると思うんだけど。
0585nobodyさん
2011/04/11(月) 10:36:06.39ID:???List, SubList にそれぞれ no という項目あって、それぞれを no 順で取得したいのですが、
List から find('all') で取得した場合 List は no 順になっても SubList が id 順になってしまいます。
以下のように取得して View に渡しているんですが、いいやり方ありますでしょうか?
$this->set('lists', $this->List->find('all', array('order' => array('List.no, List.id DESC'))));
0586nobodyさん
2011/04/11(月) 11:13:07.76ID:???0587nobodyさん
2011/04/11(月) 16:45:08.99ID:???http://log.ryti.ch/items/view/3773
0588nobodyさん
2011/04/11(月) 18:51:32.41ID:???結局SQL書いてるわ....
0589nobodyさん
2011/04/11(月) 18:52:42.64ID:???それはやってみたんですが、
$this->List->find('all', array('order' => array('ListSub.no, ListSub.id DESC')
とすると ListSub なんてないと怒られてしまいます。
0590nobodyさん
2011/04/11(月) 19:03:42.57ID:???array('order' => 'List.no DESC, ListSub.id DESC')
か
array('order' => array('List.no' => 'DESC', 'SubList.id' => 'DESC'))
のどっちかにしろって話じゃないの?
0591nobodyさん
2011/04/11(月) 19:29:41.23ID:???何度もごめんなさい。
書き方変えてみたけどダメでした。
List から id はとってこれるけど、
$this->List->find('all', array('order' => array('List.id' => 'DESC')
こうすると ListSub.id なんてカラムはないよと言われるんです。
this->List->find('all', array('order' => array('ListSub.id' => 'DESC')
SQL Error: 1054: Unknown column 'ListSub.id' in 'order clause'
List は ListSub を hasMeny、ListSub は List を belongsTo でそれぞれ関連づけています。
まだモデルの仕組みなどわかってない部分が多いので、ここを調べろなどのアドバイスでもお願いします。
0592nobodyさん
2011/04/11(月) 20:45:04.42ID:???悩むくらいならそれもありだと思う。
ナンバリングのために、あるテーブルにsaveした場合の処理は、
sqlでUPDATE文書いた。
0593nobodyさん
2011/04/11(月) 21:19:28.81ID:???たぶんやりたいことは
this->ListSub->find('all', array('order' => array('ListSub.id' => 'DESC')
なんじゃないか
0594nobodyさん
2011/04/11(月) 21:41:28.44ID:???コントポーネントの数がすごいことになった。
0596nobodyさん
2011/04/11(月) 23:27:03.36ID:???0597513
2011/04/11(月) 23:27:39.13ID:???親切なレスありがとうございます。
パーミッションは問題無くて、単に拡張子が大文字になってただけだった。
すぐにお礼レスしたかったけど、規制かかって書き込めず、忘れてしまってた。
0598nobodyさん
2011/04/12(火) 00:32:09.98ID:???数えたら50〜60ぐらい。たいしたことなかった。
コントローラも同じくらい。
ゲームはロジックが複雑だから、コントローラにごちゃごちゃ書きたくなくてコンポーネントに書いた。
0599nobodyさん
2011/04/12(火) 01:03:22.27ID:???Cakeだと重くね?
0601nobodyさん
2011/04/12(火) 02:05:11.25ID:???0602nobodyさん
2011/04/12(火) 02:31:07.71ID:???0603nobodyさん
2011/04/12(火) 10:52:30.89ID:???フレームワークを変えても重いのはあまり変わらない事が多い気がする。
で、対処の方法もキャッシュ効かせたりとかで、やることも変わらない。
0604nobodyさん
2011/04/12(火) 11:41:59.99ID:???それでcakeが悪いとか…頭ごなしに批判する奴は大抵こういうふうに理解が浅いよな。
0605nobodyさん
2011/04/12(火) 12:01:58.45ID:???それにFW使ったら重くなるのは当然だろ。
0607nobodyさん
2011/04/12(火) 12:52:39.39ID:???だいたい1コントローラあたり数個使ってる
0608nobodyさん
2011/04/12(火) 17:08:21.81ID:???fixtureの$recordsに配列でデータを記載しておくと、テストごとにこの$recordsの値で
テーブルが初期化されます。
この$recordsをテストごとに切り替えたいのですが、どのようにすればよいでしょうか?
たとえばtestAは$records、testBは$records2を使う、といった具合です。
0609nobodyさん
2011/04/13(水) 05:21:58.13ID:???自分でつくったのは、 var $components で読み込まないと使えない。
bakeで自動作成されたコードはどこでSession読み込んでるんだろう??
0610nobodyさん
2011/04/13(水) 11:38:58.52ID:89duiIHJerror404をオーバーライドすると、HTTP/1.1 200 OKが帰ってくるようになる。
app/app_error.php
<?php
class AppError extends ErrorHandler {
function error404($params) {
extract($params, EXTR_OVERWRITE);
$this->error(array(
'code' => '404',
'name' => 'Not found',
'message' => sprintf(__("The requested address %s was not found on this server.", true), $url, $message)
));
$this->_stop(1);
}
}
?>
このオーバーライドしたerror404を消したり、
parent:error404($params);
とかにすると、404 Not found が帰ってくるようになる。
バグかな?
関数の中身は、
cake/console/error.php の error404 をまるまるコピーしてます。
0611nobodyさん
2011/04/13(水) 11:51:22.60ID:89duiIHJ<p class="error">
<strong><?php __('Error'); ?>: </strong>
<?php printf(__('The requested address %s was not found on this server.', true), "<strong>'{$message}'</strong>"); ?>
</p>
こうなってたから
$this->cakeError('error404' array('message' => '削除されてるよ'));
みたいにやってた。
HTMLのmessageはurlのことで、
PHP側のmessageはステータスメッセージのことなのな。
ややこしすぎワロタ
0612nobodyさん
2011/04/13(水) 23:16:26.44ID:???UPDATE時に、同一テーブルの現在の値を取得する必要ができました。
model.php内で this->$date とやってももちろんダメでした。
sqlを書いてクエリーとして得た結果をarrayに代入することで要件は満たせたのですが、
何かもっと良いスマートな方法は無いでしょうか?
0613nobodyさん
2011/04/13(水) 23:28:39.98ID:JM0N9TIZ複数のバリデーションをかける場合、
バリデートする順番を指定したいのですが、
できますでしょうか?
例えばログインIDに対して半角英数チェック・文字数チェック
・独自バリデーションの3つをする場合で、
独自バリデーションではDBに値を見にいって実際に存在するかを
チェックするとします。
その際に半角英数チェックと文字数チェックの前に
独自バリデーションが走ってDBにアクセスしに行っちゃうと
SQLエラーになってしまいますよね。
その他にもバリデーションに優先順位を付けたいと思う場面って
多々あると思うんですが、そのような方法があれば教えて下さい。
■ このスレッドは過去ログ倉庫に格納されています