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

【PHP】フレームワーク CakePHP 7ホール目【v1.2】

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2009/09/01(火) 16:12:06ID:XVdxsVut
CakePHPは、Ruby on Railsの概念の多くを取り入れた、Rails流の高速開発とPHPの機動性を兼ね備えたフレームワークです。

※sage推奨
テンプレは>>1-5くらい

■本家
http://www.cakephp.org/
APIドキュメント
http://api.cakephp.org/
the Bakery
http://bakery.cakephp.org/
thechaw
http://thechaw.com/projects
CheatSheet (PDF)
http://cakephp.org/files/Resources/CakePHP-1.2-Cheatsheet.pdf

■日本語公式
http://cakephp.jp/
フォーラム
http://cakephp.jp/modules/newbb/
cookbook(マニュアル)
http://book.cakephp.org/ja
CakeMatsuriTokyo2009
http://matsuri.cakephp.jp/
0552nobodyさん2009/12/05(土) 17:02:56ID:???
PHPマニュアルを一読することをお勧めする
0553nobodyさん2009/12/05(土) 17:16:25ID:???
それはプライベートだろ
0554nobodyさん2009/12/05(土) 18:17:22ID:???
>>549
つ shell
0555nobodyさん2009/12/05(土) 18:27:22ID:???
>>549
「cakephp コンソール」 で、

あとは分かるな
0556nobodyさん2009/12/05(土) 18:31:24ID:???
rhacoっていうフレームワーク使おうと思ったらインストールすらできん;;
0557nobodyさん2009/12/05(土) 18:32:47ID:???
>>545
ごめん。よく読み直した。

正攻法は、既定のControllerを列挙してRoutingで、それぞれのControllerに飛ばし、マッチしなかったらCategoriesControllerに飛ばす
(ちなみにResistControllerではなく、UsersControllerのregist アクションかな)

ただ、それだと、category登録時にURLとかぶってないかチェックする必要があると思うので、/a/regist のように固定のサブディレクトリを用意しておいたほうが良いかも
0558nobodyさん2009/12/05(土) 18:38:38ID:???
>>556
つ「Lithium」
0559nobodyさん2009/12/05(土) 18:56:21ID:???
>>558
ありがとう。でも、rhacoがいいの。conveyor使ってみたくて。
http://conveyor.rhaco-users.jp/
0560nobodyさん2009/12/05(土) 23:11:46ID:???
すれたいよんだら親兄弟と一緒にしんどいで
0561nobodyさん2009/12/06(日) 00:01:20ID:???
このスレにはスレ違いを呼び寄せる魔力でもあるんかのう
0562nobodyさん2009/12/06(日) 00:25:38ID:???
rhacoスレないからじゃない?
0563nobodyさん2009/12/06(日) 01:13:24ID:???
rhaco2のドキュメントを見て、ああこれは内輪だけで楽しむFWなんだな、と思った
05645452009/12/06(日) 13:30:36ID:???
>>557

それならわかる!!

なるほどっっ

ありがとーー!!
0565nobodyさん2009/12/06(日) 17:58:06ID:???
prefixルーティングしているのですが、
adminで作ったら

admin用フィルター
admin_beforeFilter

普通用フィルター
beforeFilter

みたいに実行してくれないのですか?
自分で呼ばれたurlを解析して
beforeFilterの中で分岐させないと無理?
0566nobodyさん2009/12/06(日) 18:15:52ID:???
>>565
admin_beforeFilter の発想は無かったわ
でもurlを解析する必要はない
debug( $this->params ) せよ
0567nobodyさん2009/12/06(日) 19:20:01ID:???
>>565

なるほどっっっ!
$this->params['prefix']
で、取れるのねっ!!

でも、appをできるだけシンプルにしたいから、
cakeのdispatcherに

$controller->beforeFilter();
↓
$prefix = isset($controller->params['prefix']) ? $controller->params['prefix'] . '_' : '';
$controller->dispatchMethod($prefix . 'beforeFilter', null);

ってしてみちゃった!


どうなんだろうなぁ。
cakeに手を加えるのは・・・

