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

【PHP】フレームワーク CakePHP 10ホール目【v1.3】

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2010/11/01(月) 21:43:26ID:???
CakePHPは、Ruby on Railsの概念の多くを取り入れた、Rails流の高速開発とPHPの機動性を兼ね備えたフレームワークです
CakePHPから派生したLithium(li3)も専スレできるまではここでどうぞ
質問するときはCakePHPのバージョンを書きましょう

※sage推奨
※質問時も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
0159nobodyさん2010/11/16(火) 14:28:02ID:???
その前にお前の返信の仕方がバカなのは無視か。
0160nobodyさん2010/11/16(火) 14:32:27ID:???
>>158
>>151は>>150に向けてだろjk
お前がバカにみえるけど?
0161nobodyさん2010/11/16(火) 16:20:59ID:???
>>159-160
死ね糞野郎
0162nobodyさん2010/11/16(火) 16:34:57ID:???
>>160
馬鹿乙
0163nobodyさん2010/11/16(火) 17:11:22ID:???
>>155のURLは何なの?
0164nobodyさん2010/11/16(火) 17:17:37ID:???
>>163
debugが有効で下にSQLがタレ流れてた

アクセス制限かけたみたいだね
0165nobodyさん2010/11/16(火) 17:40:29ID:???
twitterで指摘されたの17時間も前じゃないか
もっと前もいたのかもしれないけど
0166nobodyさん2010/11/16(火) 19:27:53ID:???
renderの出力をファイル以外にしたいのですが、
カスタマイズしなければ出来ませんかね?

DBやCakeのテンプレート以外のファイルを取得し、
変数に入れて出力したいです。
0167nobodyさん2010/11/16(火) 19:31:49ID:???
なにいってんのかわかんね
変数に入れて出力?なにそれ
0168nobodyさん2010/11/16(火) 19:47:50ID:???
>>167
ファイルテンプレート取得して、それに値を埋め込んでファイル出力とか、そんな感じだろう。
察してやれ。
0169nobodyさん2010/11/16(火) 19:51:39ID:???
オレもそれくらい分かったわ
0170nobodyさん2010/11/16(火) 20:25:39ID:???
>>168
166の一行目読めよ
0171nobodyさん2010/11/16(火) 20:32:28ID:???
俺が補完してやろう

renderの出力(のために使用するテンプレート)を(ctp)ファイル以外にしたいのですが、
カスタマイズしなければ出来ませんかね?

DB(の格納値)や(、)Cakeのテンプレート以外のファイルを(テンプレートとして)取得し、
変数(をそれ)に入れて出力したいです。
01721662010/11/16(火) 20:36:51ID:???
自分の考えた方法は

1:テンプレート変数(例えば<{OUTPUT}>)が書いたビューを用意
2:↓で変数に保持
 $this->autoRender = false;
 $this->render('output')
 $view_data = $this->output;
3:DBで取得してきたデータを変数に入れる
4:1のテンプレート変数にstr_replaceで置換
  $output = str_replace('<{OUTPUT}>', $db_data, $view_data);
5:echoで出力

なのですが、Cakeの機能だけで
>>166のようなことが出来るのかと思い、質問しました。
0173nobodyさん2010/11/16(火) 20:39:55ID:???
>>172
できる。
0174nobodyさん2010/11/16(火) 20:41:21ID:???
>>171
よろしい
ならば答えよう

