トップページphp
1001コメント305KB

【PHP】フレームワーク CakePHP 8ホール目【1.3】

レス数が900を超えています。1000を超えると表示できなくなるよ。
0001nobodyさん2010/03/18(木) 10:00:59ID:6+kHM8kH
CakePHPは、Ruby on Railsの概念の多くを取り入れた、Rails流の高速開発とPHPの機動性を兼ね備えたフレームワークです
CakePHPから派生したLithium(li3)も専スレできるまではここでどうぞ
質問するときはCakePHPのバージョンを書きましょう

※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
0837nobodyさん2010/07/13(火) 14:13:37ID:???
ここで聞く方が誰かが答えるまで時間がかかるし、そもそも答えが返ってこない可能性もあるのに
0838nobodyさん2010/07/13(火) 14:54:11ID:???
マニュアルは分かりづらいよ。
PHPのマニュアルほど、整理されてないし。
0839nobodyさん2010/07/13(火) 15:01:43ID:???
>>838
PHPのマニュアルほどって
無茶言うなw
0840nobodyさん2010/07/13(火) 15:11:04ID:???
まにゅあると
http://api.cakephp.org/classes
ここ読めば大抵分かるなんならそのままリンクされたソース読めばいい。
0841nobodyさん2010/07/13(火) 17:42:59ID:???
findとかpaginationとかFormヘルパーとか
似たような物作って自家製フレームワーク作ってるんだけどやたら難しい。

CakePHPからWebサイトに必要な機能を省いた
軽量版が欲しかったんだが、素直にCakePHP使った方が良いのかな・・・
0842nobodyさん2010/07/13(火) 17:54:53ID:???
CakePHPが重くて困る場面でなきゃ
既存のものを使わない理由はないな
0843nobodyさん2010/07/13(火) 18:03:14ID:???
既存のはpaninationの使い方がどうも難しいんだよな・・・。
あと、配列書きまくらないと設定できないというのも。

重くて困るという事はないが、xdebugした時のログを見ると
無駄な部分も多いんじゃないかなって思うんだよな。
0844 [―{}@{}@{}-] nobodyさん2010/07/13(火) 18:04:18ID:???
オレオレフレームワークほど無駄なものはない
0845 [―{}@{}@{}-] nobodyさん2010/07/13(火) 18:05:54ID:???
どうしてもなら自家製paginationとして
ヘルパーやらコンポーネントやらを作ればいい。

オレオレフレームワークほど犬も喰わんものはない
0846nobodyさん2010/07/13(火) 18:29:41ID:???
オレオレフレームワークって言っても、俺が使うからなw

バリデーションの処理(モデルとの連携)が難しいんだが
ま、限界を感じたら845の言うようにするよ。
0847nobodyさん2010/07/14(水) 00:26:44ID:sCETZCgF
database.phpのデータベース接続情報を
コントローラーから参照するのって、どうすればいいのでしょうか?
staticじゃないから、DATABASE_CONFIG::$default
では駄目ですし・・。
0848nobodyさん2010/07/14(水) 15:50:04ID:???
>>847
ConnectionManager::getDataSource($this->(モデル名)->useDbConfig)
じゃだめ??
0849nobodyさん2010/07/14(水) 16:50:30ID:sCETZCgF
>>848
駄目です・・。「Class 'ConnectionManager' not found」
というようにクラスがないと出ます。

ソースはTestControllerのindex内に
$config = ConnectionManager::getDataSource($this->Test->useDbConfig);
print_r($config);

としただけなんですが・・・。バージョンは1.3.2です。
0850nobodyさん2010/07/14(水) 17:13:41ID:???
クラス読みこめば?
0851nobodyさん2010/07/14(水) 17:30:31ID:sCETZCgF
$obj = new DATABASE_CONFIG();
$config = $obj->default;

としたらいけました。この方法しかないんですかね?
0852nobodyさん2010/07/14(水) 17:55:33ID:???
スレチ失礼。ATNDより、PHP関連の勉強会を紹介します。


■Ktai Library for cakephp 勉強会@関東
URL: http://atnd.org/events/6209
日時: 2010/07/17 11:00 to 15:00
場所: マイ・スペース&ビジネスブース池袋西武横店
参加条件: Masa-Pさんの本「PHPで作る携帯サイト デベロッパーズガイド」を持参、かつ4章までを自力である程度実装できている、もしくは出来る方