自分の使いやすいようにcakeが進化していくのはいいけど、
cakeが新しくなったときに、大変だよなぁ。。。
0568nobodyさん2009/12/06(日) 19:47:35ID:???
ktailibrary で authコンポーネントを使ってログインNGのとき、PCからだとsessionに
[Message] => Array
(
[auth] => Array
(
[message] => ログインできません
[layout] => default
[params] => Array
(
)

)

)
が入るんですけど携帯用URLでログインNGの時は上記メッセージが入りません。
どうすればよいでしょうか。
0569nobodyさん2009/12/06(日) 20:06:28ID:???
>>568
すいません。自己解決しました。
0570ホクホクバカ ◆YMCgTirJag 2009/12/07(月) 01:15:39ID:???
みんなcakeでどんなの作ってるの?
おれはmixi踏襲版
0571nobodyさん2009/12/07(月) 12:40:52ID:???
>>570

・会員制の情報サイト(ユーザー管理、コンテンツ管理)
・企業のお問い合わせフォーム

ぐらい...
0572nobodyさん2009/12/07(月) 12:42:06ID:???
facebook踏襲版
0573nobodyさん2009/12/07(月) 13:35:03ID:???
俺はCMSの踏襲版。
姉歯みたいにならないようにきっちり作り込んでおけばあとはそれをコピペで
サイト大量に作れて便利。
0574ホクホクバカ ◆YMCgTirJag 2009/12/07(月) 21:00:08ID:???
何かの踏襲版って、ふとしたときに気が折れますよね。
これ作って意味があるのだろうか・・って
0575nobodyさん2009/12/07(月) 21:19:56ID:???
僕は2ch.netの踏襲版
0576nobodyさん2009/12/08(火) 00:35:07ID:???
>>574
勉強になるよ。
完全オリジナルで作りたいのは技術者として当然だけど、
人のものをまねることにより、学ぶものが大きい。
0577nobodyさん2009/12/08(火) 00:37:50ID:???
まあ、これ使えると他のFWも使えるからな
業務でもそこそこ使われてるから、いいんじゃね
0578nobodyさん2009/12/08(火) 00:38:19ID:???
どっちかというとオリジナルで作るより楽だから・・・ってのが大きかったりするけど

まぁ、フレームを踏襲しても中身がオリジナルだったらいいんじゃないか
0579nobodyさん2009/12/08(火) 01:12:56ID:???
ソース解析しつつカスタマイズすることによって利用価値は跳ね上がる。
irc#cakephp(注:英語)でどんなにコアな質問してみても答えが大抵1分以内に返ってくる。
あそこはヤバい
0580nobodyさん2009/12/08(火) 01:22:23ID:???
そのコアな質問とやらをちょっと書いてみてくれるか?
0581nobodyさん2009/12/08(火) 01:34:37ID:???
CMSやブログ的なものを作るとき、例えば、サイドに表示させるパーツなんかはどうしてますか?
viewのエレメントからrequestActionするのが考え方としては一番スッキリするんだけど、
重くなっちゃいますかね?
05825792009/12/08(火) 01:35:24ID:???
>>580
そんなの書けるわけねーだろ!英語だぜ、英語!
中一の英語を読むことすらできねーのによ!!
ニューホライズンは一冊目で挫折したよ!!
ちょっと格好つけたかっただけだよ!空気嫁!!ったくよ!!
0583nobodyさん2009/12/08(火) 01:50:59ID:???
>>581
requestAction自体がキャッシュ推奨
0584ホクホクバカ ◆YMCgTirJag 2009/12/08(火) 02:00:24ID:???
>>582
英語できないのにcake使えるなんてすごいと思う。
0585nobodyさん2009/12/08(火) 02:02:11ID:???
>>580
なんでjoinモデルはAppModelのインスタンスで生成されるん?とか
とりあえずコアライブラリに突っ込んだ内容でも余裕。
0586nobodyさん2009/12/08(火) 02:05:13ID:???
>>584
テーブルの命名とかどうするんだろう。
komentosとか?
0587nobodyさん2009/12/08(火) 02:06:12ID:???
>>584
http://www.google.co.jp/search?q=YMCgTirJag&lr=lang_ja&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ja:official&client=firefox-a
だれ?
0588nobodyさん2009/12/08(火) 02:10:21ID:???
komentsって英語入ってるよw
tyuushakusかな。
0589nobodyさん2009/12/08(火) 03:27:02ID:???
>>581
俺はrequestaction。ちょうど今、ブログ作ってます。
にしてもカレンダーがネックだね。
ライブラリがいいのがない。
0590nobodyさん2009/12/08(火) 21:19:18ID:???
Mediaプラグイン使ってる人いる?
アップロードするディレクトリをドキュメントルート外にしたりできるのかな?
0591nobodyさん2009/12/09(水) 04:13:39ID:???
プラグインの中のconfig/core.phpの設定でできると思うけど。
0592nobodyさん2009/12/09(水) 11:53:52ID:???
その場合、ブラウザからアクセスするときは
プログラムを通すのかな?