他の形式で出力することは機能として備わっている
呼び出した拡張子に寄って出力フォーマットを切り替えるなんてことも可能
マニュアルでリクエストハンドリングとか調べてみて
0175nobodyさん2010/11/16(火) 20:57:17ID:???
>>172
<?php echo $content_for_layout; ?>
だけのlayutファイル、
<?php echo $content?>
だけのviewファイルを用意しておき、コントローラで最終的に
$this->set('content',$data);
を呼びさえすれば、「$data」をどう作るかなんて自由にやりたい放題だと思うが。
01761662010/11/16(火) 21:00:37ID:???
>>175
ほんとですね・・。難しく考えすぎました。ありがとうございます。
0177nobodyさん2010/11/16(火) 22:23:01ID:???
>>175
それなら $this->autoRender =false; return $data; でいいような
0178nobodyさん2010/11/16(火) 22:29:44ID:???
>>177
こう書けるんだ、勉強になりました。
0179nobodyさん2010/11/17(水) 00:08:32ID:???
そうか。アクションは関数だから、returnで良いのか。勉強になるなー
0180nobodyさん2010/11/17(水) 00:16:05ID:???
バッドノウハウだな
0181nobodyさん2010/11/17(水) 00:39:16ID:???
画像やCSSのコントローラー分けってどうしてる?

/webroot
└/images
  └/top

みたいにするか、

/webroot
└/top
  └/images

みたいにまとめるか悩みます。
0182nobodyさん2010/11/17(水) 00:54:51ID:???
前者
0183nobodyさん2010/11/17(水) 01:17:15ID:???
他のCakePHPを使ったサイトをいくつか調べたのですが、全て前者でした。
普通のWebサイトは後者が多く、自分も今までは後者で作っていました。

とりあえず、Cakeの作法に合わせたいので、前者にします。
0184nobodyさん2010/11/17(水) 01:30:20ID:???
>普通のWebサイトは後者が多く、自分も今までは後者で作っていました。
どこ統計?圧倒的に前者が多い印象だけど
0185nobodyさん2010/11/17(水) 01:53:13ID:???
統計は取ってないですが、自分の印象では後者ですね。
0186nobodyさん2010/11/17(水) 13:29:15ID:???
181のレス見て思い出したけど、prefixを使った場合のディレクトリ構成も
悩む時あるよな。webrootにprefix用のディレクトリ作成するとエラーになるし。
$html->linkやRouter::urlでの表示とか
0187nobodyさん2010/11/17(水) 15:15:11ID:???
1.3を使っています。

以下のようなformHelperを使った記述を、
「フォームを追加」ボタンを押せばJqueryで同じフォームが増えていくと
いったことがしたいです。

echo '<div class="newForm">';
echo $form->select('Alert',$menuOptions["area"]);
echo '</div>';

グーグルアラートのアラートを追加するボタンみたいな感じでやりたいです。

この場合、formHelperを使っているので、Jqueryと連携するにはどうすればよいものでしょうか?
0188nobodyさん2010/11/17(水) 15:52:34ID:???
>>187
手順のヒントを書くと

1)ボタンを押す
2)jQueryのajax機能で、指定コントローラーのアクションにPOST
3)そのアクション内で>>187のビューを出力
4)ajaxで受け取ったデータをページの指定箇所に反映
 var add_form_fields = $("addFormFields").html();// 以前のHTMLを保存
 $("addFormFields").html(add_form_fields + data);// 3を結合して出力
 (試してないからコードはおかしい可能性有り)
0189nobodyさん2010/11/18(木) 17:15:13ID:???
携帯サイトをCakePHP1.3.4で作っています。
ビューやPHPファイルは全てUTF-8で作成し、
出力時はmb_convert_encodingでSJIS-winに変換しています。
そして、ビューに$html->charset('Shift_JIS')を追加しています。

絵文字を使いたいので過去スレを調べたところ、
「Ktai Library」というツールが良いと聞いたので使っているのですが、
絵文字がどうしても文字化けします。(?という表示になります)
元ファイルはUTF-8なのに、レンダリング時にはShift_JISになるから
なのかもしれませんが、どうやっても解決できません・・。