■OpenPNE3で学ぶsymfony勉強会
URL: http://atnd.org/events/6255
日時: 2010/07/24 15:00 to 17:00
場所: 手嶋屋新宿御苑オフィス
内容: この勉強会は毎回OpenPNE3の各機能、仕様にフォーカスを当て、ベースフレームワークであるsymfonyを理解していく勉強会です。
参加者はみんなsymfonyに興味のあるプログラマです。Webエンジニアとのネットワークづくりにもお役立てください。


■Python4PHPer 第7回講習会
URL: http://atnd.org/events/6344
日時: 2010/08/12 10:00 to 22:00
場所: 国立オリンピック記念青少年総合センター
内容: Python未経験者向けの、PythonとGoogle App Engine (GAE) の入門講座です。


■第11回 LOCAL PHP部勉強会
URL: http://atnd.org/events/6443
日時: 2010/08/28 14:00 to 16:30
場所: 札幌市産業振興センター セミナールーム9
0853nobodyさん2010/07/14(水) 18:16:15ID:???
おいしね↑
0854nobodyさん2010/07/14(水) 20:15:32ID:???
生きる!
0855nobodyさん2010/07/14(水) 21:08:17ID:???
原西来てるな
0856nobodyさん2010/07/16(金) 11:44:19ID:iQAofRLh
コントローラー側でページネーションを操作する方法って無いでしょうか?
$paginator->counterやソートの内容をコントローラーで処理して
setでビューに渡せるようにしたいと思っています。

コントローラーで「$helpers = array('Paginator');」としても
$paginatorの内容が取得できませんでした。
0857nobodyさん2010/07/16(金) 12:34:00ID:???
>>856
操作ってどんなの?
普通にpaginator使っていればコントローラ側で意識しなくても渡るけど。
もしくは、paginatorを継承して付け加えれば?
0858nobodyさん2010/07/16(金) 13:43:53ID:iQAofRLh
>>857
例えば「次へのリンクがある場合」という条件を書く時、
if ($paginator->last() != "") {
echo $paginator->next('次へ');
}

という感じのソースになりますが、
このIFの部分を含めてコントローラーで変数に置きかえ、ビューに渡したいんです。

0859nobodyさん2010/07/16(金) 13:51:53ID:???
shell上でコンポーネントを使うにはどうすればいいでしょうか?
0860nobodyさん2010/07/16(金) 14:07:46ID:???
使い方はたぶんこれでOKなのを見つけたんですが

App::import('Component','コンポーネント');
$this->コンポーネント = new コンポーネントComponent();

こんなエラーがでちゃいます

PHP Fatal error: Class 'App' not found

Appが無いって事でしょうか
ちなみに上記コンポーネントを使おうとしなければエラーはでません
cake1.2です
0861nobodyさん2010/07/16(金) 14:20:46ID:???
エラーのまんまだけどAppがまだ読まれてないところで使ってるんじゃない?
どこにそれ書いたの
0862nobodyさん2010/07/17(土) 21:54:27ID:???
ところでCakePHPって新規の案件以外では使えないよね。
0863nobodyさん2010/07/17(土) 23:07:39ID:???
デジャブやめろw
0864nobodyさん2010/07/17(土) 23:21:16ID:???
そんなネタはおもしろくない
0865nobodyさん2010/07/17(土) 23:44:34ID:???
面白いとか面白くないとかじゃなくて
事実を突きつけてる。OK?
0866nobodyさん2010/07/17(土) 23:53:45ID:???
じゃ、事実として意見を言うけど、確かに使いづらいよ。
特にMVCに分かれていない更新案件なら、手間がかかるだけ。

でも、それ(新規案件だけで使う)が何か問題あるのか?
0867nobodyさん2010/07/17(土) 23:59:17ID:???
まぁCakePHP使いこなせてないだけだろうね(笑)
0868nobodyさん2010/07/18(日) 00:13:00ID:???
いや、そうじゃなくて、更新案件なら
今まで作っていた作り方があるのに
わざわざCakePHPを使う必要があるのか?ってこと。

お前は、自分が管理しやすいからって
一から作り直すのをクライアントに勧めるのか?
0869nobodyさん2010/07/18(日) 00:37:30ID:???
最終的に何を言いたいのかわからんけど
フレームワークってそういうもんだろ
PEARとか拾ってきたクラスとかってのは既存のシステムからそれを利用するコードを書くわけだけど
フレームワークって逆にフレームワークから呼び出されるコードを書くのがデベロッパの仕事なわけで
当然フレームワークに沿った描き方する必要があるに決まってる
0870nobodyさん2010/07/18(日) 00:42:14ID:???
何回ループするんだよw
0871nobodyさん2010/07/18(日) 00:48:42ID:???
最近だけで3回くらいデジャブな感じ
0872nobodyさん2010/07/18(日) 01:15:44ID:???
cakephpでsymfonyにあたるsfFormのsetNameFormatってどうやったらいいの?
0873nobodyさん2010/07/18(日) 10:06:05ID:???
>>869
だから新規の案件意外で使えなくても不思議じゃないのに、
わざわざ聞くなってこと。言わせんな恥ずかしい。
0874nobodyさん2010/07/18(日) 11:11:01ID:???
>>87
「案件意外」