画像を大量に表示するときなんか、
すごい負荷かかりそうだけど・・・
0593nobodyさん2009/12/09(水) 12:15:39ID:???
通さなきゃどうやって表示するんだ?
馬鹿か?
死ぬか?
0594nobodyさん2009/12/09(水) 12:21:34ID:???
>>592

> 画像を大量に表示するときなんか、
> すごい負荷かかりそうだけど・・・

大量って、どのくらいの数を言っているのか?
0595nobodyさん2009/12/09(水) 12:27:26ID:???
>>593
何をそんなに怒ってるのかわからないけど・・・

初回はプログラム通して、画像表示+キャッシュ生成
二回目からは直接表示、とか

mod_rewrite使えばできるでしょ。

>>594
アマゾンとかの検索結果くらい?
0596nobodyさん2009/12/09(水) 12:36:16ID:???
サーバー負荷はアクセス数に左右される事が多いと思う。

大量の画像表示といっても、人気無いサイトなら負荷も一過的であまり問題にならないのでは。
それより、大量画像表示で気をつけないといけないのは、回線に負荷をかけるという事だよな
0597nobodyさん2009/12/09(水) 14:09:58ID:???
>>596
回線負荷という意味では、etagとかHTTP304ステータスコード(Not Modified)とかを自前実装する必要があるよね
media pluginは使ったこと無いからどうなってるか知らんが
0598nobodyさん2009/12/09(水) 15:07:13ID:???
命名規則で思ったんだが、テーブルがcategoriesの場合、
モデル名はcategory、プロパティでcategoriesテーブルを指定しないと駄目なんだよね。
0599nobodyさん2009/12/09(水) 15:18:03ID:???
なにいってんの?こいつ
0600nobodyさん2009/12/09(水) 16:28:15ID:???
>>593
死んできます
0601nobodyさん2009/12/09(水) 16:32:48ID:5lohRgzm
waterの場合どうなりますか?
0602nobodyさん2009/12/09(水) 17:09:58ID:/sBQ8GaX
boardと言うテーブルでモデルとコントローラを作ったのですが
Error: Database table boards for model Board was not found.
と、boardの複数形boardsテーブルを探しに行ってしまうようです。
複数形じゃなくてboardを見に行かせるにはどうすればいいのでしょうか?
0603nobodyさん2009/12/09(水) 17:13:16ID:???
テーブル名をboardにすべきじゃないかなぁ
0604nobodyさん2009/12/09(水) 17:13:56ID:???
間違った
テーブル名をboardsにすべきじゃないかなぁ
0605nobodyさん2009/12/09(水) 17:19:38ID:???
var $useTable = 'board';

糞な掲示板なんか作る前にマニュアル読むかシネ
06066022009/12/09(水) 20:35:39ID:???
>>605
できました。ありがとうございます。
CakePHPってMS SQL Serverとあんまり愛称よくないですね・・・
改善してほしいな
0607nobodyさん2009/12/09(水) 20:43:40ID:???
どこがどう相性悪いのか具体的に
06086022009/12/09(水) 20:51:30ID:???
Warning (2): mssql_get_last_message() expects exactly 0 parameters, 1 given [CORE\cake\libs\model\datasources\dbo\dbo_mssql.php, line 407]
とか出たり。
lastError()のmssql_get_last_message()のとこコメントアウトしてreturn;しちゃいましたけど・・・
0609nobodyさん2009/12/09(水) 20:57:19ID:???
↑最高にアホ
0610nobodyさん2009/12/09(水) 21:09:35ID:???
>>592
メディアをドキュメントルートから外すのは普通にやると思うよ。
そのため(ってわけでもないけど)にcakephpにメディアビューも内蔵されてるんだし。
0611nobodyさん2009/12/10(木) 00:07:13ID:???
>>610
メディアビューで、サムネイル画像50枚くらい一度に表示したら、
ちょっともっさりしてたよ。

