トップページ⇒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/
0496nobodyさん2009/11/24(火) 01:50:47ID:???
Cakeの未来を語ろうじゃないか。
どうなるんだ 
俺はDonateしたけど。
0497nobodyさん2009/11/24(火) 23:14:47ID:???
>494
DB設計などの地味?な分野はサッパリわからん!
という人の比率が高いんじゃね、Web屋には。
0498nobodyさん2009/11/25(水) 02:33:33ID:???
関連モデルのビヘイビアのafterFindって呼んでくれないんですか?
なんか解決法あるんでしょうか?
04994982009/11/25(水) 02:41:14ID:???
ググってみたら
>Currently, callbacks in behaviors are not triggered on recursive finds.
>This is done by design, but changing it is something to consider in the future.
だそうで・・・なんでじゃー
0500nobodyさん2009/11/25(水) 02:51:15ID:???
まぁさんざん既出なんだけど、悔しいよねそこ
05014982009/11/25(水) 02:59:58ID:???
>さんざん既出
そうみたいですね。すいません。
とりあえずモデルに書いてやり過ごします。
0502nobodyさん2009/11/25(水) 23:32:21ID:???
今作ってるサイトで、「あ〜ん」まで46文字分の目次リンクを作ろうとしてます。
目次は「http://domain.com/tables/index/1」のようなURLで、
「動物」「植物」などのジャンル別に同じようなリンク群を用意します。
各リンク群の差異は、テーブル名だけになります。

んで抽象的な質問なんですが
ポリシー?として、このリンク群にも毎回Htmlヘルパーのリンク出力メソッドを使うべきでしょうか?
リンク群をベタで一つだけ書いて、str_replaceでテーブル名をジャンルごとに置換出力するほうが
ソース的にすっきりするので、そうしようとしているんですが…

フレームワークのお作法と言うか、ある関数は使うべきと言うか、
そう言う点で多少無理があってもヘルパー使うべきですか?
変な質問でスミマセン
0503nobodyさん2009/11/25(水) 23:45:15ID:???
viewのところは好きにやればいいんじゃね?
気になるならヘルパー作ればいいし
elementを利用するもよし
0504nobodyさん2009/11/26(木) 00:00:06ID:???
>>503
そか、メンテナンス性とか気にするならヘルパー作っちゃうって手もあるんですね。
ありがとうございます
0505nobodyさん2009/11/27(金) 08:36:18ID:???
Error: Database table tests for model Test was not found.
って出てるんですが、Testsってコントローラーは作ってもTestというモデルは作ってません。
なんでこういうエラーがでるんでしょうか?
0506nobodyさん2009/11/27(金) 09:17:04ID:???
>>505
Modelがないから
$useTable = false なModelを作ってあげればよい
0507nobodyさん2009/11/27(金) 13:24:00ID:???
h()使ってないのに自動でエスケープされます。。
どういうことですか?
0508nobodyさん2009/11/27(金) 13:53:50ID:???
formヘルパー使ってたら勝手にやってくれるが
0509nobodyさん2009/11/27(金) 21:18:25ID:???
質問です
authComponentを使っているのですが
firefoxやgoogle chromeだとうまいことログインできるのですが
IE6だとログイン→リダイレクト先のログインチェックではじかれる→ログインということで
ログイン画面がループしますが、原因が不明です。