たしかに恥ずかしいな
0875nobodyさん2010/07/18(日) 12:35:49ID:???
VB.netが出たときも、結局書き直しじゃねぇかって話が出てた
さすがWeb界のVB
0876nobodyさん2010/07/18(日) 17:06:13ID:???
>>874
横だけど、2ちゃんで誤字突っ込むやつ久々に見た
0877nobodyさん2010/07/18(日) 18:46:00ID:???
男で突っ込まれるのが好きな奴なんているのか
0878nobodyさん2010/07/18(日) 22:09:37ID:4SBJVnBL
商品テーブル(items)と在庫テーブル(stocks)というのがあって、
商品テーブルにデータが追加されたら、在庫テーブルに商品IDが入る

と言う仕組みを作っているのですが、
ItemモデルでhasOneで結合するだけでは追加されません。
Itemコントローラーで$this->Item->saveAllした後に
$this->Stock->saveAllをするというように、分けないと登録出来ないのでしょうか?
0879nobodyさん2010/07/18(日) 23:55:18ID:???
RoRも込みでの話しになるけど
新規でしか使えないフレームワークなんて何の意味があるのかね?
RoR系のフレームワークってDBのテーブル名やPKは必ずIDにしなくちゃいけないとか
規約があるんだろ?
そんなもの使っかえねーし、きめぇ事この上無いんだが
なんでお前らこんな糞みたいなの使ってんの?
0880nobodyさん2010/07/19(月) 00:08:28ID:???
そうじゃないフレームワークはどれ?
フレームワークを理解してる?
0881nobodyさん2010/07/19(月) 00:38:08ID:???
>なんでお前らこんな糞みたいなの使ってんの?
使っている人が多いから

それ以上の理由ってあるか?
0882nobodyさん2010/07/19(月) 00:49:59ID:???
primaryKeyもtable名も変えれるけどね。
規約に沿ってないなら指定すればいいだけ。
0883nobodyさん2010/07/19(月) 01:18:10ID:???
>878
CookBook3.7.4あたりをもう一度読み直してみて
08848782010/07/19(月) 01:48:08ID:???
>>883
読み直しました。

やはり、一旦saveしてそこからgetLastInsertIdで追加したIDを取得して
もう一度saveするやり方しかないみたいですね。
考えたら、素のDB処理もそうするし、同じ事ですね。勉強になりました。
0885nobodyさん2010/07/19(月) 01:49:00ID:???
糞って言いたいだけだろ
0886nobodyさん2010/07/19(月) 02:27:27ID:???
Cookbookすらまともに読んでないようなやつは
できないということにしといてもいいんじゃね?w

とりあえず、できるしCookbookにもろに書いてるがな
0887nobodyさん2010/07/19(月) 03:20:44ID:???
次の患者どうぞ
0888nobodyさん2010/07/19(月) 09:27:45ID:???
>>879
新規案件だからだろ
他のがいいときは他の奴つかうし
フレームワークに振り回されてんじゃねーよ
0889nobodyさん2010/07/19(月) 10:37:02ID:???
>>884
そんなことない
適切なデータを渡せばsaveAllでいける
0890nobodyさん2010/07/19(月) 12:19:44ID:???
>>884
ちゃんとモデルごとに分けて配列に入れてからsaveAllしてる?
そもそもちゃんとモデルが関連づけされてる?取り出すときは一緒に出てくる?
怪しいところはその辺かなあ
0891nobodyさん2010/07/19(月) 12:33:23ID:???
>884
ttp://book.cakephp.org/ja/view/84/Saving-Related-Model-Data-hasOne-hasMany-belongsTo
100回読み直してみて
0892nobodyさん2010/07/19(月) 13:12:19ID:???
CakePHP 1.3.3 rainbow icing edition released
08938782010/07/19(月) 13:44:01ID:???
>>890
884で書いた事って、891のURLで書いている事と同じ事ではないでしょうか?
891のURLでも分けてsaveしてますよね。

