【PHP】フレームワーク CakePHP 8ホール目【1.3】
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2010/03/18(木) 10:00:59ID:6+kHM8kHCakePHPから派生した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
0555nobodyさん
2010/06/19(土) 15:47:58ID:???「デフォではxを選択した状態だけど、バリデーションエラー時とかにはユーザーが選択した状態」
にするにはどうしたらいいの?
optionでselected設定しちゃうと、バリデーションエラー時にその設定が優先されちゃって
ユーザーの選択じゃなくなっちゃうんだけども
0556nobodyさん
2010/06/19(土) 16:10:46ID:???で普通にいけない?
ユーザからのデータがない場合は、$valueに初期値を設定するようにして、
ユーザからのデー座がある場合は、それを上書きして view に渡す。
0557nobodyさん
2010/06/19(土) 16:40:56ID:???>ユーザからのデータがない場合は、$valueに初期値を設定するようにして、
やっぱりそれしかないのかな
フォームヘルパー自体でそういう機能を備えてくれてるといいんだけど、
コントローラー側で一手間かかるのを、出来れば省略したい
0558nobodyさん
2010/06/19(土) 17:08:19ID:???つ array('default' => 'x')
あんまり使ったことないけどね
初期値与えるならcontroller(model)のほうがいいと思うなあ
0559nobodyさん
2010/06/19(土) 17:34:03ID:???まさにそれ!ありがとう!
確かにモデルと関連させてデフォを決める場合には、ヘルパーで決めちゃわない方がいいかもしれないけど、
とりあえずこれで行くわ
0560nobodyさん
2010/06/19(土) 17:40:13ID:???あ、最後のはひとりごとだから気にしないで
あと、データが0のときは、デフォルトの値に上書きされるかも。要注意
0561nobodyさん
2010/06/19(土) 17:44:38ID:???0562nobodyさん
2010/06/19(土) 18:02:08ID:???0565nobodyさん
2010/06/19(土) 20:24:22ID:???かわいそうだろ
0566nobodyさん
2010/06/19(土) 21:06:08ID:???一番低脳だというのは言うまでもない話。
0567nobodyさん
2010/06/19(土) 21:50:44ID:???例えば
/status:active/page:2 にアクセスすると
nextのリンクは /page:3/status:active になる
といった感じです
コードを追ってみたところ、pagination helperの中でnamedパラメーターを配列として扱って、
array_margeを何度か行っている関係で、pageが配列の一番最初に来てしまって、結果、
URLの一番最初のnamedパラメーターとして表示されてしまっているようです
pagination helper自体をいじって、最終的にpageを配列の一番最後に持ってくれば
正しく動きそうですが、他にもう少しスマートな方法はないでしょうか・・・
0568567
2010/06/19(土) 22:20:31ID:???if(isset($url['page'])) {
$page = $url['page'];
unset($url['page']);
$url = array_merge($url, array('page'=>$page));
}
を追加したら、page:xが一番最後に来るのを確認できました
0569551
2010/06/19(土) 23:15:37ID:iks7bUVlそりゃわかるんですけど
そもそも読み込まれないのがなんとかならないかという話です。
App::import('Helper', 'Form');
App::import('Helper', 'Html');
$form = FormHelper;
$form->Html = HtmlHelper;
ここまでやればHtmlがないとは怒られないですが、$form->webrootがセットされていなかったりと、
そもそもApp::import('Helper' が用意されているのにも関わらず、
ちゃんと使える状態にならないってのもおかしいのではないかと思い質問させていただきました。
0571nobodyさん
2010/06/21(月) 13:51:06ID:???0572nobodyさん
2010/06/21(月) 17:40:58ID:???で、適切なデバッグレベルの場合はテストが実行されますが、これを無効にする方法はありますか?
本番リリース時などでデバッグレベルを0にした場合、テスト自体は行われませんが
「Debug setting does not allow access to this url.」
などというメッセージが出てきます。
こういう場合はwebroot直下のtest.phpを削除するのが正しいですか??
0574nobodyさん
2010/06/22(火) 20:20:10ID:???0575nobodyさん
2010/06/22(火) 20:47:10ID:???その中でヘルパーを使いたいときは
引数で渡す以外にどうすれば上手くできるでしょうか
0577nobodyさん
2010/06/23(水) 02:28:29ID:???退会すると当然Authによりはじかれてログインはできないけど、
写真に直接アクセスされたとき、はじかれませんよね?
写真一枚表示するのにCakeのコア動かしてAuthログイン判断してってのは負荷が心配だし
なにかいい方法ないですかね?
ファイル名をランダムにしててもメモされたら意味ない
でもメモする位ならファイル保存しない?じゃあよくね??みたいな永久ループしてます。
0578nobodyさん
2010/06/23(水) 02:41:17ID:???コストと実利を天秤にかけろ
0579nobodyさん
2010/06/23(水) 09:38:51ID:???ttp://neta.ywcafe.net/000774.html
この考え方で出力すればよい
(キャッシュは定期的に削除する)
が、どのみちURL叩かれたら退会前でも会員以外の人に見られるのは一緒
mixiが以前そうだったね
0580nobodyさん
2010/06/23(水) 12:39:45ID:hpuIM/fTどこが原因かチェックする方法ってありますか?
Controller自体は、find() を2回使って、出力するHTML自体も20Kb程度です。
0581nobodyさん
2010/06/23(水) 12:44:17ID:???0583nobodyさん
2010/06/23(水) 13:58:09ID:???cake\basics.phpに追加する以外に
何か方法はありますか?
0584nobodyさん
2010/06/23(水) 14:11:23ID:???0586nobodyさん
2010/06/23(水) 18:19:33ID:???Authコンポーネントを使い基本的なログイン機能を作っていたのですが
core.phpを書き換えてセッションをDB管理したら
ログイン出来なくなりました。
エラーメッセージも出ず、auth.phpを上から見ていってるのですが
どこでつまづいてるのかわかりません。
セッションをDB管理し、authを使うには何か設定が必要でしょうか
0587nobodyさん
2010/06/23(水) 18:20:11ID:???それを使わずmysql_connectやpear::DBを使ってDB接続することはありますか?
0590nobodyさん
2010/06/23(水) 23:04:49ID:???こんなもんいらね
0591nobodyさん
2010/06/23(水) 23:10:47ID:???ていうか開発者から、取るのを推奨されているんだっけ?
何のためかは良く知らないけど
改行が入ったりの予防くらい?
0592nobodyさん
2010/06/23(水) 23:24:38ID:???でも最初からあるコードは基本的に放置だな
むしろ手を加えることで何か不具合出してしまいそう
0595nobodyさん
2010/06/24(木) 00:29:11ID:???0596nobodyさん
2010/06/24(木) 01:10:16ID:???0597nobodyさん
2010/06/24(木) 02:10:58ID:???何いってんの?
0598nobodyさん
2010/06/24(木) 08:28:24ID:???ちげぇよ愛だよ
0599nobodyさん
2010/06/24(木) 13:44:40ID:???coreに記述されているハッシュの種が変わったから、
違うパスワードが生成されているんじゃないの?
照会SQLを確認してみな。
0600nobodyさん
2010/06/24(木) 23:26:58ID:???そのうちPHPの仕様が変わって絶滅するだろうな。
ガハハハハハハハハ
0601nobodyさん
2010/06/24(木) 23:45:45ID:SNEZsqXVとcakePHPによる実践アプリケーション開発 という本に
例があり一部抜粋したのですが、この先頭のeとは何なんでしょうか?
0603nobodyさん
2010/06/25(金) 08:04:32ID:???Ajaxで使うときはエラーになって邪魔です。Ajaxで使うときは出力しないようにできませんか?
0604nobodyさん
2010/06/25(金) 08:55:39ID:???beforeRenderとかで
if ($this->RequestHandler->isAjax()) Configure::write('debug',0);
って感じ
0605nobodyさん
2010/06/25(金) 10:22:11ID:???照会SQL確認して、
セッションテーブルのIDをintにしていたのが間違っていました
ばーちゃーにしたらうまく動きました。
ありがとうございます!
0607nobodyさん
2010/06/25(金) 18:49:37ID:0V5oobxvありがとうございました。
0608nobodyさん
2010/06/25(金) 20:47:40ID:???0609nobodyさん
2010/06/25(金) 20:55:23ID:???0610nobodyさん
2010/06/28(月) 01:42:58ID:???0611nobodyさん
2010/06/28(月) 04:10:11ID:???何ができれば”既存案件で使える”になるんだ?
0612nobodyさん
2010/06/28(月) 10:41:06ID:???情報の引き渡しにsessionを多用してたら、複数のブラウザを立ち上げて
並行してオペレーションを行うと動作がおかしくなりました。
同じsessionを複数のオペレーションから参照してるので当たり前といえば
当たり前なのですが。
こんな場合はURIにsession idを含めるとか、そういう対処が一番ですかね?
0613nobodyさん
2010/06/28(月) 11:07:09ID:???でもどうなった
だからおかしいと思ってる
ってのが分らなけりゃ答えようがないと思わないかい?
はいかいいえで答えてくれ
0614nobodyさん
2010/06/28(月) 11:30:46ID:???0615612
2010/06/28(月) 11:56:53ID:???はい、その通りです。例をあげると
http://sample.sakushima.net/Cake/sessions/
ブラウザを2つ立ち上げて、このページをそれぞれ開きます。
2つのブラウザを順番にリロードすると、リロードした順に1,2,…と回数が上がります。
2つのブラウザで同じSessionを共有しているので、この動作は正しいと思います。
やりたいことは、上記の動作を行った際、2つのブラウザそれぞれで1,2,…と回数を上げたいのです。
実現方法ご存じの方お教えください。
0616nobodyさん
2010/06/28(月) 12:06:27ID:???認証済みのユーザーということじゃないんだよね?
そうすると、2つのブラウザのアクセスが同一人物だと判定しなきゃいけない
URLに埋め込むとセッションハイジャックされるリスクを負うんじゃまいか?
0618nobodyさん
2010/06/28(月) 15:17:05ID:???Diary.id Diary.user_id Diary.body
Comment.id Comment.diary_id Comment.body
というDB構成で作っているときに、
「最新のコメント10件がが誰の日記に向けて書かれたか」を表示させるとき、
$this->Comment->findで、recursiveを2にしてデータを取ってきてるんだけど、
CommentとDiaryがJOINされるんだけど、それとは別にUserのデータを
取ってくるのに10回もSQLを投げてしまうのはしょうがないものなの?
CakePHPが副問い合わせに対応していないせい?
表示させたいのは
>最新のコメント10件
> こんにちは → Aさんの日記
> お久しぶりです → Bさんの日記
> 面白いですね → Aさんの日記
> ...
という感じなんだけど
0619nobodyさん
2010/06/28(月) 19:53:05ID:qHDwmPz9<TABLE width="400px"> として表にしてもブラウザの幅に
あわせて伸び縮みしてしまいます。
デフォルトのCSSファイルより、優先されると思うのですが何故でしょうか?
CSKEPHPはver1.2です。
0620nobodyさん
2010/06/28(月) 20:02:50ID:???htmlはpxいらねーよ
てか悪いことは言わん。この業界あきらめろお前は
0621nobodyさん
2010/06/28(月) 20:26:44ID:???0622nobodyさん
2010/06/28(月) 20:27:47ID:qHDwmPz9なるほど、うまくいきました。
ありがとうございました。
0623nobodyさん
2010/06/28(月) 20:36:54ID:???HTML/CSS/PHP/CakePHPこれらを切り分けもできずに
こんなところで糞な質問しちゃう奴なんざやめろ今すぐ。
0624nobodyさん
2010/06/28(月) 20:44:55ID:???今後は気をつけるだろう
0625nobodyさん
2010/06/28(月) 23:42:04ID:???0626nobodyさん
2010/06/28(月) 23:52:38ID:???1セッション当たり、10MBくらいは普通かな?
0627nobodyさん
2010/06/28(月) 23:54:20ID:???優しい奴だな。ちょっともえ
0628nobodyさん
2010/06/29(火) 07:25:59ID:???あそこは世紀を超えての名サイトだ。
0629nobodyさん
2010/06/29(火) 08:46:43ID:???これをリアルで言われて
言われたヤツやめちゃって
やめたヤツの仕事が俺に回ってきて
言ったヤツ知らん顔
俺涙目
0630612
2010/06/29(火) 12:04:06ID:???結局やりたいことというのは
「同時にブラウザを複数立ち上げたときに、それぞれ別々に状態を保持しておきたい」
ということです。極端な話、ブラウザ1・ブラウザ2でそれぞれユーザー1・ユーザー2
で認証をしたら、それぞれのユーザーで独立して動作するイメージです。
実際に作っているアプリでは、認証情報・画面遷移情報・入力データなど、結構な量の
データを画面間で保持する必要があります。実現方法として考えているのは下記です。
1.URLにSession IDを埋め込み、それを基にServer側で使うべきSessionを切り替える
→携帯サイト向けのサンプルは見つかった。いまいち良いサンプルが見つからない
2.引き継ぐ情報をまとめてシリアライズ・暗号化してURL・POSTで渡す(極力Sessionは使わない)
→通信データサイズが結構な量になるかも・・・
こうしたほうが良い等ご意見ありましたらお教えください。。
0631nobodyさん
2010/06/29(火) 12:16:19ID:???ん?>>616だけど完全に逆だと思ってた。
っていうか、違うブラウザなら、別のセッションだと認識されるのが普通だが、どんな環境でチェックしてるの?
FFとChromeでやってみたが、ふつうにそれぞれ独立してインクリメントされるよ??
0632612
2010/06/29(火) 12:47:04ID:???こちらではIE8、FF、Chromeともに下記の動作となります。
時系列で書きます。
ブラウザ1を起動
ブラウザ2を起動
ブラウザ1で「http://sample.sakushima.net/Cake/sessions/」を表示→表示回数:1
ブラウザ2で「http://sample.sakushima.net/Cake/sessions/」を表示→表示回数:2
ブラウザ1でF5(リロード)→表示回数:3
ブラウザ2でF5(リロード)→表示回数:4
0633612
2010/06/29(火) 12:55:56ID:???補足で、ブラウザ1・2ともに同じ種類のブラウザです。
もしかしたら616さん、ブラウザ1:FF・ブラウザ2:Chormeとか、
別のブラウザを立ち上げてるんじゃないかと。
0634nobodyさん
2010/06/29(火) 16:46:35ID:???サーバ側で何らかの識別データをGET/POSTで埋め込むのしか思いつかない。。
0635nobodyさん
2010/06/29(火) 17:07:06ID:???うん。そうだよ。別のブラウザでやった。
同じブラウザのタブ別で別ユーザーだと認識させたいの?
そりゃまた無茶なことを、、、
0636nobodyさん
2010/06/29(火) 17:11:36ID:???0637nobodyさん
2010/06/29(火) 17:35:04ID:???セッションが切れちゃって確かに鬱陶しいけど、まあ開発中の一時的なもんだしなあ。
0638nobodyさん
2010/06/29(火) 23:52:30ID:???0639nobodyさん
2010/06/30(水) 00:49:39ID:???データをmysqlに移行する以外は意外とめんどくさくない
0641nobodyさん
2010/06/30(水) 19:52:27ID:???Fatなコントローラーをmodelに集約しようと思い、
新しく scrape というモデルを作って、動かしてました。
ローカルでは普通に上手く行くのですが、
いざWEB上で動かすと、
Database table scrapes for model Scrape was not found.
というエラーメッセージが。。
0643nobodyさん
2010/06/30(水) 20:11:23ID:???modelで
var $useTable = false;
だったかをするとテーブルなくても怒られないけど?
0644nobodyさん
2010/06/30(水) 20:13:05ID:???すまそ
0646nobodyさん
2010/07/01(木) 04:37:27ID:???一応チュートリアルにもあるが、Cakeで始めにはまる落とし穴。
あと>>643とか使えないヤツだから気にするな。
0647nobodyさん
2010/07/01(木) 10:24:02ID:???モデルAのpaginate()の中で
SELECT * FROM a, b, c WHERE a.b_id = b.id AND b.c_id = c.id;
という形のSQLを発行しているのですが、
<th><?php echo $paginator->sort('c.name');?></th>
のリンクをクリックしてもソートされないのです。
モデルAとCはリレーションがないため、
paginate()の$order引数に 'c.name' => 'asc' が入ってこないようです。
どうすればいいでしょうか?
0648nobodyさん
2010/07/01(木) 13:01:04ID:???二度と来るな
0649nobodyさん
2010/07/01(木) 16:03:56ID:???cakeを動かした例はあるでしょうか。
同業者からの依頼でcakeを使う予定なんですが、再利用される恐れがあるため
なんとかできたらと考えてます。
0652nobodyさん
2010/07/01(木) 18:58:02ID:???そのファイルのソース中にリンク、例えばhote.htmlがあると出力したときに
hoge.html?CAKEPHP=681a529c456e8da3f6a2e39219c8f4ca
と言う文字列が必ず付くのですがこれはどうすれば消せますか?
と言うか何のためにリンクに文字列が付いて出力されてるんでしょうか?
■ このスレッドは過去ログ倉庫に格納されています