やっぱキャッシュは必須かも。
0612nobodyさん2009/12/10(木) 00:19:57ID:???
>>611
サイトのポリシーにもよるだろうけど、
普通に画像を置くより明らかに重くなるのは目に見えてるしね。

俺はダウンロードのカウントが必要だったり、
ACLでアクセス制限したかったりそういう部分ぐらいしか使わないけど。
0613nobodyさん2009/12/11(金) 11:26:59ID:???
コントローラからもシェルからも使いたい処理って、
どこにまとめてますか?

シェルからコンポーネント使うのもバッドノウハウっぽいですし・・・
0614nobodyさん2009/12/11(金) 12:57:55ID:???
モデルに書くというのは?
0615nobodyさん2009/12/11(金) 13:15:32ID:???
>>614
現在はその方法にしてます。
でもモデルに関係しない処理もあるので・・・

あと、コントローラからシェルを呼んだりすることもできるんでしょうかね?

何かの登録処理後、さっそく一回目のCRONを実行する、
みたいな処理を想定しているのですが・・・・
0616nobodyさん2009/12/11(金) 13:27:46ID:???
exec()とかで呼ぶんじゃダメなの?
いや俺cakeのシェル使った事ないから専用の呼び方があるのかどうかは知らないけど。
0617nobodyさん2009/12/11(金) 14:57:03ID:???
exec("/path/to/cake/console/cake -app /path/to/app task_name arg1 arg2 ...");
って感じかねー普通に。
0618nobodyさん2009/12/11(金) 17:51:36ID:???
保存の前に確認画面を挟むとき、やはり確認画面用のctpファイルを作ることになりますか?
Cool!なやり方はありますでしょうか?
0619nobodyさん2009/12/11(金) 18:14:38ID:???
modelとvendorに書いてる。
shellから使うときもあるかも。な処理はコンポーネント化しないようにしてる。

shell起動は、上にも書いてある用に``とかexec系だけど、
バックグラウンドで処理して欲しいと気が多いから(つまりshellの返答を待って欲しくない)
その時は/dev/nullと&使って呼び出してる
0620nobodyさん2009/12/12(土) 04:39:04ID:???
adminをrootsで指定して、

http://localhost/admin/host/modify/[ID名]
として、その中でformを
<?php echo $form->create('', array('method' => 'post', 'action' => 'regist', 'enctype' => 'multipart/form-data', 'url' => array('admin' => true))); ?>

こんな感じで指定すると、なぜか
actionが
/host/regist/admin:1
となってしまいます。

なぜか、$formの中の$option['action']['id']に、'admin' => trueが1として入ってしまい、
adminがprefix扱いでなくなってる。。。
[ID名]を入れなければ正常なんですが・・・

散々迷走して、
'url' => array('id' => '', 'admin' => true)
と追加すれば、
正常に動作することがやっとわかったんですが、

これは一体なぜ???

不可解です。。。
0621nobodyさん2009/12/12(土) 12:42:02ID:???
しかし、いつになっても、強敵はフォームヘルパーだねぇ。
順調に開発が進んでいると思いきや、
ちょっと複雑なフォームになると、もうにっちもさっきもいかなくなる。。。

でも、バリデーションというめんどくさいフォローを考えると
それでも、ヘルパーを使い続けてしまう・・・

