1read 100read
2013年02月WebProg12: 【PHP】フレームワーク CakePHP 15ホール目【v2.2】 (297) TOP カテ一覧 スレ一覧 2ch元 削除依頼
ギコタクの「だから逝ってないでしょ」出張所 (413)
せっかくだからPHPで掲示板作ってみませんか? (345)
[基地外]osCommerce系[隔離スレ] (951)
Perl書くのにどんなエディタ使ってる? (851)
実力主義のCGIスクリプトは? (286)
組み込み型全文検索エンジンSenna (269)

【PHP】フレームワーク CakePHP 15ホール目【v2.2】


1 :2012/12/04 〜 最終レス :2013/02/06
CakePHPは、Ruby on Railsの概念の多くを取り入れた、Rails流の高速開発とPHPの機動性を兼ね備えたフレームワークです
CakePHPから派生したLithium(li3)も専スレできるまではここでどうぞ
質問するときはCakePHPのバージョンを書きましょう
※他フレームワークとの比較等はスレ違いです
■本家
http://www.cakephp.org/
APIドキュメント
http://api.cakephp.org/
github - cakephp
http://github.com/cakephp
the Bakery
http://bakery.cakephp.org/
CakeQs
http://cakeqs.org/
Issue
http://cakephp.lighthouseapp.com/dashboard
CheatSheet[1.2] (PDF)
http://cakephp.org/files/Resources/CakePHP-1.2-Cheatsheet.pdf
■日本語公式
http://cakephp.jp/
フォーラム
http://cakephp.jp/modules/newbb/
cookbook(マニュアル)
[2.x] http://book.cakephp.org/2.0/ja/index.html
[1.3] http://book.cakephp.org/ja
前スレ
【PHP】フレームワーク CakePHP 14ホール目【v2.1】
http://kohada.2ch.net/test/read.cgi/php/1335859124/

2 :
前スレ埋まりそうなので建てた
リンクの順番を変更したり2.x系のマニュアルを追加したりした
テンプレらしきものは見当たらないのでこれ以上何もしない
独断でやった
反省はするが後悔はしない

3 :


4 :
2.3で、find('first')でデータが空だったときにnullでなく空arrayで返ってくるようになったのが
地味に痛いのだが、俺だけ?

5 :
そうなん?
empty とかでチェックしてたから気が付かんかったけど、
なんでそんな仕様変えたりするんかな。

6 :
cakeの複数形って何のためにありますか?
機能的にはなくても問題ないですよね?

7 :
コンピュータはアングロサクソン文化。
それに異を唱えたところで無駄な抵抗。

8 :
>>5
find('all')の挙動とか考えると、戻りがarrayで統一されるのは良いことなんだけどね。
適切に判定するよう、2.3に合わせてソースを修正中。

9 :
ってか、まだRC-1だよね?

10 :
RC-1だろうが、最新を追いかけておけ。

11 :
何目線?

12 :
2.2.2だけどShellが動かない、検索してみてもどれが正しいのかルールが変わりすぎ
app\Console\Command\MyShell.php (mainだけの空ファイル)
path通ってて、app\Console\Command>cake my

Error: Shell class MyShell could not be found.

13 :
app/ ディレクトリに移動
>Console\cake my

14 :
いや、ちょっとまった。
そのエラーは cake.php の設定ミスだ。

15 :
いややっぱ違うか、実行ディレクトリの間違いか

16 :
すいません app\Console>cake my
で実行してます、どっちも試したけど…

17 :
ちなみに MyShell はちゃんとAppShellというか、CakeShellクラス継承してる?

18 :
>>17
下記のとおりです
class MyShell extends AppShell
{
public function main() {
}
}

19 :
んー、おかしいな。
Console\cake
って叩いて
-app:

[app]
を確認してみた?
まだなら一度やって報告してみて

20 :
>>18
-app どこかで見かけたけど見つからない
cake -app:xxx my   cake -app:[xxx] my
では動かなかった
Cakeの外からphpで呼ぶしかないか…

21 :
え?
単に
Console\cake
を叩くだけだよ。
んで、基本情報吐いてくれるからそれを見て確認してってこと。
Current Path:
の下に
-app:
っていうのがあるでしょ?
そこに
-app:app
ってなってればいいんだけど、そうじゃなければ何らかの理由で別の場所に読みに行ってるから。
あと
Available Shells:
の下に
[app]
っていうのがあるでしょ?
その右に使用出来るコマンドがカンマ区切りで並んでる。
そこにもし my ってのがあったら
Console\cake my
で呼び出せるはず。
まぁ、多分そこには表示されてないんだろうけど。一応確認してみて。

