トップページ⇒php
985コメント290KB

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

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2008/12/19(金) 15:52:19ID:ylogT+7c
■本家
http://www.cakephp.org/
APIドキュメント
http://api.cakephp.org/
cookbook(マニュアル)
http://book.cakephp.org/ja
the Bakery
http://bakery.cakephp.org/

■日本語フォーラム
http://cakephp.jp/


■過去スレ
【PHP】フレームワーク CakePHP 4ホール目【v1.2】
http://pc11.2ch.net/test/read.cgi/php/1213892680/
【PHP】フレームワーク CakePHP 3ホール目【本命】
http://pc11.2ch.net/test/read.cgi/php/1205475360/
【PHP】フレームワーク CakePHP 2ホール目
http://pc11.2ch.net/test/read.cgi/php/1194976228/
【PHP】フレームワーク CakePHP
http://pc11.2ch.net/test/read.cgi/php/1163850802/
0423nobodyさん2009/01/16(金) 22:39:12ID:???
toってset()じゃなくてプロパティに直接設定するようになってるけど
どうやってエンコはさめばいいの?
本体のコード見て解析してエンコードはさむくらいしか思いつかないんだけど。
0424nobodyさん2009/01/16(金) 22:42:13ID:???
最後に送信するときにでもやればいい。
0425nobodyさん2009/01/16(金) 22:47:48ID:???
>>422
世の中には日本語以外もあるわけでな
必要なら日本人が修正してコミットすべき部分だろうに
0426nobodyさん2009/01/16(金) 22:49:09ID:???
そんなに不満だらけなら他のFW使えばいいじゃん
メールのエンコードも完璧なFWをさ
0427nobodyさん2009/01/17(土) 10:19:42ID:???
1.2.1
0428nobodyさん2009/01/17(土) 11:36:23ID:???
お、今度はstableを謳ってる
# If you are using AuthComponent without SecurityComponent you should update to CakePHP 1.2.1.8004 asap (gwoo)
だってさ
0429nobodyさん2009/01/17(土) 11:38:12ID:???
1.2 CheatSheet キタ━━━━(゚∀゚)━━━━!!!!
http://cakephp.org/files/Resources/CakePHP-1.2-Cheatsheet.pdf
0430nobodyさん2009/01/17(土) 13:58:26ID:???
>>428
なにがかわったんだ?
0431nobodyさん2009/01/17(土) 14:40:37ID:???
>>429
これはいいね。早速プリントした。
あと、毎回html->linkの何番目をfalseだっけ?ってマニュアル見なきゃならん俺のために
付属のヘルパー分もお願いしたい。
0432nobodyさん2009/01/18(日) 11:31:02ID:???
>>430
http://groups.google.com/group/cake-php/browse_thread/thread/659682805f3d71d7

Essentially, an attacker may be able to obtain credentials as the first user of the system.
If you are interested in testing your site, you can use the SQL Inject Me plugin
for Firefox
0433nobodyさん2009/01/19(月) 16:13:21ID:???
会員登録時とかで、パスワードが勝手にハッシュ化されるけど
確認画面いって入力画面に戻るとハッシュ化されたものがパスワードのとこに入る
そしてまた確認画面に行くと再度ハッシュ化される
登録されるのは2度ハッシュ化されたデータ
当然認証は通らない

これはどうすれば?
0434nobodyさん2009/01/19(月) 16:21:13ID:???
パスワード消す
0435nobodyさん2009/01/19(月) 16:23:37ID:???
詳しく
0436nobodyさん2009/01/19(月) 17:12:40ID:???
入力画面に戻るときに消していいんなら
formへるぱーで'value'=>false指定すればよろし
0437nobodyさん2009/01/19(月) 17:15:56ID:???
再入力させるのはなぁ
既にハッシュ化してるんだからそのまま入れてもセキュリティ上問題無いのに
ハッシュ化されていれば再ハッシュ化は行わないようになってくれてたら良かった

フォームのパスワードの初期値と送信されたデータが同じだったらハッシュ化はしない
とするだけで出来たはずなのにな
0438nobodyさん2009/01/19(月) 17:38:24ID:???
ちょっとコード読んでみたけど
ハッシュ化のタイミングでセッションは既に今送信されたデータに書き換えられてて
元あったものとの比較が出来なくなってる