リスト形式のページで、チェックしたレコードだけ、処理をしたい。
とか書こうとしているのにうまくいかん(+_+くそーー
チェックボックスだけで3時間はつぶしているぞー
0622nobodyさん2009/12/12(土) 13:55:41ID:???
>>621
複雑なフォーム というのはユーザビリティも悪くなるので
フォームヘルパーで対応できるようなフォームを作るといいと思うんだけど。
どうかな。
0623nobodyさん2009/12/12(土) 14:23:04ID:???
>>620
へえ、それで解決するんだ。
以前さんざんはまって、結局$paramsのURLをそのまま書き出したよ。

formヘルパーの逆URLルーティングはID絡むからか通常の$html->url()とは挙動が違うんだよね。
0624nobodyさん2009/12/12(土) 18:06:21ID:???
なんかそのへんのことが整理されてなくて
Cakeめんどくせえなあ
っておもう
0625nobodyさん2009/12/12(土) 22:10:57ID:d/+O720A
他にもあるぞ
0626nobodyさん2009/12/13(日) 22:39:17ID:???
おら、何かワクワクしてきたぞ!
06276202009/12/16(水) 00:15:50ID:???
>>623
きっとできるはずだ!と信じたけど、できなくて、、
でも、やっぱオープンソースの強みだね。
いざとなったらソースを見て回避方法を探せる。

同じidだけど、urlのidとactionのidがcakeの中で混同しているっぽいのよね。
idを消すと動くから。
だから、urlから必要のないidを消したら使えるんじゃないかしら。
と思って消す方法を探してみた。
けど、やっぱ階層がもういっこ深くなるとだめそうやね・。・・
0628nobodyさん2009/12/17(木) 21:07:57ID:???
おっす
cakePHPってどう?いい感じ?
0629nobodyさん2009/12/17(木) 21:33:56ID:???
>>628
ちっす
それなり
0630nobodyさん2009/12/18(金) 12:14:10ID:???
すみません、質問です。
newするときなんですけど、クラス指定でなく、クラス名指定でできないものですか?

たとえば「Test」modelをnewするときは普通は
$model = new Test();
としますが、これを
$model = new Model('Test'):
みたいな感じで、クラス名の文字列を指定すると、そのクラスのインスタンスが生成されるようにしたいのです。

カスなのでググってもわかりませんでした。このカスにどなたか教えてくださいませ。
0631nobodyさん2009/12/18(金) 13:01:25ID:???
>>630
つ $User = ClassRegistry::init('User');
0632nobodyさん2009/12/18(金) 13:36:00ID:???
>>631様

ありがとうございました!こんな便利な方法があるのですね!勉強になりました!
0633nobodyさん2009/12/22(火) 02:18:31ID:???
googleにキャッシュされないんだけど仕様?
0634nobodyさん2009/12/22(火) 03:08:50ID:???
このスレにその質問で答えが返ると思ってるのは貴方の仕様?
0635nobodyさん2009/12/22(火) 09:04:25ID:???
>>633
ヘッダーになんか書いてない?
0636nobodyさん2009/12/28(月) 17:58:10ID:???
>>633
ヘッドになんにも入ってない?
0637nobodyさん2009/12/29(火) 09:52:46ID:???
ヘッドに肉って書いてない?
0638nobodyさん2009/12/29(火) 14:36:18ID:???
牛脂
0639nobodyさん2009/12/29(火) 22:40:01ID:???
---
http://cakephp.org/
PHP framework
---
って文章をautoLinkUrlsさせると、PHPまでリンクになっちゃうんだけど、
改行コードもリンクされるのは仕様?
コアのコード読んでみたんだけど、preg_replace_callbackがイマイチ理解できなくて
どの辺を修正するべきかよくわからん。
0640nobodyさん2009/12/31(木) 13:12:15ID:???
フォームヘルパーを使っているのですけど、validationを組んで、エラーがあると、
元の画面に戻ってくるのですが、
fileコンポネントはデータがクリアされてしまいます。
セキュリティの関係でたぶん引きづくのは無理かなーとかんぐって、
今はsessionで保存しておいてvalidationで差し戻しされたときはそこから呼び出すことに
しようかなぁ。と思っているんでけど、fileが空欄の表記になってしまうのが難点・・・

なんかもっと画期的な、とか、定石な手段をご存知だったら教えてくださいー。
みんなはどうしてるんだろう。
0641nobodyさん2009/12/31(木) 15:59:32ID:???
>>640
fileはvalueを指定できないからね。ページ遷移してる限りfileを入れた状態で
表示するのは難しいのではないでしょうか。
できるかわからんが、アップロードだけは完了させてしまいfileは表示しないとか?
0642nobodyさん2009/12/31(木) 16:39:52ID:???
CakePHPのページからCakePHP1.2の最新版 cake_1[1].2.5.zip
http://cakeforge.org/frs/?group_id=23&release_id=449
をダウンロードし設置したら、バージョン表示が「1.2.4.8284」でした。
これで正しいのでしょうか?
また、1.2.5があるのなら、どこからダウンロードすれば良いのでしょうか?
0643nobodyさん2009/12/31(木) 18:05:08ID:???
>>640
validationエラー時にアップロード済の場合、
ファイル名とかサムネイル + 削除リンク表示。
削除リンクをクリックするとfileが表示されるとか。

fileのvalueを指定はセキュリティ的に無理。

cake関係ないけど。
0644nobodyさん2009/12/31(木) 18:16:55ID:???
>>642
http://github.com/cakephp/cakephp1x/blob/master/cake/config/config.php
たしかにそうみたいだね。

cake/VERSION.txt には 1.2.5って書いてあるから、それで確認すればOK
0645nobodyさん2009/12/31(木) 19:31:56ID:???
>>644
ありがとうございます。1.2.5で間違いないようですね。安心しました。
09/9/8に1.2.5がリリースされているのですね。
http://bakery.cakephp.org/categories/view/1
/cake/config/config.phpを自分で1.2.4.8284→1.2.5に変更しておきました。
1.2.5.と表示される様になりました。
06466402010/01/04(月) 00:11:40ID:???
>>643
>>641

ありがとん。
アップロードは必須項目なので、
結局、ファイルを指定して、サブミットしたら、
バリデーションで差し戻し食らっても、画像だけは、
プレビュー画面を表示して、アップロード済みにすることにしました。
変更したければ、もう一度ファイルを指定して、アップロードしなおす
という感じで。。。

なんとか様になりました。ありがとー

実装直後、
アップロード→セッションに保存
した直後
セッションから呼び出し→画面表示(別URL)

という処理を作ったら、書き込んだ直後のセッション情報が
別のアクションから呼び出せない。
という現象が発生していて、1/4日ふっとばしたんだけど、
一回休憩して、気合を入れて原因を解明するぞー
と意気込んだら、、、
バグが消えて、正常に表示されるようになってました。。

不思議すぎます・・・
0647nobodyさん2010/01/04(月) 16:34:28ID:uJF3g7Nl
コントローラで$this->set("result",$result);して、ビューテンプレートにresultを渡した場合、
<?=$result ?>だと表示されないんだけど、なんでかな?

この部分を<?php echo $result ?>に変えてみると値が描画されるからresultに値は入っているみたい。
0648nobodyさん2010/01/04(月) 17:25:49ID:???
>>647
php.ini short_open_tag = On
http://shoyu-ramen23.jugem.jp/?eid=125
0649nobodyさん2010/01/04(月) 18:11:00ID:uJF3g7Nl
>>648
ズバリです。
本当に助かりました。ありがとうございます♪
0650nobodyさん2010/01/04(月) 18:23:26ID:???
>>649
オレもViewは<?php echoの略記を使って書くの好きだなあ。
<?= $form->create('Post', array('action' => 'add', 'type' => 'post')); ?>
  タイトル:<?= h($form->value('Post.title')); ?><br>
       <?= $form->hidden('Post.title'); ?>
  本文:<?= h($form->value('Post.body')); ?><br>
     <?= $form->hidden('Post.body'); ?>
  <?= $form->submit('戻る', array('name' => 'data[Post][mode]')); ?>
  <?= $form->submit('Save Post', array('name' => 'data[Post][mode]')); ?>
<?= $form->end(); ?>
0651nobodyさん2010/01/04(月) 18:33:54ID:???
省略記号使うとどこからともなく変なのが沸いて来たりするから・・・
0652nobodyさん2010/01/04(月) 19:11:28ID:???
<?= の省略記号を使うとshort_open_tag = On してない環境で動かない事の他に
どんな悪いところがあるの?
■ このスレッドは過去ログ倉庫に格納されています