Ktai Libraryを使用されてて、私と同じように出力をShift_JISにされている方は
設置に対するヒントを教えていただけないでしょうか?よろしくお願いします
0190nobodyさん2010/11/18(木) 17:24:42ID:???
DBは何で作成した?
0191nobodyさん2010/11/18(木) 17:38:13ID:???
MySQLで文字コードはUTF-8です
0192nobodyさん2010/11/18(木) 17:39:21ID:???
ただ、DB使ってないコントローラーでも>>189の現象になります。
0193nobodyさん2010/11/18(木) 17:44:32ID:???
ttp://d.hatena.ne.jp/k_yamamot/20100307/1267952208
このあたり?
0194nobodyさん2010/11/18(木) 20:33:55ID:???
絵文字扱うだけならHTML_Emojiでいいんじゃない?
http://libemoji.com/
0195nobodyさん2010/11/18(木) 22:32:26ID:???
>>194
これってキャリア分の絵文字を配列に代入して切り替えてるだけですよね?
ちょっと使いましたが、効率悪い気がするんですよね・・。

Ktai Libraryは作者の方が意欲的ですし、利用している人も多いと思って
質問したのですが、文字コードの扱いに難があるようですね。
ググったらそういう注意事項がありました。

何とかしたいのですが、無理なら>>194を使うか自作します。
0196nobodyさん2010/11/19(金) 07:47:54ID:???
>>195
Controllerに書いたKtaiLib設定の文字コード部分を教えて
あとバージョンと
0197nobodyさん2010/11/19(金) 12:44:56ID:???
CakePHPのSecurityComponentに深刻なセキュリティホールが見つかりました
http://www.1x1.jp/blog/2010/11/cakephp_security_component_vulnerability.html
0198nobodyさん2010/11/19(金) 13:06:15ID:+0BO3EaI
※ところで、なんでこれが騒がれていなかったのか理解に苦しむのですが、
もしかしてみなさん本家のブログ記事とか読んでいらっしゃらないわけですか?

 まさかね。
僕が騒いでいる様子を探せていなかっただけですよね。
0199nobodyさん2010/11/19(金) 13:35:52ID:???
だれもSecurityComponentなんて使ってないんじゃ・・・
俺もCSRF対策は独自に開発して使ってるし。
0200nobodyさん2010/11/19(金) 14:10:15ID:???
俺も使ってない
0201nobodyさん2010/11/19(金) 14:18:35ID:???
俺も。セッションやクッキーもPHPの関数でやることあるし。
0202nobodyさん2010/11/19(金) 15:35:43ID:???
お、おおおお俺もつ、つ、つつつつ、つ、使ってないよおぉ
0203nobodyさん2010/11/19(金) 15:49:02ID:???
これだけ使ってないってレスがくると、自分で使っていることにすら気づいてない奴もまざってるんじゃないかと疑いたくなるなw
0204nobodyさん2010/11/19(金) 17:01:49ID:???
お、お、俺も、つつ使ってない

シリアライズした設定値をrot13変換・・・可逆すぎワロタ

要は自前実装でワンタイムトークン発行しろってことで、たいていの用途にはおk?
0205nobodyさん2010/11/19(金) 17:15:49ID:???
でも、可逆で事足りると思うんだよな。