ちゃんとモデル毎に分けて配列に入れてますし、
paginateする時も一緒に読み込んでますよ。
0894nobodyさん2010/07/19(月) 13:48:04ID:???
すげーなお前
0895nobodyさん2010/07/19(月) 14:44:13ID:???
>>893
ヒント>>890>>891は別人
0896nobodyさん2010/07/19(月) 14:48:41ID:???
MediaPluginの使い方が難しすぎる・・・
素直に適当なコンポーネント作成してアップロードさせた方が良いな
0897nobodyさん2010/07/19(月) 15:09:05ID:???
>>895
え?書いてあるよ
0898nobodyさん2010/07/19(月) 15:14:59ID:???
>>896
ソース読めばそうでもない。
0899nobodyさん2010/07/19(月) 15:40:08ID:???
>>897
ほんとだ。書いてあったw
ってことは結局>>889
>>878は腹に落ちるまで何度も読めばいいのに
0900nobodyさん2010/07/19(月) 18:01:14ID:???
>>882
知ってるよ。
でも設定より規約を重視するフレームワークでは
推奨される行為ではないんだろ?
DBにも制約があるなんて屑加減にも程がある。
0901nobodyさん2010/07/19(月) 18:10:10ID:???
フレームワークをなんだと思ってるんだろうか
0902nobodyさん2010/07/19(月) 18:10:33ID:???
主流のFWの規約=その時代の標準的なコーディング規約

と思っても良いと思うぞ。
それから大きく離れているコードを書く人は、おれおれFWを作りやすい人なんだろうな。
0903nobodyさん2010/07/19(月) 19:17:48ID:???
規約を守らないで使うぐらいだったら、オレオレライブラリとかpearとか使ってやった方が
その後は幸せになれるとおもうよ。規約があるから楽になるんだから。
0904nobodyさん2010/07/19(月) 19:31:31ID:???
複数人で開発する場合は規約があったほうがいい。
0905nobodyさん2010/07/19(月) 20:12:55ID:???
おまえら釣られすぎww
0906nobodyさん2010/07/19(月) 21:49:21ID:???
>規約があるから楽になるんだから。

これ、ほんとそうだな。
俺みたいに優柔不断で仕様作るのに時間かかる人間からしたら
規約が決まっている方が作りやすい。
0907nobodyさん2010/07/20(火) 00:03:25ID:Al1F2MMr
cookbookの投稿記事の編集を見たのですが、
http://book.cakephp.org/ja/view/340/Editing-Posts

