【PHP】フレームワーク CakePHP 3ホール目【本命】
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2008/03/14(金) 15:16:00ID:HF9x5ODX10分で作るCakePHPアプリ for Windows
http://p4life.jp/cake/
マニュアル日本語化
http://www.cakephp.jp/doc/
日本語フォーラム
http://cakephp.jp/modules/newbb/
あとこのへんとか(初心者向けTIPS)
http://www.avatarfinancial.com/pages/cake/
CakePHP入門リンク集
ttp://pub.studio15.jp/2007/11/13/cakephp-links/
【PHP】フレームワーク CakePHP 2ホール目
http://pc11.2ch.net/test/read.cgi/php/1194976228/
【PHP】フレームワーク CakePHP
http://pc11.2ch.net/test/read.cgi/php/1163850802/
0755nobodyさん
2008/04/26(土) 22:37:46ID:???えーと、core.phpだっけ? セキュリティレベルを設定するところ。
あそこが一番高いと、接続するたびに、セッションIDが変更される。
だから途中でエラー?とかあると、サーバー側ではセッションIDの情報が変わっているのに
クライアントでは新しいセッションIDをもらきれておらず、セッションIDが切断=クリアされてしまう。
だから俺はセキュリティレベルを中にした。
0756755
2008/04/26(土) 22:41:33ID:???> slywalker 投稿日時: 2007-11-5 12:58
この人と同じこと。
0757nobodyさん
2008/04/26(土) 23:10:06ID:Uwx0xpWGセションをwriteした直後にreadしてみたら、ちゃんと設定されてるのは確認できたんですけどね。
次の画面でreadすると空になってる。ん〜困った。
0758nobodyさん
2008/04/26(土) 23:38:17ID:???セキュリティソフトとか。
0759nobodyさん
2008/04/26(土) 23:42:15ID:???確認するのはあまり意味無いよ。
なぜなら、情報が実際にセットされるのは
ブラウザにクッキー情報が返ってからだから。
ieHTTPHeadersやLive Http headers
ブラウザのクッキー情報を見るツールを使って
調べてみよう。
0760nobodyさん
2008/04/27(日) 00:07:57ID:???自分の使い方の問題もあるだろうけど、databaseがなんかうまくいかなかった。
0761nobodyさん
2008/04/27(日) 00:41:14ID:DD3/O3h6いま↓を見てるんだけど、aタグによるリンクで画面遷移させるので、
セッションIDを付加しないといけないことがわかった。
ttp://cakephp.jp/modules/newbb/viewtopic.php?topic_id=840&forum=3&post_id=1579
これからやってみます。
0762nobodyさん
2008/04/27(日) 02:40:18ID:???sqlのCASEはquery対処なんかなあ。$optionsでいけたりする?
0763761
2008/04/28(月) 00:00:23ID:???URLにセッションIDを付加する方法でやるしかない。
PCサイトの場合は、セッションハイジャックの危険性があるからURLへのセッションID付加は使えない。
結局、セッションを使わずcookieで運用する方法で実装しました。
本来の意味でのセッションではなく、単なるデータの引き継ぎ用途なので、cookieでよいかと。
0764nobodyさん
2008/04/28(月) 20:32:23ID:???ttp://pc11.2ch.net/test/read.cgi/php/1207863515/236-249
0765nobodyさん
2008/04/29(火) 00:30:20ID:???0766nobodyさん
2008/04/29(火) 00:50:53ID:???何かバグにぶち当たったのかもしれんけど、こんな風にいい逃げする
荒らしもいるしなぁ。
本当に困ってるのなら、具体的なバグ例を挙げてみるといいよ。
そしたら対処方法も出るかもしれないし。
話は変わるけど、前のレスでも出てたし、みんな知ってるのかもしれないけど、
このサイトいいね。参考になる。
テンプレに載せてもいいんじゃない?
ttp://bakery.cakephp.org
0767nobodyさん
2008/04/29(火) 02:39:08ID:???宣伝乙^^
0768nobodyさん
2008/05/01(木) 10:47:29ID:oWWm9vMD親のmodifiedを更新したいのですが、どのようにすればいいでしょうか?
子のデータ更新をするcontrollerでいっしょに更新しようとしたのですが、
上手くいきませんでした。
32 function edit($id = null)
33 {
34 $this->Response->id = $id;
35 $thread_id = $this->Response->field('thread_id');
36
37 if ($this->Response->saveField('cooking_name',$this->data['Response']['cooking_name']))
38 {
39 $this->Thread->saveField('modified',$this->data['Response']['modified']);
40 $this->redirect( '/responses/view/'. $thread_id . '#' . $id);
41 }
42 }
modelはこの通りです。
7 var $belongsTo = array('Thread' =>
8 array('className' => 'Thread',
9 'conditions' => '',
10 'order' => '',
11 'foreignKey' => 'thread_id'));
0771768
2008/05/02(金) 02:37:54ID:???39行の手前で、親の方にidを設定したところ、きちんと更新されました。
$this->Thread->id = $thread_id;
0773nobodyさん
2008/05/07(水) 00:15:31ID:ehDEto56展開したいのですが、どうすればいいでしょうか?
対応するコントローラもなさそうだし・・・。
0775773
2008/05/07(水) 00:29:55ID:???というと、複数のviewで使いたい場合は、各コントローラ、各アクションで
setするという事でしょうか?
あるいは、全てのコントローラの前に読み込まれる、共通コントローラみたいのが
あったりするのでしょうか。
0777nobodyさん
2008/05/07(水) 14:32:05ID:???0779773
2008/05/08(木) 01:09:40ID:???requestActionで取得する事にしました。
http://cakephp.jp/doc/ch07s02.html
/views/layouts/default.thtml
<?php echo $this->set('users', $this->requestAction('/users/getUserList'), array('return')); ?>
<p><?php $user_numbert = array_rand($this->viewVars['users']);
echo $this->viewVars['users'][$user_numbert]['User']['name']; ?></p>
0781nobodyさん
2008/05/08(木) 09:23:20ID:???function beforeRender() {
# ここに/users/getUserListの中身とかを
$this->set('user_numbert' , $user_numbert);
}
default.thtml
<?php e(h($user_numbert['User']['name'])) ?>
0782nobodyさん
2008/05/08(木) 09:34:15ID:???0783nobodyさん
2008/05/08(木) 19:24:13ID:???フォームの画面遷移のときのデータの持ち回り方について・・・
1.普通にhiddenで埋め込む
2.serializeしてbase64_encodeしたものをhiddenで埋め込む
3.serializeしてbase64_encodeしたものをセッションに書き込む
などが考えられますが、
CakePHP的には、どの方法がベターでしょうか?
0784773
2008/05/09(金) 01:55:42ID:???じゃないや、スマートな実装ができました。
どうもありがとうございました。
0787783
2008/05/09(金) 18:55:31ID:???すみません。よくわからないで書いてしまいました;;
シリアライズだけで十分ですか?
>>786
最終的にsaveするまえにしっかりバリデートすれば、それでも問題ないのかもしれませんね・・・
でもやっぱりソース見たときに、パスワードとかメールアドレスがもろに書いてあると、
このサイト大丈夫か??って気になりますが・・・
ちょっと気になったのですが、PEARのHTML_QuickForm_Controllerなんかは
どの方法なんでしょうか??
0788nobodyさん
2008/05/09(金) 20:19:38ID:???不満を言う余裕はあるくせに
戦争する暇もある
0789nobodyさん
2008/05/10(土) 00:11:55ID:???ソース見られたらっていうのは確かにある。
しかもそれを無理矢理改ざんして入力不可の文字を入力される可能性もある。
しかし、よほどのサイトじゃないとそこまでハッカーも暇じゃないから攻撃しないのでは?
と思います。
現に、ここ 5年ほど、何も問題ありませんでした。
0791nobodyさん
2008/05/10(土) 17:55:53ID:???セキュリティ目的ならbase64_encodeは用をなさないという認識。
>>789
データはhiddenで埋め込んでおいて、$this->dataをserialize後saltつけてハッシュ化したやつを別でhiddenに埋め込む
↑のふたつを比較して整合性チェックとか?
0792nobodyさん
2008/05/10(土) 18:59:59ID:???ばれてるぞ!
0793nobodyさん
2008/05/10(土) 19:29:59ID:???0794nobodyさん
2008/05/11(日) 11:28:50ID:qWqUPYxDと言いつつ、いつもこっちに書くのだけど・・・。
下の記事を参考に、携帯用ページを作っています。
ttp://www.1x1.jp/blog/2008/04/cakephp_12_routing_prefix.html
で、paginateでページングされているのですが、ひとつ問題が。
pagineateの結果、下のようにURLが生成されるのですが、
携帯エミュレータ(P1エミュレータを使用)で確認したところ、
どうやら「page:2」のセミコロンが、有効な値ではないとエラーになるっぽいです。
<a href="/~recipe/m/responses/view/page:2">2</a>
これって、どう対応すればいいのでしょう?
0795nobodyさん
2008/05/11(日) 12:01:33ID:???0796794
2008/05/11(日) 13:42:34ID:???Router::connectですね。
ふぉぉ、すぐに答えていただきありがとうございます!
PC側の方もちょっと調整が入りますが、おかげで解決しました!
0797nobodyさん
2008/05/12(月) 02:29:40ID:8yg2YXGeバリデーションルールが多様になったほかに、create時update時それぞれに有効無効に
できるなんてこと知ったのだけど、その他含めてちゃんとまとまった情報ってないかな
0798nobodyさん
2008/05/12(月) 18:22:39ID:???たとえば、
ログイン後にユーザーメニューからユーザ名の変更などを行った場合、
セッションには変更前のユーザ名が格納されているため、
ヘッダーなどに表示されている
「ようこそxxさん」のような表示が変わらない、ということになってしまいます。
いちおうの解決策としては、
セッションにはIDのみを格納しておいて、
app_controllerで
毎回、$this->User->findByIdしてセッションに記憶させるという方法をとっていますが、
あまりスマートではありません;
ユーザ名の変更処理の直後のみユーザ情報を取得しなおしたいのですが、
なにかよいアイデアはないでしょうか?
0800nobodyさん
2008/05/12(月) 22:27:51ID:???DBからデータをviewで表示するだけなら1.2でも大丈夫かな?
現在は1.1で運用中。
多言語対応が1.2でやりやすいのなら、1.2で作りかえるんだけど。
0801nobodyさん
2008/05/12(月) 22:35:05ID:???俺はやっちゃったw
半年ぐらいCakePHP使っていて、コアの中まで見てると
大丈夫なんじゃないかなぁと思う。
バグではないが、ベータ版だから仕様が変わるのが
ちょっとネック。
0802794
2008/05/13(火) 00:21:01ID:???いま、2ちゃんねるのレシピ集のサイトをCakePHP1.2で作ってます。
paginatorなどが使いたかったのと、バグっても差し支えないので。
で、ひとつバグらしきのに当たりました。
先に書いた通りのページを参考に、URLルーティングのprefixを使って
携帯用とPC用のページを作り分けしたのですが、この状態でpaginatorを使うと、
PC側のページで、$paginator->prev、nextで何故か携帯用のURL
(/m/:controller・・・)へ飛ばされる事象が。
prefixを設定する前は発生していませんでした。
原因は不明ですが、これまた何故か$paginator->optionsの設定次第で
事象が発生したりしなかったりするので、発生したPC用ぺージでは、
$paginator->options(array('url'=>array("test" => 'test')))
と、ダミーのURLオプションを追加してごまかしています。
0803nobodyさん
2008/05/13(火) 02:42:36ID:???乗り換えるべきかどうか迷う・・・
0804nobodyさん
2008/05/13(火) 13:48:12ID:???cakephp 1.1 も 1.2 も両方開発してアップしてますけど両方問題ないですよ。
ただ、モバイルサイトも作ろうと思えば 1.1 の wevservices が便利です。
0805nobodyさん
2008/05/13(火) 18:13:48ID:???0806nobodyさん
2008/05/13(火) 19:48:08ID:???最後にheaderでContent-typeなどを指定するわけですが、
controller.phpのheader(”location...とかぶってしまって、エラーが出てしまいます。
みなさんはどのように処理しているのでしょうか?
わかりずらくてすみません・・・;
0807nobodyさん
2008/05/13(火) 19:56:04ID:???わかるわかる。
<img src="hoge.php?=">
みたいなので読み出すやつでしょ?
僕はギブアップしましたね。
ttp://www.hideblog.net/thumbnails/
を使ってます。
0808806
2008/05/13(火) 20:02:52ID:???それです!
わかってもらえて安心しました。
リンク先のものは、キャッシュに保存してそれを表示する、というものでしょうか?
これはこれで便利ですが、やはりできればストレートに表示したいですね・・・
0809nobodyさん
2008/05/13(火) 22:25:09ID:Akbr9Dkjob_clean()はどうでしょう。
0810nobodyさん
2008/05/13(火) 22:27:45ID:???まったくもって意味がわかりませんが
たぶんこれで解決でしょう。
http://www.ideaxidea.com/archives/2008/01/cakephpcsv.html
0811nobodyさん
2008/05/14(水) 09:31:44ID:???たとえばタスクをステータス別に表示する場合
コントローラ側で、
$this->set('yet_tasks', $this->Task->findAllByStatus('yet'));
$this->set('done_tasks', $this->Task->findAllByStatus('done'));
のように二度取得するのと、
$this->set('tasks', $this->Task->findAll());
として、
ビューで
foreach ($tasks as $task) {
if ($task['Task']['status'] == 'yet') {
echo ....
とするのでは、
どちらのほうがパフォーマンスが優れているのでしょうか?
ご教授お願いします。
0812nobodyさん
2008/05/14(水) 09:48:17ID:???0813nobodyさん
2008/05/14(水) 09:49:25ID:XltYBCAy後者のほうは、、ビューにあまりそこまで複雑なロジックを記述することによるコードの効率の悪さ
という点でパフォーマンス難ありかも。
対象となるデータ量次第だけど、そこまでデータが多くなくてサーバのスペックが十分であれば前者の方が
コーディングは早いんじゃね?個人的な意見だけど。
0814nobodyさん
2008/05/14(水) 13:49:50ID:???>>809>>810
その方法は試してませんでした。
次回やってみようと思います。
ありがとうございます。
0815nobodyさん
2008/05/14(水) 14:46:18ID:???viewいじった方が早かったりするんで、
ついついやっちゃうんだよなぁ。
んで、気づいたらviewがえらいことにw
0816nobodyさん
2008/05/15(木) 00:40:28ID:???サーバー関連の知識が全くないのですが、
アプリ完成後の公開寸前で困らないためには、
CakePHPを選んでおいたほうが、すんなり公開できるでしょうか?
0817nobodyさん
2008/05/15(木) 00:57:18ID:???どっちも自分で試したほうがいいと思う。
俺は慣れてるからCake好きだけど。
最低限のアプリ作って鯖置くまで試してみる事をオススメする。
0818816
2008/05/15(木) 01:04:37ID:???レスありがとうございます。
Cakeならば格安のレンタルサーバで試してみることもできるのですが、
Rubyとなるとそこそこ値の張るところでないとダメみたいで、
それだけのお金を出して、設置できなかったとなると・・・
1.2の安定版ももうすぐみたいですし、
やっぱり初心者にはCakeなんですかねぇ・・・
0820nobodyさん
2008/05/15(木) 17:54:14ID:???むしろサーバーを管理できるかどうか。
http://www.fs-virtual.jp/spec/hikaku.html 945円/月〜
http://www.tsukaeru.net/plans/vps/ 2480円/月〜
http://www.ymc.ne.jp/service/managed/plan/index.html 4950円/月
0821nobodyさん
2008/05/15(木) 21:43:23ID:???☆ チン 〃 ∧_∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄
ヽ ___\(\・∀・)< 1.2まだー?
\_/⊂ ⊂_)_ \_______
/ ̄ ̄ ̄ ̄ ̄ ̄ ̄/|
|  ̄  ̄ ̄ ̄ ̄ ̄ ̄:| :|
| .|/
0822nobodyさん
2008/05/19(月) 16:23:52ID:???http://dsi.vozibrale.com/articles/view/mediaview-is-a-bleeding-bastard
http://bin.cakephp.org/view/1026359650
を読む限り、特殊なファイルをダウンロードさせたいときとかに使うみたいだけど、
適当に読む限りファイルを出力するヘッダー情報の段階のことしか書かれていない。(あ、Viewの部分だから当然か)
おそらく、データーベースからグラフをGDとかでスクリプト側で作ったものを表示する場合なんかで
使うんだろうけど、このスクリプトで合成した画像のバイナリデーターはどのタイミングで、どこの関数に格納すればいいのやら?
0823877
2008/05/20(火) 09:40:48ID:xs/omlLeにアクセスするとhttp://IP/controller/indexが
デフォルトで実行されますけど、このアクションを変えるには
どうしたらいいですか?
0824nobodyさん
2008/05/20(火) 11:01:51ID:???http://cakephp.jp/doc/ch04s03.html
かな
0825nobodyさん
2008/05/20(火) 11:16:01ID:???絶対に手を入れるところ
推奨されているところ
とか
はまりポイント
とか
0826nobodyさん
2008/05/20(火) 11:38:08ID:???■絶対に手を入れるところ
・設定ファイルの変更(Warning出しながら動くけど)
# /app/config/core.php
define('DEBUG', 1);
→ Configure::Write('debug', 2);
→ Configure::write('Security.salt', 'your original string'); # add
・ヘルパー変更に伴い、view全般
非推奨または廃止されたもの
$html->input
$html->submit
$html->tagErrorMsg etc...
新たに強化・追加されたもの
FormHelper
PaginatorHelper
XMLHelper
■推奨されている
・validatesに引数を渡さない
$this->ModelName->validates($this->data);
→ $this->ModelName->data = $this->data['ModelName'];
→ $this->ModelName->validates();
・viewの拡張子
action_name.thtml
→ action_name.ctp
間違いあったら訂正よろしく
0827nobodyさん
2008/05/20(火) 13:22:09ID:???0828nobodyさん
2008/05/20(火) 19:13:39ID:???SELECT * from `Model` WHERE ( `Model`.`field_1` like '%xxx%' OR `Model`.`field_2` like '%xxx%' ) AND `field_3` = 'yyy';
みたいなSQLを発行したい場合の$conditionsの指定はどうしたら良いのでしょう?
また、
SELECT * from `Model` WHERE concat( `Model`.`field_1` , `Model`.`field_2` ) like '%xxx%';
というのも知りたいです。
0829nobodyさん
2008/05/20(火) 19:19:52ID:wZOYKZBI良い方法か参考ページがあったら教えて下さい。
0830nobodyさん
2008/05/21(水) 01:03:54ID:+T6Kz2/1その時点で候補から外れたね。
0832nobodyさん
2008/05/21(水) 01:57:45ID:???そんなに大変?
たしか、RoRでもあったと思うけど。
idとcreatedとmodifiedくらいしか意識した事ないけど、
他にもあるのかな?
0833nobodyさん
2008/05/21(水) 02:29:51ID:???0834nobodyさん
2008/05/21(水) 10:27:32ID:???name or title フィールドでgenarateListが自動的にidと配列を返す
あとは、xxx_id とか xxx_yyy とかのアソシエーション系かな?
いずれにせよCoCの理念に同調できない人はRoRをはじめとしたフレームワークは無理だわな。
RoRではなく、Cakeスレに書き込む>>830に乾杯
0835nobodyさん
2008/05/21(水) 12:50:06ID:???そういえばそんなものもあったね。1.2では
find('list')にかわるわけだけど。
ソース見たけど、1.2betaの段階では、フィールド名指定する方法
無かった気がする。なんでだろうね。
結局は、genarateListを1.2で動かしたときの警告の通り
find('all')の検索結果をSet::combine($results, $keyPath, $valuePath);
しているだけなんで、自分でやればいいんだけどね
> あとは、xxx_id とか xxx_yyy とかのアソシエーション系かな?
これはなぁ・・・みんな同じような名前のつけ方しない?
○○テーブルのIDなんだから○○_idって。
0836nobodyさん
2008/05/21(水) 18:07:50ID:???コントローラ名とかメソッドの名前とか考えるのホント嫌。かっこいい名前考えるセンス無くて。
0837nobodyさん
2008/05/21(水) 18:10:51ID:???0838nobodyさん
2008/05/21(水) 18:29:28ID:???非英語圏の俺涙目
0839nobodyさん
2008/05/21(水) 22:53:45ID:???あれ、こんなところに俺がいるぞ?w
最近、アルクで調べるようになって、ちょっと楽になった。
ttp://www.alc.co.jp/
カラム名は適当な英語でいいが、テーブル名はきちんとした英単語になってないと、
単複の変化がねぇ。。。
0840nobodyさん
2008/05/21(水) 22:58:34ID:???どうもウェブだと時間がかかる。
おれはMS Officeについていたbookshelfを使っている。
0841839
2008/05/21(水) 23:38:50ID:???Bookshelfか。懐かしいなぁ。
Bookshelfもいいんだけど、アルクは例文がいろいろ出てくるので、
そこがおすすめ。
たしかにローカルの方が速いけどね。
0843nobodyさん
2008/05/22(木) 09:57:07ID:???sqliteファイル(app/webroot/cake.sqlite)を用意してから
cake.phpを実行しているけどエラーメッセージが出て怒られる。
sqliteファイル(app/webroot/cake.sqlite)を
./cake.sqliteに移動してやると「Bake All complete」。
□エラーメッセージ
$ php cake/console/cake.php bake all Post
...
Error: Missing database table 'posts' for model 'Post'
□app/config/database.php
<?php
class DATABASE_CONFIG {
var $default = array(
'driver' => 'sqlite',
'persistent' => false,
'host' => 'localhost',
'port' => '',
'login' => '',
'password' => '',
'database' => 'cake.sqlite',
'schema' => '',
'prefix' => '',
'encoding' => ''
);
}
?>
0844nobodyさん
2008/05/22(木) 13:44:12ID:???Data : 複数形
Datum : Dataの単数形
CakePHPやるまで知らんかった。。。
0845始めるっす さん
2008/05/23(金) 16:47:14ID:b0nY9q6kCAKEを使う際、一番いい、IDEは?
http://www.asial.co.jp/vsphp/
↑は、どうですか? よろしくお願いしまっす(@^^)/~~~
0846nobodyさん
2008/05/23(金) 16:57:32ID:???0848nobodyさん
2008/05/23(金) 17:10:31ID:???ここは中2以下ばかりだったのか。
まあ、あおりはともかくとして、
この業界、Allow をアロー、Denyをデニーと発音する低脳が異常に多いよな。
ここまで自然言語の才能が乏しいと、プログラム言語をいくらがんばっても限界が低いだろうね。
0850始めるっす さん
2008/05/23(金) 17:35:52ID:b0nY9q6kいえ、業者の者ではありません(~_~;)
エクリプスのジャバーでしたが、CAKEを使うことになりました…
PDTとかも良いかなーと思いましたが、
ちと、芸が浅い(@_@。
何か良い、ツールを教えてくださいっす(^^)/~~~
0851nobodyさん
2008/05/23(金) 19:09:24ID:???セオはリスク管理できないから、
ダメーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー!!!!!!!!!
0852nobodyさん
2008/05/23(金) 22:56:00ID:???ハァハァ〜
0853nobodyさん
2008/05/24(土) 01:49:40ID:UmgGcxR0DBのトランザクション管理とかってどうやってる?
SpringとかのDI/AOPに代わる画期的な方法とかあるの?
0854nobodyさん
2008/05/24(土) 09:43:12ID:???0855nobodyさん
2008/05/24(土) 11:08:39ID:???※ちょっとスレ違いでゴメン。
DI/AOPを使えば、ロジック層の前後で自動的にトランザクションの
開始とコミットを行うように設定できる。
だからロジック層では特にトランザクションを意識しないで
純粋にロジックだけを記述できる。
もし、ロジック層で例外が発生した場合は自動でロールバックもしてくれる。
他にもログの記述とかオブジェクト指向では対応できない
横断的な処理はAOPの機能を使ってメソッドの呼び出しの前後で
自動的に挟み込んでくれたりできる。
ってな感じでやってるとDI/AOP無しのアプリはきついなーと
思うんだけど、そこら辺はうまいやり方があるのかね?
■ このスレッドは過去ログ倉庫に格納されています