考えてみろ。第三者が可逆されるって、鯖をハッキングされるか
内部流出しかないけど、そうなるとパスワードうんぬんどころじゃねーぞ。
0206nobodyさん2010/11/19(金) 17:55:27ID:???
>>205
君の考え方なら、そもそもパスワードをハッシュ化する必要すらないよな?
もっと良く考えてみろ。
0207底辺2010/11/19(金) 20:32:33ID:???
>>143
セキュリティセキュリティって、言ってる人って、ハッキングされた経験でもあるの?俺はさほどセキュリティに気を使ってないけど、この10年何ら問題が起きてない。泥棒に入られるかもと思って家に防犯カメラつけたりするような物だよね。
0208nobodyさん2010/11/19(金) 20:44:57ID:???
こんなところで釣りってあほか
0209nobodyさん2010/11/19(金) 21:21:21ID:???
>>206
205じゃないけど、前にくだ質の人に質問したら
「ハッキングより内部流出の為にパスワードをハッシュ化する」
て言ってた。正しいかどうかは知らん。
0210nobodyさん2010/11/19(金) 23:21:14ID:???
最初から全部公開しておけば流出されない
0211nobodyさん2010/11/20(土) 00:29:30ID:NISeDnL6
Eclipseがなんか合わないから他にいいのないか探してPHPエディタというのをみつけたんだが
これプロジェクトでappフォルダコピーしたがうまく表示されないな
やっぱEclipseぐらいしかないのかね?
0212底辺2010/11/20(土) 14:25:39ID:???
>>211
俺も合わない。だからdw使ってます。
0213nobodyさん2010/11/20(土) 14:36:12ID:???
>>209
なんか誤解してないか?
0214nobodyさん2010/11/20(土) 19:22:07ID:???
普通にちゃんと噛み合った会話に見えるんだけど……
0215nobodyさん2010/11/20(土) 23:06:30ID:???
俺もDW使ってるな。
デザインプレビューはほとんど使わないけど、なんか管理しやすい。
02162112010/11/20(土) 23:52:59ID:NISeDnL6
>>212>>215
DWって何とかドロワーってやつ?少し聞いたぐらいしか無いけど
コード保管とか関数一覧機能有るなら試してみようかな

PHPエディタのスタンドアロン版を今使ってるけどemエディタみたいにタブだったらいいのになー
02172162010/11/21(日) 00:01:59ID:???
ドロワーじゃなくてDreamweaverだったか・・・
0218nobodyさん2010/11/21(日) 04:08:48ID:???
一応、PHPの関数保管機能はあるけど、
PGが使うツールとしては使いにくいだろうね。
0219nobodyさん2010/11/21(日) 08:39:09ID:???
PHP自体PGが使うには使いにくいと思うよ
0220nobodyさん2010/11/21(日) 09:07:46ID:???
WindowsだとNotepad++使ってる
0221nobodyさん2010/11/21(日) 13:02:29ID:???
Macならcodaだな。
マニュアルやAPIサイトもタブの中で開けるし、集中して作れる。
0222nobodyさん2010/11/22(月) 14:13:56ID:???
controllerのusesで指定するモデルのコンストラクタに引数を渡したいのです。
モデル内で動的なテーブルの切り替えを行っていて、どのテーブルを使用するかの判断に
必要なアイテムをコンストラクタで渡そうと考えています。
まったく見当がつかないのですが、なにか良い方法はありますか?
0223nobodyさん2010/11/22(月) 14:30:28ID:???
自作コンポーネント
0224nobodyさん2010/11/22(月) 14:36:42ID:???
>>222
あるモデルが別のモデルを読み込むようにすれば良さげ
02252222010/11/22(月) 14:42:59ID:???
すみません。一つ条件がありまして、
usesで指定するモデルですが、paginatorで使用するモデルとなります。
単にデータの入出力に使うだけのモデルであれば色々策は考え付くのですが、
paginatorで使用するというところがネックで悩んでいる次第です。

usesに記載しないモデルでpaginatorを上手く効かせる方法があればそれでも構いません。
0226nobodyさん2010/11/22(月) 14:58:16ID:???
それだけじゃ詳細わかんないけど
どう考えても設計見直したほうが幸せだろ
0227nobodyさん2010/11/22(月) 18:01:25ID:???
>>224 みたいな方法で、中間モデルというか、代理人的なモデルを作って、
Factory Methodパターン(的な)構造にするのが良いと思う。
変にCakeの内側に入り込もうとするとメンテナンス不能なものになりそうだ。

てか普通に該当モデルに使用テーブルの切り替えメソッド実装するんじゃダメ?
試してないけど
02282222010/11/22(月) 21:38:44ID:???
>>224
おっしゃる通りで、
>てか普通に該当モデルに使用テーブルの切り替えメソッド実装するんじゃダメ?
を実装して対応しました。
usesに指定するmodelの$useTableにデフォルトでfalseを指定しておき、
paginate()を呼び出す前に、実装したテーブル切替メソッドを呼ぶという感じです。