22 :
>>21
-app:Console

Available Shells:の下は
[CORE]
の横には my はないです

23 :
-app:Console
はい、ダウト
cake.php の設定ミスだ

24 :
いや違うわ。
お前、 Console ディレクトリにいるだろ!

25 :
>>13 をちゃんと読んだんだろうな

26 :
しまった、 >>16 ですでに間違いが書かれてた (´・ω・`)
俺が未熟だった orz...
悪いのは全て俺だ。。。

27 :
>>24
そうでした、app/にて、エラーが出ないで無事通りました。
大変お世話になりました、有難うごさいます。

28 :
>>26
いやネット上に1.3とかの情報がゴチャゴチャになってる状況なのもやっかいで
DirectX8と9やActionScriptの2.0と3.0とかも検索してソース見てると
混乱したのを思い出します。
cake.batの使い方がうまく伝わらない所が問題かなと思います。
丁寧なご指導有難うございます。

29 :
2系しかやってないからだけど、マジで1系の情報が強すぎてうざい

30 :
1系の情報を全部2系に書き換えて解説するブログをやれば人気出るかもしれないぞ

31 :
検索するときに CakePHP2 とかわざわざ書かないとフィルタかからないから意味ない
と言うよりも、キーワードからバージョンを推測できない問題は
そもそも同じ名前でリリースしたことにあるわけで、
これだけ仕様の異なるプロジェクトなら名称を変えるべきだった。
これはCakePHP2の最大の失敗だったと思う。
3系は是非名前を変更してほしい。

32 :
は?
世の中のプロジェクト全てにケチ着けてこいよ

33 :
いや、世の中の他のプロジェクトは俺には関係ないからどうでもいい。
悪いけど、自分のことしか考えてないんで。

34 :
普通に「cakephp2」で結果に出るなら良いじゃん
2って打つのがめんどくさいのかな

35 :
echo $this->Form->end('作成');
を実行すると
<input type="submit" value="作成"> 
となりますが、
<input type="submit" value="作成" onclick="return validateValue();"> 
という風にsubmit前にJavaScriptにてバリデーションチェックを掛ける方法はありませんか?

36 :
$label = '作成';
$options = array('onclick' => 'return validateValue();', 'key' => 'value', 'key2' => 'value2', ...);
echo $this->Form->submit($label, $options);

37 :
処理に時間がかかる際の途中経過を表示したいのですが
通常phpならflush()ですが、MVCですし$this->render();でもダメなので
Cake独自の方法があれば教えてください。

38 :
>>36
ありがとうございます。
何とか出来そうです!!

39 :
てす

40 :
公式フォーラムがたよりないのでこちらに。
Cakeって1テーブル1モデルが基本だけど、2つ以上テーブルが必要な処理ってどこに書いてる?
アソシエーションの関係にないモデルが複数要る場合。JOINで済ませることも出来ない場合。
コントローラにごちゃごちゃ書きたくないけどモデル内で別モデルのインスタンス生成とかやりたくないので
そういう処理は全部コンポーネントに書いてるのだが、
そうするとコンポーネントがどんどん太ってモデルは空っぽになったりする。
別にそれでいい気もするが、MVCとしてなんか腑に落ちない気もする。

41 :
>モデル内で別モデルのインスタンス生成とかやりたくない
えーーー、なんでやねん!

42 :
>>40
あるモデルの中から他のモデルに働きかけたりするだろ普通

43 :
Cakeの話をするとスレが止まる何このスレ・・・
>>41-42
それやると典型的スパゲティになるからやめてくれ
引き継いだ他人のコードでそれがあると最悪

44 :
>>40
2.2だけど下記じゃだめなの? 基本Controllerに書いてるけど
App::import('Model', 'Data');
App::import('Model', 'User');
class DataController extends AppController
{
$this->Data = new Data();
$this->User = new User();
処理
}

45 :
>>44
コントローラに書くのに普通に$uses使わずそう書く理由は?ていうかそれ合ってるのかね
コントローラに全部書く方針で行くならそれはそれでありだと思う
俺はコントローラの流れが見辛くなるのが嫌だからなるべく太らせないようにしたい

46 :
>>45
Cake始めて1ヶ月なんでこっちが聞きたいw
でも一本サービスとして公開して今2本目の開発途中
Modelはトランザクション以外空っぽでMySQLの繋ぎにしか使ってない
処理はControllerで、表示はViewなのでどっちも増えるけどシンプルだよ
基本下記のページを見て覚えたから
http://libro.tuyano.com/index2?id=734001

47 :
ベストプラクティスでも読んでろ低能

48 :
>>44
意味もなく非推奨な実装するな
普通に ClassRegistry::init 使えよ
そんなレベルの発言されるとバカが増える

49 :
それか >>45 で言ってるように Controller::$uses に記述するかだ。

50 :
>>46
ひどいサイトだな。
冒頭のコントローラの解説で、
モデルはDBアクセスに関する機能だから、
DBを使わなければ不要だなんて言っちゃってるし。
そっ閉じしたわ。
職業プログラマで、こんな糞コードを書いてたら大変だぞ。
こんなサイトにブクマが130超もついてるなんて、本当に青ざめるわ。

51 :
そのサイトの奴は古いMacユーザーなら知ってる名前だわ
まあ昔からそんな調子だけどw

52 :
ちょっとハマってます。
検索してみると漢字の名前のorderではアイウエオ順では並ばないとの事。
別カラムにひらがなで読みを入れれば並ぶらしいところまで…

53 :
お、おう
そのまま抜けださないでおk

54 :
フレームワークというのを初めて使ってみてとても便利と思ったけど、
どういう仕組で動いてるのかさっぱりわからん
みんな分かって使ってんの?

55 :
何がわからないのかわからない
PHPが読めんの?

56 :
とりあえず自分がコード書くとこに関わるAPIはそこそこ把握してるけど、
中で何してるかまではしらない。
こう投げたらこう返ってくるが分かってればとりあえず使えるからね。
とはいえ、たまには中を読まないと解決できないはまりもあるけどな。

57 :
54だけど、まさに56の言う通り。
マニュアル読んで、最近話題の実践何とかっていう本も読んでサイトも作って公開した。
途中思うように行かないところ多数あったけど、とにかく公開を有線させたかったんで、
できないところは端折ったりしてなんとか公開にこぎつけた。
過去にフルスクラッチで書いていた頃に比べると
圧倒的に短時間でサイトができた。
ただ、なにか問題が起こった場合、ブラックボックスだらけなんでめちゃ不安。
そこらへん、みんなは中の挙動を全て把握できてるのかなと思って。

58 :
たとえば
http://example.com/posts/view/1
で、確かに posts テーブルのid=1のレコードが表示される。
その間、PostsControllerがPostからid=1のレコードを取得して
view.ctpにそれを渡してそのページが
レイアウトの中に埋め込まれて表示されているってことはわかる。
でも、そもそもなんでそのURLで PostsController のインスタンスが生成されて
Posts::view のメソッドに1というパラメータが渡されて呼び出されるのか。
そういうことを分かってないので今すごく気持ち悪い。

59 :
あと、設定ファイルに書いた情報も、どのタイミングで取得されてるのかとか
そんなことみんな当然分かってやってるのか、逆にそんなことは全く知る必要がないと思ってるのか、
あるいは必要に応じて調べてるのか、その辺りどうなのかなというのが疑問です。

60 :
>>56 さんは、必要ならその時調べるってスタンスでやってるのですね?
どうもありがとう。

61 :
そんな事言い出したら何も使えなくなっちゃうよw
jQueryなんか中身ちゃんと解ってない人ばかりじゃない?

62 :
>>61
たしかにそうかも知れませんね。
ただ、自分は jQuery は昔のバージョンですがひと通り目を通しましたよ。
そんなに複雑なことはしてないので一日あれば大体わかります。
ただ、派生ライブラリは全然分からずに使ってますね〜、ちょっと気味悪いと感じながらも。

63 :
それ言うならOSも中身わかってないと気持ち悪いのか?

64 :
ちゃんとやってるわけじゃないけど、各層の境界だけ押さえとけば
とりあえずはいいと思ってる。
リクエストに含まれる各パラメーターが、コントローラーに来た段階でどうなっているのか。
phpからDBへ格納する時どうなってるか。
テンプレートに吐き出すとき、どうなってるか。
ブラウザとphpとDBの間さえ意図通りなら、まぁ滅多な事にはそうそうならんと思う。
例えば、確認したの1系の頃だけど、リクエストはほぼそのままコントローラーに入ってくるから、
無対策でバイナリセーフでないphpの組込関数を使うのは危ないなとは思った。

65 :
自分で構造を納得しないと使えないなら、
諦めるか似たようなの作ってみるかどっちかしか無いよ。
俺は後者だったから、Cakeの縮小版みたいなの作った。
フレームワークの基礎は覚えたつもりだけど、
深入りすると難しくなるから、Cake使ってる。

66 :
分からんフレームワーク使うくらいなら自作のフレームワーク使うわ

67 :
自作のフレームワーク使うくらいなら分からんフレームワークを分かるようにするわ

68 :
ブラックボックス上等
そもそもPHP自体がソース見ない限りはブラックボックス

69 :
2人以上で開発するなら、自分で作ったコンパクトなフレームワークも、
他の人にとってはブラックボックスだったりね。

70 :
2人以上で開発するケースって殆ど無いよね
大手とかそれなりの人数が揃った開発チームで、
ってのならわかるけど。

71 :
え?

72 :
え?

73 :
>>70

74 :
  ●●●ケネディ大統領は何故、死なねばならなかったのか?●●●
  http://jbbs.livedoor.jp/bbs/read.cgi/study/3729/1226114724/53
  ¥¥¥¥¥¥¥『万有サロン』書き込み大賞・総額100万円¥¥¥¥¥¥¥¥¥¥¥¥
  この掲示板に優秀な書き込みをして、総額100万円の賞金をゲットしよう!(*^^)v
    万有サロン
      http://jbbs.livedoor.jp/study/3729/
    書き込み大賞の詳細
      http://jbbs.livedoor.jp/bbs/read.cgi/study/3729/1069922074/78-
    書き込み大賞の詳細(資料倉庫内)
      http://www2.tba.t-com.ne.jp/a-z/omake/banyu/taisho.htm
  また、あらゆる疑問に関する質問を、携帯電話やメールでも受け付けています。
    電話番号 080-4437-4187
    メール  aaa-zzz@tba.t-com.ne.jp

  ¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥

75 :
そしてスレはひっそりと止まった

76 :
Cakeで作るようなものは小規模だから1人で開発するでしょ
って言いたかったのかな

77 :
ORM以外なんとか全容が掴めてきた
イベント周りに手こずったわ

78 :
大規模ってどのくらいですか?テーブル100以上ですか?

79 :
大規模の定義なんてあるのか?

80 :
あった気がする

81 :
cakephp1.3で教えて頂きたいんですけど、
routes.phpで、携帯サイトのみ以下の一文を付けたいのですが、
routesではhelperも使えないので判別に困っています。
helperが使えたらktaiライブラリを使っているので一発なのですが…
なにかいい手はないでしょうか? お願いします。
Router::connectNamed(true, array('argSeparator' => '~'));

82 :
>>81
routes.phpにユーザーエージェントを判別するコード書いて
PC以外のアクセスにはconnectNamed指定したら良いんじゃないか?

83 :
1.3.15を使っています。
アソシエーションでconditionsを使う場合と使わない場合があります。
(例えば、非公開の投稿件数を表示する・しない 場合など)
今はコントローラーで、
一旦unbindModelをしてbindModelで再定義しているのですが、
モデル内で分岐させる方法はないでしょうか?

84 :
別名でもいっこアソシエーションセットすればいい
んで、いるアソシエーションのみcontainで指定して引っ張る

85 :
アソシエーションのとこのconditions書いたこと無いんだけど、
それfind()に渡すパラメーターで表現できないの?

86 :
自動で関連モデル引っ張って来てくれる時に条件付与してくれるってだけだと俺は思ってるけど
それでも便利じゃん

87 :
>>86
それだけかぁ。
なら別名同一モデルよりはcontainに書きたいな。

88 :
その場限りの条件なのか、モデル定義の根幹に関わる条件なのか。
それだけじゃないの?

89 :
>>84
それすると書く量や修正箇所が増えるんですよね・・。
>>85
自分はバーチャルフィールドにしているので、
find側でアソシエーションの条件は決められないっぽいです。
それができるとかなり便利なんですけどね。
>>88
どちらかというとその場限りですね。
「非公開の投稿件数を表示」って、管理画面で確認する程度ですし。

90 :
>>89
バーチャルフィールドって、なんか敬遠したい雰囲気だったから使ったこと無いけど、
調べたらconditionsには使えるみたいだから
contains => array(Model => array(conditions))にも使えるんじゃないの?ダメなの?

91 :
>>90
やってみたけど駄目だした

92 :
>>90
できました!コードが間違っていたようです。
containsではなくて、containでした。
対象のモデルに
var $actsAs = array('Containable');
を追加して、
findに'contain' => array('Posts' => array('conditions' => array('Posts.status' => 1))),
を追加すると、バーチャルフィールドでもconditionsが効きました。
containを教えていただいた方、ありがとうございました。

93 :
>>92
Containable使ってなかったのか。
これはもう必ず使っても良いくらいのビヘイビアだよ。
Modelのrecursiveプロパティと、やることが被ってるから、そこは注意が必要だけど。
class AppModel extends Model {
var $recursive = -1;
var $actsAs = array('Containable');
}
具体的には必ずContainable使うなら$recursiveはbelongsToすら取らない設定にするのがいいけど、
bakeして作った画面はbelognsToは来ること想定してるから、
containsにちゃんと書かないといけない。
その代わりアクション毎に指定したモデルだけを取れるから、無駄なSQL発行されない。
containだったか。他がconditions, fieldsってキーだからついcontainsって書いちゃうんだよな。

94 :
最新の日本語のマニュアルがないからcakephpの勉強をあきらめていたんだが
本家のほうにあったなんて
検索で1番上に表示されるcakephp.jpは害

95 :
>>94
メンテナンスできないなら作るな、っていう感じ

96 :
やっぱりメンテナンスされてなかたったんだ
今日からcakephpの勉強をしたいと思います

97 :
Cakeろくに管理されてないから終わっとるな
英語の公式以外で入手できる情報は基本ないと思ったほうが良い
ぐぐっても出てくるのは古いゴミみたいな情報ばかり
日本語なら、なるべく新しい本を買えばまだましなのかな、多分2冊ぐらいしかないはず

98 :
本なんかより
英語のマニュアルと、つまったらソース読むのが一番速い上に勉強になる

99 :
Cakeって公式のforumないの?
Unofficialてのがあるけど、質問してもレスつかんかった

100read 1read
1read 100read
TOP カテ一覧 スレ一覧 2ch元 削除依頼
あなたの User-Agent 教えてください (238)
PHPとJAVAさぶれっと (317)
Perlのオブジェクト指向って無理やり実装だなw (266)
姫君スクリプト (267)
Perl6/Parrotスレ - Part2 (349)
30代が趣味でこれから覚えるならどっち?Perlかphp (562)
--log9.info------------------
【GoW】Gears Of War【攻略】 (794)
-ゲッタウェイ ブラックマンデー- (452)
【PS3】DARK SOULS ダークソウル 質問スレ 141 (700)
【CS】TES V:SKYRIM スカイリム質問スレ62 (416)
サンリオタイムネット攻略スレ Part2 (657)
【Demon's】デモンズソウル 初心者専用スレ102【Souls】 (355)
ヴァルキリー2の妄想で興奮するスレ (759)
ゼノサーガ総合攻略スレッド PHASE3659 (326)
【XBOX360】 マグナカルタ2 (730)
工業のロマンシングサガ3 ミケランジェ65う房 (210)
聖剣伝説全般〃攻略・質問スレ (676)
邪聖剣ネクロマンサー (461)
ヴァルキリープロファイル2 やりこみプレイスレ (641)
ゼノサーガ3部作全てクリアした奴の数→ (736)
新桃太郎伝説リメイク署名スレ (732)
バテン・カイトス攻略スレ 〜18章〜 (875)
--log55.com------------------
【サッカー】37歳大久保、J2東京Vに加入 J1歴代最多得点の元日本代表 20試合 1得点
【NHK】大河脚本の三谷氏、出演依頼を受ける俳優たちに異例の訴え「『やばいかも』『スネに傷持ってる』と思う方は断って」
【芸能】木下優樹菜、離婚原因は「たかし」との不倫?インスタの縦読みに戦慄 ★2
【文春】辛坊治郎が日テレ女性社員に「壁ドン」パワハラ★2
【音楽】 新井ひとみ「デリケートに好きして」がアナログ化、中森明菜「少女A」カバーも 2020/01/08
【女優】高橋ひかる、活動再開を発表「元気な姿を早く皆様にみていただきたい」昨年10月から休養
【NHK】2022年大河「鎌倉殿の13人」主演は小栗旬 「大河ブランドを背負える役者」 ダークヒーロー北条義時演じる★2
【箱根駅伝】青学・竹石尚人、5年生でもう一度 内定辞退し留年決断