function edit($id = null) {
$this->Post->id = $id;


と言うふうに書かれていますけど、関数の$idって
どこから参照されるのでしょうか?

URLが /(コントローラー名)/edit/id:10
であれば、edit関数内で$id=10として代入されるかと思ったのですが、
代入されていませんでした。
0908nobodyさん2010/07/20(火) 00:45:09ID:???
/edit/10
09099072010/07/20(火) 01:14:21ID:???
>>908
出来ました。URLの意味が
/コントローラー名/アクション/ID

だったんですね。id:10とかパラメーターが付いたら直で渡せないと。
その場合は、$this->params["named"]で取るようにします。
0910nobodyさん2010/07/20(火) 01:22:58ID:???
なにがしたいのかしらんがよくわからない方向に向かおうとしてる気がする
0911nobodyさん2010/07/20(火) 01:36:41ID:???
DBの命名に縛りが出ることにすげー違和感を覚えるんだが。
君達はそんなことないのか?
「楽だから」という理由だけでそれに納得してるのか。
単純な脳みそしてんだなー。
0912nobodyさん2010/07/20(火) 01:43:24ID:???
まあそこのページ、英語と日本語でちょっと違ってて
英語版を試すとおかしなことになるんだよね。
1.3用の英語ページが一番正しい。はず。
0913nobodyさん2010/07/20(火) 01:51:17ID:???
>>911
使ったことあればわかると思うけど別に縛りなんて無いよ。ただ初期値があるだけだ。
好きな名前使えばいい。
0914nobodyさん2010/07/20(火) 02:08:39ID:???
サッカーはどうして手を使ったらダメなんだ?って考える人ってめんどくさいだろ?
ボール蹴って「そういうもんだ」と思って楽しんだほうが楽なのと一緒だ。
0915nobodyさん2010/07/20(火) 03:27:06ID:???
ここ数日CakePHPを使えないものとしたくてたまらない奴が一匹いるようだな
0916nobodyさん2010/07/20(火) 03:28:46ID:???
Smartyスレに来るやつと同一人物だな
0917nobodyさん2010/07/20(火) 03:40:37ID:???
つうか、使わなきゃいいんだってw
規約に合わせたくない、合わせるのが諸処の事情で難しい、
そういう現場にまで押しつけようとは
CakePHPコミュニティも、俺らもしてないじゃないの
0918nobodyさん2010/07/20(火) 04:20:04ID:???
たぶん、会社の上司かクライアントか誰かに言われたんでしょ。
「フレームワーク勉強しろ」って。
そんで、必死に勉強しない理由探して叩いてるだけでしょ。
0919nobodyさん2010/07/20(火) 07:51:24ID:???
>>911
DB名を規則通りにすると1〜2行程度、楽ができるとかレベルだから
好きにつければいいよ。一通り、規約によるメリットを調べてから
従うもの、無視するもの選べばいいよ。
0920nobodyさん2010/07/20(火) 08:41:24ID:???
そんなに日本語カラム名が使いたいのか
0921nobodyさん2010/07/20(火) 16:17:54ID:???
サニタイズって使う?
HTML許可するフォーム以外、使い道が思い浮かばない。
0922nobodyさん2010/07/20(火) 17:21:06ID:???
データを表示するときに使う
0923nobodyさん2010/07/20(火) 22:32:55ID:???
ビューキャッシュってapp/tmp/cache/view/にひたすら置かれていくけど、
キャッシュ数が多くなったときのためにディレクトリで管理とかできないの?
0924nobodyさん2010/07/21(水) 08:39:12ID:???
>>923
出来るだろうけどやる意味あるの?
0925nobodyさん2010/07/21(水) 10:35:13ID:???
何万ファイルにもなるとOSに負荷がかかるとかなんとかかんとか
0926nobodyさん2010/07/21(水) 10:54:21ID:???
少なくともviewの数以上増えないんでしょ??
0927nobodyさん2010/07/21(水) 10:57:09ID:???
>>926
viewの数ではないよ
0928nobodyさん2010/07/21(水) 11:01:22ID:???
ん、そうなんだ。
あんま気にしたことなかったな。

ただディレクトリ見ても延々増えてるようには見えない。
09299232010/07/21(水) 12:17:22ID:???
>>924
デフォでは用意されてないのかねぇ・・・

>>926,>>928
たとえば1万ユーザーいるSNSでいろいろキャッシュしたら
ユーザーホームのページ分1万ファイル作られるし、さらに日記
ページとかとかキャッシュしたら、天井知らずに増える。
3万ファイルくらいまでは普通にキャッシュ増えて行ってしまって、
こりゃまずいと思って対策を考えているところなんだ。
0930nobodyさん2010/07/21(水) 12:20:00ID:???
なにがまずい?
0931nobodyさん2010/07/21(水) 12:25:47ID:???
使ったことないけど他のキャッシュシステムだと上限設定できるのか?
もしそうなら切り替えれば?
0932nobodyさん2010/07/21(水) 12:37:22ID:???
>>930
キャッシュもデータファイルだから、鯖の容量食うからまずいって話だろ?
0933nobodyさん2010/07/21(水) 12:50:08ID:???
>>930
ひとつのディレクトリに概ね1万以上のファイルはファイルシステムの動作が遅くなる
>>929
ディレクトリで分けるのが正攻法じゃね?
0934nobodyさん2010/07/21(水) 12:51:29ID:ULlFclUd
古いファイル消せ
0935nobodyさん2010/07/21(水) 14:11:26ID:???
キャッシュのエンジンはクラスになってるんだから
FileEngineからでも派生させてオレオレエンジンクラスをつくればいいと思うよ。

それよりログインした後のユーザー領域をキャッシュにするのは大丈夫なのかな。
俺はなんか不安だからやってないんだけど、ユーザーIDをキーにするとかでいいんだろうか?
09369232010/07/21(水) 14:15:22ID:???
説明不足ですみません
アクセスはまんべんなくくるので、キャッシュを減らすわけにもいかず、
キャッシュファイルの数はどうしても万単位になってしまうのです
http://soudan1.biglobe.ne.jp/qa4019431.html
この辺によると、やはり同一ディレクトリには10k〜15kくらいのファイル数に
納めることが理想のようです

自分の場合は容量は特に問題ないので、ディレクトリで分けようと思っています。
cakeでは
app/tmp/cache/view/test_read.cgi_php_1268874059.php
という感じのファイルが生成されますが、これを
app/tmp/cache/view/test/read.cgi/php/1268874059.php
みたいな感じで生成する方法はデフォルトで用意されているのでしょうか?
0937nobodyさん2010/07/21(水) 14:16:07ID:???
>>935
ずっと前だけど、そのときはURL叩いたらログインして無くても表示された
でも今ならcake:nocache使えばいけるかも?
レス数が900を超えています。1000を超えると表示できなくなるよ。