usesに指定したmodelのロード前に、$useTableにどうやってテーブルを指定しようか、
と悩んでいたのですが、とりあえず何も設定せず、後で再設定するという方法ですね。
02292222010/11/22(月) 21:40:31ID:???
>>228
すみません、>>224でなく>>227です。
0230nobodyさん2010/11/23(火) 17:17:59ID:???
CakePHP初心者です。
やっとチュートリ終わってCakePHP辞典を眺めているレベルですが、
質問があります。

HtmlHelperの様々なメソッドは、生HTMLを*.CTPに記述すれば足りる事であり、
わざわざ用意された関数を使う必要などない、と思えるのですが、いかがでしょうか?
たとえばHtmlHelper::para()など<P></P>と書けば良いだけな気がします・・・

また、AppModelクラスでは、アソシエーションを定義しfind()やread()などを使うよう
ですが、単にSQLを書いてquery()を使えば良いような気がしています。
AppModelにはquery()とset()さえあれば良いような・・・

こんな質問をするのは私の理解が浅いためだとは思いますが、初心者にも判るよう、
HtmlHelperやAppModelのメソッドの存在意義を教えていただきたいです。

よろしくお願い申し上げます。



0231nobodyさん2010/11/23(火) 17:21:03ID:BKW+AU3M
>>230
->linkと->dataCellsは楽だと思うぜ
0232nobodyさん2010/11/23(火) 21:56:51ID:???
俺もlinkくらいしか使わないな
linkはroute直したときとかに勝手にリンクも直るので便利
default.ctpのヘッダー部分も基本的にhtmlに直してる
cakeと絡む部分のあるlinkとかはhelper使って、絡まないpとかはhtmlで書くという感じ
tablecellsは最初は使ってたけど、classとか指定してカスタマイズしてたらわけわからなくなったので、
今はforeachで書いてる
0233nobodyさん2010/11/24(水) 13:59:05ID:???
ログイン画面でemailやpasswordを入力した時、

「登録されてないアドレスです」 や 「パスワードが正しくありません」
などのバリデーションはmodelのルールでは定義できないでしょうか?

マニュアルを読んだところ、そういった機能はないようなので、
自分でロジックを書かなければいけないかと思っております。
0234nobodyさん2010/11/24(水) 14:14:59ID:???
>>233
はい。オリジナルバリデーションを用意しましょう。
探せば見つかると思う。

ただ
エラーメッセージは
「メールアドレスかパスワードが違います」
と表示しましょうね。セキュリティ的に。
0235nobodyさん2010/11/24(水) 14:16:48ID:???
>>234

素晴らしく的確なアドバイスありがとうございます!!
0236nobodyさん2010/11/24(水) 14:19:25ID:???
>>233
Authコンポーネント使ったほうが幸せになれそう
0237nobodyさん2010/11/24(水) 14:51:07ID:???
>>230
俺もlinkとかは使っているな。
階層が絡むものとかは開発環境・本番環境で変わってくることもあるし。
あとは、form関連はかならず使う。
HTMLヘルパー系は、実質あんまり使わないな…。

Modelに関しては、シンプルで分かりやすくなるので、生SQLは基本書かない。
0238nobodyさん2010/11/24(水) 14:57:32ID:???
環境かわっても大丈夫なようにするためにlinkつかってる
02392302010/11/24(水) 19:24:51ID:???
HtmlHelperのメソッドは、link()などは使うが、必要性の高いメソッドは少ないのですね。