これ以上手間が要るならめんどくさいなー
0439nobodyさん2009/01/19(月) 17:45:57ID:???
確認用の入力分を使えばいいんじゃねえの?
0440nobodyさん2009/01/19(月) 18:11:18ID:???
確認入力のバリデーションと競合して分け分かんなくなってきた
どういう仕様になってるんだろ

passwordフィールドはハッシュ化されるが
password_confirmはハッシュ化されない
おかげで確認画面にいってから戻るとパスワードが違うと言うエラーが出る問題も絡んでくる
0441nobodyさん2009/01/19(月) 18:17:05ID:???
やはり確認用の入力を使うと言う手段が本筋じゃないな
passwordもpassword_confirmも同様にハッシュ化して
フォームの初期値から変更がなければハッシュ化は行わない、
と言う設計にすべきだと思う

でもこれをやるには今のAuthコンポーネントの仕様からじゃだいぶ手間がかかる
0442nobodyさん2009/01/19(月) 18:26:26ID:???
つーかもう
Authの自動ハッシュ化を無くして
手動でハッシュ化するのが一番楽だわ
0443nobodyさん2009/01/19(月) 19:02:35ID:???
cakeは謙虚な心がないと使いこなせない
0444nobodyさん2009/01/19(月) 19:20:43ID:???
ハッシュ化なんてユーザパスワードくらいでしかやってないし
自動ハッシュ化止めてセーブ時とログイン時にハッシュ化するようにしたらできたくせえ!
0445nobodyさん2009/01/19(月) 22:36:21ID:???
form部分は
name="raw_password"
name="raw_password_confirm"
にしといて、
validateでは、
raw_passwordとraw_password_confirmを比較
saveの前にpassword = raw_passwordしとくのは?
0446nobodyさん2009/01/19(月) 22:42:10ID:???
それもいいかもね
コンポーネントに手入れ無くて良いし
でもAuthで暗黙的にハッシュ化されるわりにそれを意識したコーディングになってるから
違和感はあるけどね
それなら明示的に書く方が、とおもう
0447nobodyさん2009/01/20(火) 00:34:26ID:???
Validationで戻ったときはパスワードは再入力させる方が一般的だと思うけどね。
0448nobodyさん2009/01/20(火) 00:36:53ID:???
あぁ、そういう話か。
普通再入力の際にはパスワードは消えてるでしょ
0449nobodyさん2009/01/20(火) 02:09:06ID:???
エレメントを呼び出すんじゃなくて
ビューからアクションを呼び出す事って出来ないのかな?
0450nobodyさん2009/01/20(火) 02:15:23ID:???
事故解決
0451nobodyさん2009/01/20(火) 02:47:07ID:W42hdWVL

iis,oracle,php5インストール後、
cakePHP入れて、ブログのチュートリアルやってんだけど、
ビュー作って確認するところのテーブル一覧表示で日本語データが表示されません。
半角英数ですと表示されます。数値、日時も問題なく表示されています。
db内には、正しい全角データが入っているのですが、
なぜでしょう?

0452nobodyさん2009/01/20(火) 02:49:30ID:???
>>451
ソースの文字コードとMySQLの文字コード確認
0453nobodyさん2009/01/20(火) 02:50:47ID:W42hdWVL

