【PHP】フレームワーク CakePHP 11ホール目【v1.3】
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2011/02/16(水) 21:52:35ID:zCTGjUMqCakePHPから派生した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
0459nobodyさん
2011/04/02(土) 20:40:40.45ID:???ActiveRecordを実装するにはO/Rマッパーが必要で、
O/Rマッパーは複合キーと相性が悪いよね。
ActiveRecordにも得手不得手があるから、ActiveRecordが苦手なスキーマが必要ってなら、
ActiveRecordを前提に成り立ってるフレームワークであるCakePHPは、
そもそも道具選びが間違ってるんじゃないかな。
それは言いすぎだとしても、
CakePHPをはじめとしたフレームワークは、
ニーズの多いところをよりよくカバーするから、
ニーズの少ないところにサポートが無いのはしょうがないと思うよ。
各テーブルにidという主キーが必ずあるようなスキーマで、
大抵のものは作れるし、その規約に沿ったほうが楽ってのもあるね。
長々と書いたけど、
俺はそんなスキーマで作るようなのしか、今のところ作る予定が無いから、
複合キーなんていらなかったにゃって思ったんだ。
もちろん冗談交じりだぞ。
0460nobodyさん
2011/04/03(日) 01:00:03.54ID:???0461nobodyさん
2011/04/03(日) 09:43:57.18ID:???0462nobodyさん
2011/04/03(日) 17:15:58.87ID:???英語版はまだマシだけど、
日本語版は古い・間違いが多い・サンプルがシンプルすぎて実務で悩むとこは結局学習できない。
読む必要が無いってわけじゃないんだけど、Cookbookだけだとつらいと思うよ。
CakePHPによる実践Webアプリケーション開発って本を参考にしたけど、
これはもう古いからなぁ。1.2ベースだし。
でも一応、Cookbookのサンプルを作って基本的なことを理解してからなら、
この本はそこそこ役に立ったよ。
余談だけどACLが複雑すぎて使う気が起こらない。
0463nobodyさん
2011/04/03(日) 23:06:40.74ID:???そういうユーザーが多いから、良い本が少ない→売り上げ少ない→次の本が出ない、の悪循環なんだろうか
0464nobodyさん
2011/04/04(月) 00:08:26.97ID:6xfhCachCookBookには詳細な機能はあまり丁寧に載っていないので、いちいちネットで調べることが多くなってくる。
そうなったらリファレンス本を買って眺めながらいろいろつくってみるといい。
自分の場合はそれでかなり覚えたよ。
個人的には秀和システムのCakePHP辞典がおすすめ。
手持ちの初版には誤字が少しあるけど、暇な時に眺めるだけでおもしろい。
0465nobodyさん
2011/04/04(月) 01:12:38.49ID:???自分が何したいかで調べたらいいし、作者の作法を身につけなくても良い
Cookbookで流れをつかんで、開発しだしたらAPI Class Indexを参照すればほぼ足りる。
そのうちタイミングとかインスタンス生成が気になってソースを見ることになるけど。
0467nobodyさん
2011/04/04(月) 04:07:47.83ID:her01YtQ俺はctpファイルの先頭に、
<?php $this->set('title_for_layout', '新規投稿'); ?>
みたいにしてるけど
他にスマートな方法あるかな?
コントローラのアクションの中に書くのはまずいよな。
タイトルはビューの情報だし
0468nobodyさん
2011/04/04(月) 09:57:31.52ID:???てか、例えばユーザーのプロフィールページの場合、ユーザー名とか書きたいから、
モデルからユーザー名など貰って、アクションでセットする事になるんじゃ。
0469nobodyさん
2011/04/04(月) 10:59:35.73ID:???controller見なきゃ行けないというのがな・・・
かといってビューで編集するのもなんか違う気がするし
0470nobodyさん
2011/04/04(月) 11:43:22.82ID:???設定ファイルの中に、
$config['title']['Users']['signup'] = '新規登録';
みたいに、コントローラー名、アクション名をキーにした設定を作る。
コントローラーから
$pagetitle = Configure::read('title'.'.'.$this->name.'.'.$this->action);
って感じで読み込んでタイトルにセットする。
ってやればタイトルは設定ファイルで管理できるよ。
0471nobodyさん
2011/04/04(月) 13:41:54.22ID:???0472nobodyさん
2011/04/04(月) 14:25:48.01ID:???0473nobodyさん
2011/04/04(月) 16:00:00.04ID:???Cakeってかphpで作る必要ないっしょ。
0475nobodyさん
2011/04/04(月) 20:26:13.06ID:???変数にタイトルをセットしてエレメント呼び出しの手順で。
0478nobodyさん
2011/04/05(火) 01:09:57.20ID:???リクエストを送っても何も戻ってこないんですが
modelフォルダの中に何も入れてないのがいけないのでしょうか?
教本にはcontrollerのファイルとcomponentのファイル、ctpファイル、と合計3つしかファイル作ってないんですが・・・
0479nobodyさん
2011/04/05(火) 02:03:54.39ID:???とりあえず
・cakephpのインストール完了画面を出す
http://futuremix.org/wp-content/uploads/2010/06/cakephp_warning-500x273.png こんな感じの
・controllerだけでhello worldを出す
この2点をやるのが先だ
0480nobodyさん
2011/04/05(火) 02:28:06.37ID:9HAh5AGuちなみにUtilクラスとはDateUtilとかStringUtilとか
共通処理を集めたスタティックメソッドのクラスです。
0481nobodyさん
2011/04/05(火) 02:52:43.54ID:???http://book.cakephp.org/ja/view/899/CakePHPのフォルダ構造
を見るといいです。libsかvendorsのどっちか。
0483nobodyさん
2011/04/05(火) 07:47:02.08ID:???うちはvendorsにcommon_function.phpを置いて、
app_controller.phpでrequired_once
0485nobodyさん
2011/04/05(火) 10:52:01.47ID:???ただ、ググったサイトを参考にHello_World_controller.phpをつくり、ソース↓
<?php class HelloWorldController extends AppController {
public $name = 'HelloWorld';
public $uses = array();
public $autoRender = false;
function index()
{
echo "hello world!";
}
}?>
これをapp/controllersフォルダに入れて、xxx/hello_world/にアクセスしたところ、
HelloWorldController could not be found.と言われてしまいます。
なぜ認識してくれないんだろうか、、、
0487nobodyさん
2011/04/05(火) 11:39:44.86ID:???度々失礼いたします。それはHello_World_controller.phpのファイル名ってことですよね。
誤字脱字がないことを確認して、もしかしてアンダーバーが悪いのかと消したりしたんですが
どうにも認識してくれません。。。↓のサイトのまんま参考にやってみたのですが、、、
ttp://ameblo.jp/tondemonight/entry-10117208283.html
理解力のない馬鹿ですいません。もう一息ヒントをいただけませんか。
0488nobodyさん
2011/04/05(火) 11:42:45.36ID:???すいません、$nameの部分だったんですね。できました!!
ありがとうございました!
0489nobodyさん
2011/04/05(火) 14:46:55.58ID:???JSON形式で出力するはずが、HTML形式で出力されているのが原因でした。
478で言っているctpファイルで、JSON形式にエンコードする旨が書かれているのですが、
調べたところ、layoutフォルダにdefault.ctpを作ればよいと書いてあり、
[default.ctp]
<?php echo $content_for_layout; ?>
というファイルを作ったところ、確かにブラウザで直アクセスしたときの表示は変わったのですが、
javascriptからのリクエストに対するレスポンスは変わらずHTML形式のままでした。
あともう少しだと思うのですが、、、何か良い方法があればご教授ください。
0490nobodyさん
2011/04/05(火) 16:15:37.38ID:???0491nobodyさん
2011/04/05(火) 17:15:06.34ID:???0492nobodyさん
2011/04/05(火) 20:52:45.33ID:???0493nobodyさん
2011/04/06(水) 02:23:36.12ID:3ifgNuIvつCakePHP 規約ワードメーカー
http://www.cpa-lab.com/tech2/inflects/
0494nobodyさん
2011/04/06(水) 03:25:19.02ID:???これってややこしいよな。それならテーブル名がwomanでもいいじゃん。
Cakeの規則に合わせるのは大事だけど、
英語得意じゃない日本人にとっては、分かりやすい形で良いと思うんだけどなあ
0495nobodyさん
2011/04/06(水) 06:51:01.77ID:6d97kR6lいや、
Aというデータがあるとして、
・Aの複数形=その中には複数のAデータがある
・Aの単数形=Aのデータ1つ
複数形は、DBでいうとテーブル。
プログラミング言語では配列。
単数形は、DBでいうとレコード
プログラミング言語では配列でない変数
複数形になれると、無意識に使うようになるよ。
英語が得意でなくても英単語覚えるのは別。
実際英単語組み合わせてプログラミングしてるんだから。
0496nobodyさん
2011/04/06(水) 11:34:08.35ID:???だから、それらを開発者が、あるいはその他の人間が覚える必要あるのか?
と言いたいんだ。せっかく作ったのを自慢したいのはわかるけどさ。
別にテーブル名はあくまで”識別名称”なだけだから、何だって良いんだよ。
別にCakeに従わないからと言ってエラーになるわけじゃないんだし。
womanという単語で分かるなら、womanというテーブルで良いんだ。
categoryをcategoriesにしなくても良いんだよ。categorysが誤訳でもさ
0497nobodyさん
2011/04/06(水) 12:49:30.36ID:???皆が1つのルールを覚えて使う事による効率というのがあるんだよね。
というかフレームワークってそういうためのもの。
使わない自由もあるけど、Cake使うならCakeのルールを覚えて使う事をお勧めするよ。
まあCookbookでpeopleテーブルととPersonモデルって見たときは、
最初は誤植か何かかと思ったよ。
そしてちょっとやりすぎだとは思う。
0498nobodyさん
2011/04/06(水) 13:56:28.56ID:???0499nobodyさん
2011/04/06(水) 13:59:00.24ID:???0500nobodyさん
2011/04/06(水) 14:06:34.56ID:6d97kR6lあなたプログラミングに向いてないわ・・・。
自分が気にしないからって、categorysとか付けちゃう人と開発したくないな。
自分しか触らないって言うんだろうけど、
その精神は今後絶対に成長に影響する。
不特定多数が使うようなライブラリを開発することも、
複数人で開発することも、全て否定するんだよね。
>>498
一人で開発しようが、規約(=レール)は大事だよ。
統一された規約のもと開発するのは、とても安心するし、効率的。
そのレールの上に乗って進んでいくだけになるからな。
0501nobodyさん
2011/04/06(水) 14:18:49.90ID:???普通に複数人で開発に使えると思うよ。
シンフォニーと比べると、規模は小さめのあたりが得意だとは思うから、
人数的にも少なめかもしれないけど。
関係ないけど、シンフォニーっていつも綴りわからんくなるわ。
0502nobodyさん
2011/04/06(水) 15:28:30.51ID:???逆だ逆。俺は仕様にめちゃくちゃこだわって規約を厳守するようにしているが、
結局、人間だ。必ず・絶対厳守させるには、それ相応の知識・経験が必要。
で、womanをwomenに変えなくても一般的なwomanで皆が分かるなら
それで良いじゃんって話だ。俺もそれで良いと納得してる。
お前は自分が作ったツールを是が非でも認めて貰いたいのかも知れないが、
ぶっちゃけ、お前のそれは無駄だと思う。
0503nobodyさん
2011/04/06(水) 15:30:04.66ID:???まぁ、それならそれで良いよ。ただ、そういうプロジェクトもあるって事は理解しろよ。
0504nobodyさん
2011/04/06(水) 15:54:13.60ID:???0505nobodyさん
2011/04/06(水) 16:03:54.11ID:???0506nobodyさん
2011/04/06(水) 16:07:43.86ID:???ある程度の規模のプロジェクトだと100%の規約の遵守を求められるよな。
規約を守っていなければ、動作が正常でもバグ扱い。
俺もそれが普通だと思っているのだが、そうじゃない人にとって規約ってなんなんだろう。
0507nobodyさん
2011/04/06(水) 17:03:43.47ID:???が、英語圏製なので仕方が無いのかなとも思うよ。
最良のフレームワークだとはまったく思ってない。
でも、Cakeというフレームワークを使って、
楽になる部分は多いし、使う以上は規約にそったほうが効果もでやすいからな。
それにCakeは規約どおりじゃないと苦労するフレームワークだとも思う。
単数・複数や主キー名をid以外にしたりと、逃げ道は用意されてる部分もあるけど、
そういうの使うのは、ハマリの元だわ。
0508nobodyさん
2011/04/06(水) 17:03:56.78ID:???お前らからしたら、俺がその「規約を守らなくてもいい人」だと言うことだろうけど、
>>502に書いたとおり、
俺は「規約が守らない人もいて、完全に厳守させるのは人間だから難しい。
だから、チーム毎、プロジェクト毎で分かればそれで良いじゃないか」
と言いたいだけなんだけどな。お前らはどうも頭が固いようだな。
0509nobodyさん
2011/04/06(水) 17:07:19.44ID:???0510nobodyさん
2011/04/06(水) 17:43:49.17ID:???複数形にしても、間違ってたらエラーになるわけだし。
エラーになったから規約が難しいのがおかしい、ということを許し続けると
それこそフレームワークを使う意味のないほど混沌としたソースに
なる気がする。
「複数形がわからなければ辞書で調べろ」くらいはルールにできるだろ。
0511nobodyさん
2011/04/06(水) 18:22:20.17ID:???<?php echo $this->element('header', array('cache' => true)); ?>
テストの時にキャッシュをしたくないので、core.phpの
Configure::write('Cache.check', true);
をコメントアウトしました。
しかし、キャッシュされます。
冒頭のようにビューに書いた場合、どうしてもキャッシュされるのでしょうか?
0512nobodyさん
2011/04/06(水) 20:31:22.12ID:???0513nobodyさん
2011/04/06(水) 21:42:55.64ID:???分類したいんだけど、単純にビューで echo $html->image("sub/foo.png") としても
表示出来なくて…。
こういうのは、どうすれば良いのでしょうか?
すごく簡単な事なんだろうけど、どなたか教えて頂けませんか?
0514nobodyさん
2011/04/06(水) 22:38:28.84ID:8sZZCO1iCakePHPは複合キーに対応していないとのことですが、
別に複合キーのテーブルのモデルでも
$Controller::primaryKeyに設定できないだけで、
モデルのfindメソッドとかは使えるし、
特に問題ないのかなーと思ってしまうのですが、
どのような場合に困る(対応していない)のか
馬鹿な俺にでも分かるように教えてもらえませんか?
0518nobodyさん
2011/04/07(木) 00:31:02.97ID:???カラム名どんなのがあるか最初に調べに行くのなw
そんなのModelに定義するようにすりゃーいいのに。
速度より使いやすさを取ったか。
0520nobodyさん
2011/04/07(木) 01:29:37.39ID:???ググってもこれと言った方法がありません・・。
Windows上でシェルのプログラムが正しいかテストする方法はないのでしょうか?
0521nobodyさん
2011/04/07(木) 02:46:08.85ID:???小リナックスかアンドリナックスを入れる
0522nobodyさん
2011/04/07(木) 02:54:26.99ID:???ちゃんとCLIでphpが動くように設定しておけばうごくんじゃね?
Winで開発してないから、断定的なことは申し上げられないが。
0523nobodyさん
2011/04/07(木) 03:29:37.72ID:???0524nobodyさん
2011/04/07(木) 03:35:45.09ID:???コマンドプロンプトで
php C:\htdocs\cakephp\cake\console\cake.php -app app test
みたいなコマンドで普通に実行されました。
3時間ぐらい悩みましたが、問題なく出来そうです。ありがとうございました。
0525nobodyさん
2011/04/07(木) 04:32:01.56ID:???0526nobodyさん
2011/04/07(木) 13:28:09.21ID:???0527nobodyさん
2011/04/07(木) 14:38:28.18ID:???0528nobodyさん
2011/04/07(木) 14:43:49.48ID:???0529nobodyさん
2011/04/07(木) 15:24:13.83ID:???教えてやりゃいいことだと思うんだが
0532nobodyさん
2011/04/07(木) 16:30:13.31ID:???日本のマの平均給与が低いわけがわかった
0533nobodyさん
2011/04/07(木) 17:02:38.88ID:???0534nobodyさん
2011/04/07(木) 19:10:52.62ID:???B「え?いや・・・え?これが?」
A「お前本当に馬鹿だな。全てがお前と同じ人間ばかりかよ。
これだからプログラマ脳だと言われるんだ」
C「わからないじゃなくて、分からない奴もいるって話だろ。お前がルールの全てか。」
D「「漢字読める俺マジレベル高いw」←wwwwwww」
B「・・・」
0535nobodyさん
2011/04/07(木) 19:54:40.69ID:???つぎに誰がそのソースみるのかわかったもんじゃない。
0536nobodyさん
2011/04/07(木) 20:00:22.84ID:???A「ソースのコメントに漢字使うんじゃねえボケ!読めねーだろうが!」
B「わかりました。Aさんの仕様に合わせます」
こう言えばあっさり終了するわな。どんだけコミュ力ねーんだw
自ら関係をややこしくしてるのな
0540nobodyさん
2011/04/07(木) 22:05:38.14ID:???0541nobodyさん
2011/04/07(木) 23:13:04.80ID:???0544nobodyさん
2011/04/08(金) 05:06:31.14ID:???少し見てみたら、ものによっては完成度低いのもあるっぽいんだけど、
沢山ありすぎて全部みて使えるの探すのつらす。
0546nobodyさん
2011/04/08(金) 11:13:22.78ID:???0547nobodyさん
2011/04/08(金) 13:41:36.04ID:???0548nobodyさん
2011/04/08(金) 13:46:25.03ID:???0550nobodyさん
2011/04/08(金) 13:49:24.40ID:???0551nobodyさん
2011/04/08(金) 16:19:21.29ID:???find('all', array("test"=>"test");
で、ひとつもヒットしないはずなのに
なぜか全てのレコードの要素がヒットしてしまいます
なぜヒットしてしまうのか検討がつきません
どなたか詳しい方いましたら教えていただけませんか。よろしくおねがいします
読解力ないからよくわからんけど、
Cakeが最新なら引数の指定がすでにちがう。
んでcore.phpでdebugレベルあげたらSQLや件数が確認できるから
それで見当つくんじゃないかな。
0553551
2011/04/08(金) 18:02:13.57ID:???気分を害した方いましたらすいません
>>552
ありがとうございます。引数を調べたところ無事できました。
参考にしている本の内容ではfindAll()メソッドを使っていて、
そのメソッドが新しいバージョンだと使えないみたいで
findでも同じ引数でできるものかと勘違いしてたみたいです。
0554nobodyさん
2011/04/08(金) 21:00:03.96ID:???文字コードってdatabase.phpで設定するやつ?
encoding=utf8ってやってもupdateしてくれないわ
これどういう条件だとinsertじゃなくupdateしてくれんだろ
0557nobodyさん
2011/04/09(土) 00:42:48.52ID:???各コントローラ共通の関数
これらは作れるけど、
各ビュー・コントローラ共通の関数の置く場所って用意されてないよね。
結構用途として必要な気がするけどなぁ
■ このスレッドは過去ログ倉庫に格納されています