AppModelクラスで、アソシエーションを何も定義せずに生SQLを書くことについては
いかがでしょうか?
SQLの知識があっても、アソシエーションを定義してAppModelのメソッドを使ったほうが
よいのでしょうか?
生SQLを書いてAppModel::query()は良くないのでしょうか?
0240nobodyさん2010/11/24(水) 20:10:39ID:???
生SQLも時と場合によるでしょ。
findでjoinする時はjoin部分をSQLにするけど。
0241nobodyさん2010/11/24(水) 21:04:53ID:???
Fast CakePHPって本が糞過ぎて使えない
よくあんな糞みたいな本が世に出せたもんだ
0242nobodyさん2010/11/24(水) 21:34:35ID:???
>>239
生SQLでも良いと思う。CakeのActiveRecordの恩恵は半分くらいしか受けないが、
CakeのAcriveRecordの微妙な部分で悩んだりバッドノウハウ積んだりする手間も減る。

でも、現在Cake初心者で、生SQL上等なくらいのスキルを持ってるなら、
Zend Frameworkとかにトライするのもいいんでは?
0243nobodyさん2010/11/24(水) 23:23:55ID:???
まぁ、なにやっても良いけど、もしチームとか会社で使うのなら
他のメンバーに合わせる方向性で決めたほうがいいかと。
0244nobodyさん2010/11/25(木) 01:00:08ID:???
>>241
なんでcake本がたくさんある中、1.1対応と古くて、評価も悪いそれを買ったのか気になる
0245nobodyさん2010/11/25(木) 01:03:35ID:???
つかあのシリーズは地雷揃い
0246nobodyさん2010/11/25(木) 10:13:58ID:???
1.3対応でいい本ってなにかあるかな
0247nobodyさん2010/11/25(木) 11:10:39ID:???
ある程度Cakeに慣れた人なら、CakePHP辞典は良いと思うけど、
初心者の場合だと難しいね。何がしたいか分かって探すリファレンス本だし。
0248nobodyさん2010/11/25(木) 20:30:07ID:???
>>242
奴らは街角で拉致られてタコ部屋に押し込まれて強制労働させられてるのか?
自ら希望して派遣会社に登録したんじゃないのか?
まずそこをハッキリして貰いたいんだが。
0249nobodyさん2010/11/25(木) 21:12:22ID:???
>>248
人間、切羽詰まると生SQL書いてしまうのか・・・
0250nobodyさん2010/11/25(木) 22:39:36ID:???
>>248
拉致られてタコ部屋に押し込まれるとActiveRecordの恩恵が半分になるのか・・・
0251nobodyさん2010/11/25(木) 22:53:00ID:???
カオス
02522392010/11/26(金) 06:09:25ID:???
>>242
疑問が少し晴れました。
ありがとうございました。

まだCakePHPのチュートリやったくらいなので、しょぼい自作のフレームワーク
と比べて、あまり恩恵を感じられてないのですが、もう少し学習してみたいと思
います。
0253nobodyさん2010/11/27(土) 13:38:43ID:???
フレームワークなんて、いかにルールを守って使うかだからなー。
合う合わないがある。色々あるから他のを試してみても良いと思う。
02542522010/11/27(土) 18:31:52ID:???
現在、しょぼい自作フレームワーク + Smarty で開発しています。
DB関連は、SQLを直接書いて、PDO。
出力は、Smartyにお任せ。

CakePHPを使えば、上記のアーキテクチャ(?)に比べて数倍効率UPすると
思っていましたが・・・もしかするとそれは幻想かなぁ・・・
0255nobodyさん2010/11/27(土) 20:10:38ID:???
効率上げる目的ならば、しばらくCakeの流儀に慣れるしかないと思われ
(Model周りのメソッド含め)
0256nobodyさん2010/11/28(日) 11:24:00ID:???
>>252
とりあえず過去の遺産は忘れて、Cakeに染まってみたら?
そこから自分が効率良いと思う手法にしたらいいと思う。
02572522010/11/28(日) 18:39:37ID:???
>>256

>過去の遺産は忘れて
そうですね!
素晴しいアドバイスありがとう。
0258nobodyさん2010/11/28(日) 23:06:55ID:???
Cakeでいくつかシステム作ったら、
オレオレフレームワークの方の道も開けるよ。
そしてCakeの流儀がいかに計算されているかに気づく。
■ このスレッドは過去ログ倉庫に格納されています