両方、utf8です。
0454nobodyさん2009/01/20(火) 03:21:49ID:???
そもそもoracleか・・
0455nobodyさん2009/01/20(火) 11:56:56ID:???
>>452
oracleだと書いてあるだろボケ
なにがMySQLの文字コードだよ
0456nobodyさん2009/01/20(火) 13:54:45ID:???
>>451
phpのinternal_encodingとかその辺の設定確認
あとcakeを介さず直接接続→出力が文字化けするか否か確認
0457nobodyさん2009/01/20(火) 15:52:01ID:???
>>455
www
0458nobodyさん2009/01/20(火) 16:57:25ID:???
あれ、一人だけID出てるな
0459nobodyさん2009/01/20(火) 17:03:38ID:b4+xy3zg
sage無きゃ出るでしょ
0460nobodyさん2009/01/20(火) 17:07:06ID:???
なるほどそういうことか
0461nobodyさん2009/01/20(火) 17:13:23ID:???
sage無くても出ないけどね
0462nobodyさん2009/01/20(火) 17:41:48ID:???
1.2なってからのfindやinputの修正は地味だけど良いね
非常に分かりやすくなった
0463nobodyさん2009/01/21(水) 01:59:22ID:???
scaffoldだとAuthコンポーネントってちゃんと働かない?
webルートにアクセスすると、一応/users/loginへ
リダイレクトされるんだけど、そこでurlを/users/indexって
書き替えると、ログインしてなくてもユーザーの一覧が
見えてしまう。(´・ω・`)
0464nobodyさん2009/01/21(水) 05:54:40ID:???
Controllerになんか書くんじゃなかったっけ。
0465nobodyさん2009/01/21(水) 10:09:05ID:???
>>464
Controllerには許可する方を書くわけだから不要だと思う
>>463
ほかのControllerでも同じ症状なら、scaffoldが原因だろうけど、、、
0466nobodyさん2009/01/21(水) 10:42:49ID:???
空のindexを書くと、indexにはAuthが効く。
やっぱ、scaffoldが原因かなぁ。
ちゃんと全部自分で書かないとダメか。
0467nobodyさん2009/01/21(水) 10:48:54ID:???
action内でscaffoldのフローに飛ばせないのが、辛いよね
この問題にぶちあたって、結局1から書くことになる
すべてのactionを
0468nobodyさん2009/01/21(水) 10:55:35ID:???
試してないけどさ
beforeFilter()でaction名を見て、適宜login()に飛ばしてみたら?
0469nobodyさん2009/01/21(水) 11:01:21ID:???
if (in_array($this->action ,a('index' ,'etc')) && !$this->Auth->user()) {
// リダイレクト
}
0470nobodyさん2009/01/21(水) 11:34:17ID:???
認証掛けるくらいなんだから、うかつに編集されないように
scaffoldを使わないのが正しいやり方だと思う。思うけどね。
04714512009/01/21(水) 16:59:21ID:???
事後報告です。
>>456
> >>451
> phpのinternal_encodingとかその辺の設定確認

この辺りの設定も甘い所がありましたが、utf8で調整するも変わりませんでした。
で切り分けるためにも下を行ったのですが・・・。

> あとcakeを介さず直接接続→出力が文字化けするか否か確認

直接データもらうと、sjisで出力されてきて意味がわからず悩みました。
知っている人はなんでもないんでしょうけど。

で、結構な時間を費やしDBからデータ出力の時点があやしいとなり、
いろいろググってたら判明!
CAKEインストの時のDB設定で文字コード設定があることがわかり、
(設定した時は、どこぞのブログの設定をコピペしてきたんで文字コードを
設定している意識がなかったorz)確認するとsjisになってた、でこれをutf8へ
指定して、cakeの問題無くDBデータが表示されることが確認出来た。

で、ここで疑問が直接もらうとなぜSJISでもらうのか、
恐らくcakeでsjisからutf8へ文字コード変換してることになるんだと思うけど、

結局、oracleが出力文字コードを変えるようで、OSの環境変数を設定して、
NLS_LANG=JAPANESE_JAPAN.AL32UTF8
問題無く直でもutf8で出力されることを確認。

ふー時間くったー。
途中oracleの調子が悪くなって、再インストに見舞われるし。
チュートリアルを進めよう〜。
0472nobodyさん2009/01/21(水) 17:57:23ID:???
>471
へぇ〜、いまはOracleでもまともに動くんだなぁ。

2年位前はDBO周りがバグだらけで使い物にならなかったけど。
0473nobodyさん2009/01/21(水) 20:17:56ID:???
投稿された記事の編集権限みたいなものもACLで管理する?
機能制限みたいなものはACLでやるんだけど
同じ機能でもオブジェクトのidによって変わる、みたいなのもACLでやるべきなのかな?
0474nobodyさん2009/01/22(木) 01:10:40ID:???
containでモデル指定すると親モデルと同じ階層に並ぶ形で出てくるけど
親モデルの奥に配置するにはどうすればいい?
Model1->find('all',array(
'contain'=>array(
'Model2'
)),

結果:
array(
[0]=>array(
[Model1]=>array(),
[Model2]=>array(),
)
)
0475nobodyさん2009/01/22(木) 10:29:14ID:???
decorte.phpのCakePHP1.2.1対応版はまだかな〜
0476nobodyさん2009/01/22(木) 12:48:42ID:???
cakeのDB接続まわりを参考にしたいのですけど
どのあたりのソースを見ればよいのでしょうか?
/app/config/database.php.default
に接続情報がありますが
これらの情報を使用して接続している部分あたりを見たいです
0477nobodyさん2009/01/22(木) 12:53:15ID:???
>>476
cake/libs/model/datasources
cake/libs/model/datasources/dbo
あたりかな
0478nobodyさん2009/01/22(木) 12:54:16ID:???
/cake/libs/model
接続に言ってる所と言うのならその下のdatasources/dboの下
0479nobodyさん2009/01/22(木) 15:44:55ID:???
CakePHP には、Railsでいうmigrationがないけど、
みんなはDBスキーマはどうやって管理してる?

前スレを見たら少し話題になってたけど、なんかgdgdに終わってた。
0480nobodyさん2009/01/23(金) 00:16:41ID:???
CakePHPの1.2.0.7962でセキュリティコンポーネントを使って
二重投稿防止しようとしてるんだけど全然防止できない
saveした後に明示的にセッションからトークン消してやればうまくいくんだけど、
皆様方そんなことをしている様子はないし

http://www.1x1.jp/blog/2006/12/cakephp_csrf.html

やってることはほぼこのまんま
1.2なんで$formでフォーム生成してるのが違うくらい

フレームワーク使ってるってのに全然サクサク感がねぇー
0481nobodyさん2009/01/23(金) 02:23:23ID:???
>>479
とりあえず、普通にSQLでやってる。
create_tables.sqlとか適当なファイルにcreate table文まとめてる。
で、Subversionで管理。

ほんとは、マイグレーションあると便利だけどね。
こんな感じの使い方ができるPHPスクリプトを作ればいいんだけど、
面倒だからやってない。でも、そのうちやるつもりw
php rake.php db:migrate
php rake.php db:migrate VERSION=3
php rake.php db:create
php rake.php db:drop
04824812009/01/23(金) 02:38:24ID:???
今調べてみたら、1.2だと非公式だけどマイグレーションあるんだね。
知らなかったわ。
今度試してみよう。
0483nobodyさん2009/01/23(金) 04:06:53ID:???
>>473
マニュアルのauthコンポーネントとACLのページを少ないから読んで見るといいかも
単純なログイン後とログインして無いとかならauthでいける
0484nobodyさん2009/01/23(金) 07:29:32ID:YSArohX3
cakeのfindで、一番大きなidのデータを取得したり、
一番新しいcreatedのデータを取得したりとかって、簡単にできますか?
やり方があれば、教えてください。
04854842009/01/23(金) 07:37:43ID:???
sortして1番めを取得すれば良かったのか…
>>484自己解決で。素人ですみません。
0486nobodyさん2009/01/23(金) 10:46:31ID:???
>>481-482
自分もこういうのを見つけていた。まあ「cakephp migration」でググっただけ
だけど。

"CakePHP migration" フォーラム - CakePHP Users in Japan
http://cakephp.jp/modules/newbb/viewtopic.php?topic_id=1176&forum=3

CakePHP のおいしい食べ方: DBマイグレーションか、DBスキーマシステムか
http://cakephp.seesaa.net/article/97882341.html

誰か使っている人いないかな。
0487nobodyさん2009/01/23(金) 17:31:45ID:???
>>484
sql の max 関数 調べてみい
0488nobodyさん2009/01/24(土) 16:41:32ID:???
AuthComponent の認証をディレクトリ単位でわけるよい方法ってないでしょうか?

/document_root/siteA/ 配下と
/document_root/siteB/ 配下でわけたい。

siteA 配下は 教師モデルを対象に認証済みのユーザーはアクセス可能とし、
siteB 配下は 生徒モデルを対象認証済みのユーザーを対象にする。
当然、教師認証済みであってもは siteB にはアクセスできず、生徒は認証済みであっても
siteA にはアクセスできない

みたいな事がやりたいんですが。。。

0489nobodyさん2009/01/24(土) 16:51:08ID:???
acl
04904882009/01/24(土) 17:14:12ID:???
acl は、同一ユーザーテーブルの中での権限の割り当てではないでしょうか?
がんばって読んでみたんですが、そもそもユーザー認証を行なうモデルが異なる場合は
対応できないように思いました。

今回は、教師と生徒で登録されているテーブルが違うのでログインページも教師用と生徒用があります。

教師は siteA/login.php にて。生徒は siteB/login.php にて認証します。

で、教師でログインした場合は siteA 配下のみアクセス可能。生徒でログインした場合は siteB のみ
アクセス可能としたい。

かっこ悪いすが、サブドメインきって cake そのものを2通り用意したほうが簡単かもしれないと思ってしまいました。
何かよい方法があればいいな、と。
0491nobodyさん2009/01/24(土) 22:19:27ID:???
もっと嫁
0492nobodyさん2009/01/24(土) 22:20:11ID:???
cake2個用意するとか前にも言ってるやつが居たが
プログラマーのやり方じゃない
0493nobodyさん2009/01/24(土) 22:44:47ID:???
cakeはもっとサンプルが公開されてると、こうした初心者の人も助かりそうだね。
初心者がcakeのソースなんて追え無いんだから。
0494nobodyさん2009/01/24(土) 22:58:31ID:???
つーか公式マニュアルにAROとACOの説明があるのに
>>490の理解になるのはおかしい
ちゃんと読んでない
0495nobodyさん2009/01/25(日) 11:58:58ID:???
アクションが増えるとコントローラーの行数も増えるのたが、
お前らのコントローラーの行数は最大でどの位ですか。
0496nobodyさん2009/01/25(日) 12:03:41ID:???
アクションの数自体、1コントローラ最大で10くらいしか経験無いわ
0497nobodyさん2009/01/25(日) 19:50:45ID:???
「CakePHPポケットリファレンス」の資料に載ってる
CakePHPの命名規則って、かなりでたらめ?
0498nobodyさん2009/01/25(日) 21:22:02ID:???
一つの関数(アクション)の行数を短くしろとは聞くが
一つのクラス(コントローラー)の行数を短くしろとは
あまり聞かない。
0499nobodyさん2009/01/25(日) 23:34:20ID:???
>>497
「CakePHPポケットリファレンス」の命名規約(p.406-408)で
「これ、おかしんじゃない」のワースト3を教えて。
ttp://book.cakephp.org/ja/complete/22/CakePHPの規約
0500nobodyさん2009/01/25(日) 23:37:01ID:???
俺も手元の開いてみた
なんか楽しいw
0501nobodyさん2009/01/26(月) 00:04:38ID:???
えーっと、どれも酷いので順番は付けられないけど
コントローラーの命名規則
英単語の単数形+"Controller" って書いてるのに、例が PowerUsersController
モデル名+"_id"って書いてるのに、例がpower_users_id
あとある?
0502nobodyさん2009/01/26(月) 01:11:31ID:???
ホントだ。あるねえ。
コントローラの命名規約
○クラス名 英単語の複数形+"Controller"  PowerUsersController
テーブルとカラムの命名規約
○外部キー モデル名+"_id" power_user_id、article_id
(モデル名は単数形だよね。)
修正しました。
0503nobodyさん2009/01/26(月) 10:35:54ID:???
編集フォームの初期値をセットするには
$form->create('User');
で作っていたとしたらどういう変数名・配列構造でセットすればいいの?
0504nobodyさん2009/01/26(月) 10:52:09ID:???
>>503
$this->data['User']['name'] = '麻生太郎';
0505nobodyさん2009/01/26(月) 12:24:49ID:j8WtT0GU
1.2系のAuthComponentにおいて任意のidでユーザ認証されてしまう、という脆弱性が。
1.2.1.8004へアップデート推奨らしいぞ。

http://cakephp.jp/modules/newbb/viewtopic.php?topic_id=1696&forum=1&post_id=4032#forumpost4032
http://www.pseudocoder.com/archives/2009/01/22/cakephp-digest-6/
0506nobodyさん2009/01/26(月) 13:21:32ID:???
AuthComponentをStableから使い始めた俺は勝ち組w
0507nobodyさん2009/01/26(月) 13:41:36ID:???
>>505
ワロタw

どこがAuthなんだよ
0508nobodyさん2009/01/26(月) 16:40:15ID:j8WtT0GU
これってやばいんだよね?
0509nobodyさん2009/01/26(月) 20:39:14ID:???
testsuiteって使ってる?
マニュアル見ても、よく分からん。
0510nobodyさん2009/01/26(月) 22:55:14ID:???
>>508
機能として破綻してるw
0511nobodyさん2009/01/26(月) 23:57:03ID:???
ああー
よくわからんままやったら、
フィールド消えたわ
まじか、これ
0512nobodyさん2009/01/27(火) 10:11:27ID:???
バグが取れるまでstableにしませんとか誇らしげに語ってなかったっけ?w
0513nobodyさん2009/01/27(火) 11:51:11ID:???
>511はtestsuiteの話しな

testsuiteの解説がガイドブックとかに無いし、
web上にもあんまり情報が無いので、よくわからん。
でも。simpletestをインスコしたら、bakeの際に
いろいろ聞かれなくなったのは楽だな。
0514nobodyさん2009/01/27(火) 12:20:04ID:???
1.2.1.8004 Stable ですが

設置 URL が example.jp/t/ の時、tests というコントローラにアクセスしようと、

http://example.jp/t/tests/ ってやると、http://example.jp/t/ests/ に勝手になってしまって

Error: EstsController could not be found.

となります。 t に限らず webrootが1文字で とコントローラの最初の一文字が同じだと
上記のようになると思いますが、何か注意するところはありますか?
0515nobodyさん2009/01/27(火) 12:32:20ID:???
>>514
http://cakephp.jp/modules/newbb/viewtopic.php?topic_id=1706&forum=6&post_id=4025#forumpost4025
これと同じかな
0516nobodyさん2009/01/28(水) 11:36:58ID:AHb2WVE2
既存テーブル名が日本語で、cakeが認識しません。
どうすればいいのでしょうか?
php直ですと日本語テーブル名でクエリは通ります。
0517nobodyさん2009/01/28(水) 12:33:02ID:???
cake周りの文字コードをutf-8にしたら
とりあえず、認識した。
0518nobodyさん2009/01/28(水) 18:06:35ID:???
テーブル名が日本語ってトラブルの元じゃない? って、以前言われた。

testって、データを入れて出して一致してるか確認してるんだって事が
ようやく少し分かった。
0519nobodyさん2009/01/28(水) 18:29:34ID:???
テーブルとかカラムが全角文字だと激怒する奴いるけど
別に日本で使うシステムなら問題ないんだけどな
Oracle/Access+VBのシステムなんかよくあるし
PHPだって変数名ですら全角文字でもOKなんだし
0520nobodyさん2009/01/28(水) 19:00:41ID:???
>>519
全角って、そんなに変じゃないの?
bakeする時に日本語で全部作ってくれると楽そうだなーって思ってた。
多言語化を考える必要なんて全くない物を作るのにi18nすら面倒で、
ソースに日本語のエラーメッセージを書いてやろうと思ってた。
0521nobodyさん2009/01/28(水) 19:02:34ID:???
あ。でも、そうすると複数形ってどうすんだ?
0522nobodyさん2009/01/28(水) 19:04:55ID:???
DB関連の開発系ツールも含めて全て対応出来てるんならいいんだろうけど
海外製のライブラリは対応出来てないものが多いし
結局、全角ゴリ押しは開発者側に負担を強いることが多いよ
プロジェクト内で使う環境を全部調査して、誰にも迷惑かけないと判明したら使えばいいと思うけど
■ このスレッドは過去ログ倉庫に格納されています