ご教授お願い致します。
0510nobodyさん2009/11/27(金) 23:19:31ID:???
>>508
それは知らなかった。でも使ってないんですよ
謎ですわ・・・
ありがとうございした。
0511nobodyさん2009/11/29(日) 00:08:36ID:???
cakephpの勉強で技評のtodoアプリを作ってみているところなのですが
第6回(http://gihyo.jp/dev/serial/01/cakephp/0006)をやってみたところ
タスクの追加は正常に行えるのですが、タスクの内容が表示されません。
というか入力フォームに入力した内容がデータベースのcontentに格納されていないようで
contentのtextが空になっています。

何か原因が思い当たるケースはありますでしょうか
0512nobodyさん2009/11/29(日) 07:36:33ID:???
>>511
DBの文字コードをチェックし
app/config/database.php の encoding を指定する utf8 とか
でどう?
0513nobodyさん2009/11/29(日) 11:49:13ID:???
>>512
レスありがとうございます。
照合順序もutf8ですし、encodingもutf8に指定してあります。

良くないんですけど解決しないまま
第7回(http://gihyo.jp/dev/serial/01/cakephp/0007)をやってみたところ
editで内容を編集した場合にはcontentに正常に格納されています。
0514nobodyさん2009/11/29(日) 16:26:57ID:???
$this->log でログ書き込めるけど、見るときどうしてる?
いちいちダウンロードして見るもの面倒だし。

良い方法ないかな。
0515nobodyさん2009/11/29(日) 16:50:36ID:???
*.logを読み込み表示するプラグインをつくって
管理画面からそのページ開いてる
開発権限でログインしたときのみ見れる。

うちはShellからの軌道をよく使うからこういうのないときつい
0516nobodyさん2009/11/29(日) 20:41:32ID:???
>>513
echo $form->create("Task",array("url"=>array('action' => 'add')));
echo $form->inputs(array("content"));
echo $form->end("add");

ver.1.2以上だったら$form使ったほうがいい。
0517nobodyさん2009/11/29(日) 23:02:58ID:???
>>516
解決しました。
ありがとうございます。
formには書き換えてたんですがinputの箇所が正しく書けていなかったようです
0518nobodyさん2009/11/30(月) 11:50:29ID:???
Linux環境でCakePHPのシステムを作成しているのですが、mdbファイルを扱うには
どのようにすべきでしょうか?良いライブラリなどありましたらお教えください。
0519nobodyさん2009/11/30(月) 12:38:32ID:???
>>518
datasource作るといいんじゃね?
0520nobodyさん2009/11/30(月) 16:10:47ID:???
scaffoldで、カラム名が"id"のカラムはedit画面で表示されない(=入力できない)ようですが、
これって変更できないんでしょうか?
idをauto incrementで付与せず手動で付与するテーブルの管理にscaffoldが使いたいのです。
0521nobodyさん2009/11/30(月) 17:23:08ID:???
>>520
viewだけbakeして edit.ctp 修正すればいける。かも
でも素直にbakeするが吉
0522nobodyさん2009/11/30(月) 18:46:32ID:???
>>521
了解っす( `・ω・´)ゝ”
0523nobodyさん2009/11/30(月) 20:13:43ID:VRbng4qp
今モデルを使わずに勉強してます。
http://exmaple.com/test
にアクセスすると、app/views/layouts/test.ctpがちゃんとヘッダ、フッタが反映され
思い通りに表示されます。
一方、http://example.com/にアクセスされて表示させるには
どこのどのファイルをいじればいいのでしょうか?
つまり、HTTPのルート直下のページを作りたいのです。
これはアクションなしと言うことなのでしょうか?
0524nobodyさん2009/11/30(月) 20:25:10ID:???
とりあえずそんな変なところから始めないで
一回部ログチュートリアルとかこなしてから来てね

ばいばい
0525nobodyさん2009/11/30(月) 20:46:11ID:???
むしろそんな事ができることに驚いた
05265232009/11/30(月) 22:01:31ID:???
解決しました。ありがとうございました。
0527nobodyさん2009/12/01(火) 00:40:49ID:???
>>523
千里の道も一歩から、がんばってね/(^_^)/
0528nobodyさん2009/12/01(火) 05:46:31ID:iKHu3fPb
Cookie コンポーネントの質問なんですがもう二日ぐらい潰してしまったんで誰か助けてくださいorz

app_controller に Cookie コンポーネントを使っています
hoges コントローラーの beforeFilter メソッドで app_controller の beforeFilter メソッドを呼んでいて
beforeFilter(app) のメソッド内で Cookie->write でクッキーに保存した値を
hoges コントローラーの index アクション内で Cookie->read をして先ほどのクッキーを読み出すことは可能なんですが

beforeFilter(app) のメソッド内で Cookie->name のクッキー名を変更するとなぜか読み出せないんですよね
でもブラウザに保存されてるクッキーを確認すると、変更後のクッキー名でクッキーが保存されてるんで読み出せるはずなんですがロード出来ません

荒技で cookie コンポーネントのPHPファイルの var $name を 最初から 'CakeCookie' から任意の名前に変更してみてもロード出来なくて絶望しました
$_COOKIE 使って実装するのは暗号化も行ってるし何よりフレームワーク使ってる観点から保守性が低いのでそれ以外で誰かお願いします
0529nobodyさん2009/12/01(火) 09:41:32ID:???
>>528
http://api.cakephp.org/view_source/cookie-component/#line-236
Optional [Name.], reguired key
$this->Cookie->read(Name.key);
0530nobodyさん2009/12/01(火) 17:52:30ID:???
>>528
read 出来るときと出来ない時のコードの変更が beforeFilter(app) のメソッド内で Cookie->name のメソッドの追加の有無だけなんで
引数が間違ってるっていうのは無いです

一応自己解決(完結?)したので…

質問してから CookieComponent 調べていくと write 後、$_COOKIE で書き込んだ値を取得してみるとなぜか取得出来なくて
でもブラウザにはクッキーが保存されてるので 2回目以降のアクセスだとクッキーが読み込まれるんですよね

それで Cookie->name でクッキー名を変更しなければ、write してから read すると読み込まれているからどうやってクッキーを取得してるのかと思って調べてみると
write すると CookieComponent のメンバ変数の $__values に値を保存して read 時はその変数から取得していて
結局 CookieComponent のメンバ変数にクッキーを保存して取得してた流れみたいでした…

で、Cookie->name でクッキー名を変更を行わないと上のような処理になって、write 後 read しても読み取れるんですが
変更しちゃうと hoges_controller の beforeFilter が終わると $__values に変更後のクッキー名のクッキーを読み込んで write した値が消える事が原因だったみたいです
write しているタイミングが app_controller の beforeFilter メソッド内でやっているので Cookie->name を追加すると必ず $__values の値はリセットされるので
hoges_controller のアクションメソッドで read しないで、beforeFilter 内で read してapp_controller のメンバ変数に入れた後で
hoges_controller のアクションメソッドで変数を参照するということで完結しました…

CookieComponent って万能じゃ無いんだね…
なんで write 後、$_COOKIE で取得出来ないのかわけ判らんのですが長文でごめんなさい
0531nobodyさん2009/12/01(火) 20:20:07ID:???
>>519
datasourceのもう少し詳しい情報教えてもらえますか?
0532nobodyさん2009/12/01(火) 20:27:49ID:???
srbr
ksg
0533nobodyさん2009/12/01(火) 20:29:33ID:???
しらべろ
くそが?
0534nobodyさん2009/12/01(火) 21:09:47ID:???
春日じゃね?
0535nobodyさん2009/12/01(火) 22:56:59ID:???
それならhrhになるだろ
0536nobodyさん2009/12/02(水) 00:42:54ID:???
どういう暗号化だよ
0537nobodyさん2009/12/02(水) 01:02:04ID:???
効率いい
0538nobodyさん2009/12/02(水) 08:41:37ID:???
>>535
ややうけ
0539nobodyさん2009/12/02(水) 13:04:05ID:???
サラブレッド
高速型
0540nobodyさん2009/12/02(水) 19:35:34ID:???
>>531
datasourse系は情報が少ないよね。
0541nobodyさん2009/12/02(水) 19:45:19ID:???
>>531
ソース読めばいいんじゃね?

いやダジャレじゃなくてまじで
まあその前にmdbファイルとやらの仕様調べてこいって話だが
0542nobodyさん2009/12/03(木) 20:35:05ID:???
そーっすね!
0543nobodyさん2009/12/04(金) 00:15:22ID:???
だれかへるぷ

http://localhost/hello/bye/
ってアドレスがあったら、まず
DefaultControllerのhello actionを探して、有ったら、
それを実行。

なかったらHelloControllerのbye actionを探して実行

ってなカスタマイズしたいのですけど、よくかわりません

だれかおしえてぽ

というかそのようなことが可能かどうか
というかオープンソースだから不可能はないだろうけど・・・
とはいっても、cakeのcoreに本格的にメスを入れるほど技量はないかも。
0544nobodyさん2009/12/04(金) 07:38:54ID:???
>>543
Routingでは対応できないから一旦振り分け用のaction呼んでそこからrequestActionすればできるけど
でもそもそもそんなことするシーンが分からん
具体的な例をおくれ
0545nobodyさん2009/12/04(金) 09:52:00ID:???
>>544
routingで出来ないとわかっただけでも有り難いわ。でないと、その辺の資料あさり続けていたし。でもそれをやってしまうとケーキの良いところがそげてしまうねえ。そうするしかないか

カテゴリーに分別して表示する情報サイトみたいなの作ろうとしてて、そのカテゴリー自体はウェブ上で可変なんだけど、URLはカテゴリーを全面に使いやすくしたいので、いきなり、
http://localhost/category1/category2/
ってアクセスで、category1に属するcategory2に属する情報を表示させたいの。でも、登録画面は、
http://localhost/regist/
だったり管理者画面が
http://localhost/admin/hogehoge/
とかっていうのもあるので、

http://localhost/category1/category2/
があったら、まず、
class Category1のCategory2アクションを探して、
なかったら、
class DefaultController extends AppController {
function showCategory() {
$mainCate = $this->param['pass'][0]
$subCate = $this->param['pass'][1]

echo "あんたは、$mainCateの$subCateにいるぜ!";
}
}
って感じのデフォルトコントローラに制御を移行してページを表示。

http://localhost/regist/
みたいのでアクセスしたら、同じようにclass Registのindexアクションを探して、実行。って感じ。

なんか、実際整理して書いてみたら、昨日書いたのと話が変わってしまったwwほんとはやりたいのはこれ。
05465442009/12/04(金) 13:04:04ID:???
>>545
CategoriesControllerを置いて、apacheで書き換えるのが良いと思うがどうか
0547nobodyさん2009/12/05(土) 02:07:06ID:???
カテゴリーの数にもよるかも
でも俺も546に同じ
05485452009/12/05(土) 15:35:56ID:???
CetegoriesControllerってのは、545で言うDefaultControllerの役目だよね。
でもapacheでどう書き換えるのかイメージが沸かない
ああぁ
0549nobodyさん2009/12/05(土) 16:23:04ID:???
cakephpでcron使いたいんだけど
「外部からのアクセス禁止でcronからのみ叩けるアクション」
を作るにはどうしたらいいですかね。
0550nobodyさん2009/12/05(土) 16:38:05ID:???
ローカルからだけ叩けるようにしとけば?
0551nobodyさん2009/12/05(土) 17:01:27ID:???
>>550
ありがとう。
function _test(){

}

だとだめだった。
レンタルサーバーだからローカルからってのもよくわからなくて。
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:???
サーバー負荷はアクセス数に左右される事が多いと思う。

大量の画像表示といっても、人気無いサイトなら負荷も一過的であまり問題にならないのでは。
それより、大量画像表示で気をつけないといけないのは、回線に負荷をかけるという事だよな
■ このスレッドは過去ログ倉庫に格納されています