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

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

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2009/09/01(火) 16:12:06ID:XVdxsVut
CakePHPは、Ruby on Railsの概念の多くを取り入れた、Rails流の高速開発とPHPの機動性を兼ね備えたフレームワークです。

※sage推奨
テンプレは>>1-5くらい

■本家
http://www.cakephp.org/
APIドキュメント
http://api.cakephp.org/
the Bakery
http://bakery.cakephp.org/
thechaw
http://thechaw.com/projects
CheatSheet (PDF)
http://cakephp.org/files/Resources/CakePHP-1.2-Cheatsheet.pdf

■日本語公式
http://cakephp.jp/
フォーラム
http://cakephp.jp/modules/newbb/
cookbook(マニュアル)
http://book.cakephp.org/ja
CakeMatsuriTokyo2009
http://matsuri.cakephp.jp/
0797nobodyさん2010/02/09(火) 10:12:50ID:???
>>794
場合によって違ってくる。
なのでコントローラーやビュー、モデルで
pr($this); をやりまくれば感覚的にわかってくるよ。
0798nobodyさん2010/02/09(火) 10:39:16ID:???
>>797
場合によって違う理由を>>795で学んだほうがいいと思う
0799nobodyさん2010/02/09(火) 10:54:41ID:???
>>792
最近同じようにnamedで/(スラッシュ)を渡そうとしたらダメだったんで
その部分は?でやることにした。

?xxx=yyyはnamedじゃなくて$this->params['url']でやってくるからそこから取り出せばいいよ。
0800nobodyさん2010/02/09(火) 11:14:54ID:???
PHPやWebの仕組みを知らない奴はまずそっち勉強した方がいい
さすがにthisってなんですかとかUrlが?でも渡せて疑問とか
プログラマとしてどうかと思う
0801nobodyさん2010/02/09(火) 13:21:15ID:???
コンポーネントでログインチェックを行い、
認証できない場合はrenderにてログインエラーページを指定していますが、render以降の処理(コントローラで定義している処理)が実行されてしまいます。
コンポーネントなのでreturnを使ってもコントローラに戻るだけですし、exitをするとrenderもされません。

コントローラでログインチェックするべきなのかもしれませんが、複数のページに実装するプログラムなのでコンポーネントにまとめています。
どのようにしたらその後の処理を行わないようにできるでしょうか?
0802nobodyさん2010/02/09(火) 13:36:27ID:???
>>801
AuthComponentじゃないんだよね?

その前提で。
renderじゃなくて、redirectじゃないかな?
0803nobodyさん2010/02/09(火) 16:49:52ID:???
Model User, Boardがあり、それぞれ、hasMany, belogsToの関係です

Userをfindした際、associationで複数個取得されるBoardを、条件で絞り込みたいのですが、
これはUserを取得した後、PHPで処理するしかないのでしたっけ?
0804nobodyさん2010/02/09(火) 17:39:56ID:???
>>803
絞り込みをずっと使うならUserモデルのhasManyのBoardのconditionsを設定しておく。
でなければUser->bindModelで同じように条件を設定するかcontainableビヘイビアを使うとか。
マニュアルの「モデルを結びつける」の所はよく読んでおくといいです。
0805nobodyさん2010/02/09(火) 18:13:47ID:???
apiドキュメント、翻訳されてるのは1.1のみで1.2は英語のみなんですよね?
0806nobodyさん2010/02/09(火) 19:26:23ID:???
>>805
このあたりの事ならそうだね、長い文章じゃないし翻訳サイトかググればなんとかなる。
http://api.cakephp.org/class/html-helper
0807nobodyさん2010/02/09(火) 20:11:33ID:???
>>804
なるほど
必要なとこだけbindModelで設定しなおす方法もありですね
ありがとうございます
0808nobodyさん2010/02/10(水) 01:25:31ID:???
モデル、ビュー、コントローラってどうしてそういう呼び方になったの?
まあ、ビューは分かるとして、ほかは関係なくないのかな。
0809nobodyさん2010/02/10(水) 01:34:34ID:???
ポカーン
0810nobodyさん2010/02/10(水) 01:53:55ID:???
モデルはともかく、コントローラはそのままじゃないか
0811nobodyさん2010/02/10(水) 04:19:55ID:???
モデルもデータモデルだからそのままだろ
0812nobodyさん2010/02/10(水) 04:41:53ID:???
>>811
おぉなるほどね
0813nobodyさん2010/02/10(水) 06:51:33ID:???
こんにちは。本日cakephpを始めました。
もしよければ質問させてくださいませ。

ロリポップサーバでwordpressを運用しております。
phpmyadminでcakePHP用のデータベースを新たに作成できませんでした。

この場合、wordpressとcakephpのデータが混在しないかなと心配なのですが、
それほど心配することはないでしょうか?
それとも、もう一つアカウントを契約してやらないと後悔することになるのでしょうか?
0814nobodyさん2010/02/10(水) 06:52:14ID:???
◯ホール目っていうスレタイ、次から変えた方が良くないか

初見のときセキュリティホールだらけなのかと思ったぞ
ケーキの数え方にかけてるってのも伝わりづらいし
0815nobodyさん2010/02/10(水) 07:47:58ID:???
おいおい、85なんて余裕で突破してるし
0816nobodyさん2010/02/10(水) 07:49:11ID:???
誤爆った
0817nobodyさん2010/02/10(水) 08:26:52ID:???
>>4
ガイドブックってもう品切なんだね。
他にいい入門書ないのかな。
0818nobodyさん2010/02/10(水) 08:58:36ID:???
>>813
テーブル名にprefixをつけられる
たとえ複数のCakePHPを同一DBで使っても混在しない
0819nobodyさん2010/02/10(水) 08:59:38ID:???
>>814
賛同を得られる対案だせば自然に変わると思うよ
0820nobodyさん2010/02/10(水) 09:14:14ID:???
>>813

ありがとうございます!!
0821nobodyさん2010/02/10(水) 09:27:47ID:???
プログラム始めてでPHPを勉強中です。
初心者用の参考書を数冊読み、ある程度の文法知識、簡単なフォーム、アンケートなどは
作れるようになりました。

はやくアプリを作れるようになりたいので、背伸びしてCAKEPHPをかじることに決めました。
CAKEPHPを使うにあたって、ここらへんは予習しておけ!という部分はあるでしょうか?


【現在の知識】
・PHPの基本的な文法知識
・MySQLの簡単な知識
・HTMLやCSSの基本的な知識
・エディタはPHPeclipseなどを使用中

【勉強予定】
・PDO(データベース)
・PHPのクラス

現在、ユーザー関数はなんとか理解できるのですが、クラスの理解があやふやです。
このオブジェクト指向の部分がわからないとCAKEPHPを使えないかと思い、悪戦苦闘中です。
0822nobodyさん2010/02/10(水) 09:33:23ID:???
>>821
やる気だけあれば あとはキミ次第だよ
ここで聞く暇があったら、アプリをひとつでも多く作るんだ!
0823nobodyさん2010/02/10(水) 09:54:07ID:???
>>821
クラスはまず基本を一読して、簡単なクラスでも書いてみればいい。
Cakeやるのにクラスは必須ではないよ。

Cake触ってからまたクラスについて勉強すれば理解が進んでるかもね。

>>822の言うとおりまずは作り始めて分からないところを補強すればいい。
0824nobodyさん2010/02/10(水) 10:00:18ID:???
>>822
>>823

どうもありがとうございます!
まずは触ってから補強という方法でいこうかと思います。
0825nobodyさん2010/02/10(水) 10:01:04ID:???
>>814
洒落が効いてていいじゃないか。
2スレ目からの伝統だし、愛着あるなぁ。
そもそも
ホール === セキュリティホール
なんて思い込みどうでもいいじゃん。
0826nobodyさん2010/02/10(水) 10:58:13ID:???
>>814
ホールケーキをすぐにイメージできないの君だけ
だいたい、ケーキの数え方なんてのも違うし、ケーキは1台2台だ
0827nobodyさん2010/02/10(水) 11:09:46ID:???
数え方って言うより
何ホール食べちゃったよ!的なニュアンスでかわいいと思う。
0828nobodyさん2010/02/10(水) 12:59:48ID:???
>>814以外スイーツ男子
0829nobodyさん2010/02/10(水) 16:28:54ID:UrqttIc/
>>784
公式サポートかどうかわからないけどpaginatorの中で
$options = array_merge($this->params, $this->params['url'], $this->passedArgs);
というふうに書かれているので、namedパラメータだけじゃなくてGETパラメータでも大丈夫だと思う

>>789
cakeではnamedパラメータとGETパラメータは別の扱いだよ
0830nobodyさん2010/02/11(木) 01:16:16ID:SsYIk7V8
質問!
userModelとprofileModelがあって、
それぞれアソシエーションhasoneで連携してます。
userModelのdeleteアクションを作って実行すると、
データを削除できません。

ただ、
・User hasone Profile
・Profile belongsto User
にすると削除できます。

なぜお互いにhasoneだと削除できないんですか?
(最初はdependentの設定かな、と思ったけど、関係なかったです。)
0831nobodyさん2010/02/11(木) 07:38:42ID:???
>>830
削除できない理由はよく分からないけど、アソシエーションの設定が間違っていることが原因かと

A hasOne B
B hasOne A
ということは、Aにはb_idが、Bにはa_idが必要(お互いに外部キーが必要)
(片方がhasManyならよくあるケース)

で、質問の例の場合は A hasOne B のケースで、その場合、必要に応じて B belongsTo A をする
この場合外部キーは B.a_id のみ
0832nobodyさん2010/02/11(木) 10:19:44ID:???
お互いを hasOne にする時なんてあるの?
どっちかが belongsTo になると思うんだけど。
0833nobodyさん2010/02/11(木) 10:27:40ID:???
>>832
ない
0834nobodyさん2010/02/11(木) 15:08:47ID:RWXIN9Dn
cake1.2のbakeで質問です。

User hasMany Question
Quesion belongsTo User
上記のアソシエーションを設定し、Quesionのindexビューをbakeしました。
bakeされたindexビューではQuestionのuser_idではなく、
$Question['User']['name']が表示されます。

この動作は、CakePHPのフィールド名の規約(modifiedのような)によるものなのでしょうか?
0835nobodyさん2010/02/11(木) 15:32:30ID:???
>>834
そう。nameかtitleが使われる
displayFieldで変更が可能
08368302010/02/11(木) 17:46:29ID:6DwJ8Mj3
>>831,2,3
ありがとうございました!
0837nobodyさん2010/02/12(金) 07:16:07ID:???
おはようございます。

cakePHPを勉強中なのですが、データベースの差異を吸収できると本に書かれております。
ということは、PDOとかは基本的には使わなくても、様々なデータベースに変更しやすいと考えてよろしいでしょうか?
0838nobodyさん2010/02/12(金) 09:03:35ID:???
>>837
やってみろ。すぐわかる。カス
0839nobodyさん2010/02/12(金) 09:03:54ID:???
>>837
基本的にはそうです。

対応しているDBはこちら
http://book.cakephp.org/ja/view/28/Requirements
08408372010/02/12(金) 09:41:33ID:???
どうもありがとうございます。
あほな質問ですいませんでした。
0841nobodyさん2010/02/12(金) 13:21:07ID:???
cakephpのlogファイルが容量増え続けるんだけど、logの記録を一切しない設定とかってないの?
0842nobodyさん2010/02/12(金) 13:31:16ID:???
>>841
何のlog?
0843nobodyさん2010/02/12(金) 13:33:14ID:???
>>842
error.log。
0844nobodyさん2010/02/12(金) 13:54:24ID:???
>>843
あれ?debugが0であれば$this->log()使わないと記録されないという認識だけど違った?
0845nobodyさん2010/02/12(金) 22:23:36ID:???
error.log ということは何かしらのエラーがあるわけだから、
エラーの内容を解決したほうがいいんじゃね
0846nobodyさん2010/02/14(日) 13:09:00ID:???
debug0 にしてんだけど、debuglogとかerrorlogが書き込まれていく。
たしかに解決したほうがいいんだけどそこまでするようなサイトじゃないので
サーバーを占有しないように log系一切無しにしたいんだけどなぁ。
0847nobodyさん2010/02/14(日) 16:28:37ID:???
エラーあっても警告しないようにFW自体改造するしか無いんでは…
というか、よく気持ち悪くないね。エラー出しっぱなしで
0848nobodyさん2010/02/15(月) 10:21:57ID:???
1 <?=$result ?>
2 <?php echo $result; ?>

CakePHPでは1と2は同じ意味なのでしょうか?

参考書では1の書き方で書かれているのですが、
自分の環境では2の書き方をしなければ動いてくれないのです。

動作環境はxamppの最新版です。
0849nobodyさん2010/02/15(月) 10:24:43ID:???
>>848
cakephpじゃなくても、一緒の意味。

ただし、php.iniの設定で shortopentag が有効になっていないと使えない。
0850nobodyさん2010/02/15(月) 10:33:14ID:???
>>849

もやもやがすっきりしました。
ありがとうございます!!
0851nobodyさん2010/02/16(火) 12:22:04ID:???
質問です。
トップページ(default.ctp)の中に設置しているフォームから送信された文字列を
個別ページ(view.ctp)で表示している本文の一部に代入したいんですが、
どうすればいいんでしょうか。

本文の中の代入したい部分に$wordとか入れてみても駄目だったんですが、
どこで処理すればいいんですか。

echo $post['Post']['body'];
echo $word;

みたいに並べることはできるんですが、これでは混ぜられそうにない。
0852nobodyさん2010/02/16(火) 12:33:55ID:???
>>851
もうちょっと具体例で示してちょ。
何をやりたいか、さっぱりだわさ
0853nobodyさん2010/02/16(火) 12:58:57ID:???
>>851
controller側でsetしてますか?

function view(){
if(isset($this->data)){
$this->set("post",$this->data)
}
}
08548532010/02/16(火) 13:02:27ID:???
>>851
ごめんちゃんとみてなかった。
sprintf()使うとかじゃだめなんかな
0855nobodyさん2010/02/16(火) 13:13:36ID:???
>>851
$post['Post']['body'](本文)のなかに $word の値を埋め込みたいということ?
0856nobodyさん2010/02/16(火) 13:19:37ID:???
>>851
debug($this->params) で、フォームからコントローラーにどういう値が送られてるのかを見る。
それで必要なものを$this->setでセットしてビューで表示。
0857nobodyさん2010/02/16(火) 15:58:17ID:???
みんなのエスパーぶりに感動した
0858nobodyさん2010/02/16(火) 16:05:32ID:???
いくらなんでもsetや配列のチェックぐらいはこころえてるんじゃ…?
0859nobodyさん2010/02/17(水) 10:25:19ID:???
データベースのテーブル名を "Boards"とした時、
CakePHPのコントローラ内では "Board" として、 "s" と削除した名前を指定しないといけないのでしょうか?

class BoardsController extends AppController {

public $name = 'Boards';
public $uses = array('Board','Personal');
}

「CakePHPによるWebアプリケーション開発」という本によると、 s がついたりつかなかったりして少し混乱しております。
0860nobodyさん2010/02/17(水) 10:52:42ID:???
>>859
http://book.cakephp.org/ja/complete/22/CakePHP-Conventions

DB table => boards
Controller => BoardsController ( Boards )
Model => Board
0861nobodyさん2010/02/17(水) 11:22:07ID:???
>>860

ありがとうございます!
そういう規約だったのですね。熟読いたします。
0862nobodyさん2010/02/17(水) 23:48:29ID:???
>>861
こんな便利なツールあるよ。
http://www.cpa-lab.com/tech2/inflects/

例えばDB テーブル名をchildren(子供)にした場合

DB テーブル名 =>children
Controllerのクラス名 => ChildrenController
Controller名 => Children
Controllerのファイル名 => children_controller.php
Model名 =>Child
Modelのファイル名 => child.php

不規則な複数形にもCakeは対応してる。オレより頭いい。
0863nobodyさん2010/02/18(木) 00:50:16ID:???
>>862
ああこれは便利だね。
欲をいえば、cakephpで既に使われているクラス名(Fileとか)を弾いてくれるとうれしいな。
0864nobodyさん2010/02/18(木) 12:05:47ID:???
>>862

素晴らしい GJ!!
0865nobodyさん2010/02/19(金) 19:02:24ID:o9GNlhpe
スレ違いだったらすいません。

cakephpは中小規模向けって色々書かれているのを見るんですが、
大規模、中規模、小規模の定義ってなんですか?

ユーザー数ですか?機能ですか?
0866nobodyさん2010/02/19(金) 19:03:28ID:???
ぐぐれ
0867nobodyさん2010/02/19(金) 20:42:47ID:???
>>865
大規模:コンピュータシステムが大きい規模
中規模:コンピュータシステムが中くらいの規模
小規模:コンピュータシステムが小さい規模
0868nobodyさん2010/02/19(金) 21:16:30ID:???
記事を書いている人の勝手な思い込み説
0869nobodyさん2010/02/19(金) 21:17:21ID:???
>>867
大規模 アマゾン
中規模 ブックオフオンライン
小規模 街の古本屋さん
0870nobodyさん2010/02/19(金) 22:32:57ID:???
大規模:AKB
中規模:モーニング娘。
小規模:Perfume
0871nobodyさん2010/02/19(金) 23:37:14ID:???
大規模:こち亀の中川
中規模:タルるートの原子力
小規模:スネ夫
0872nobodyさん2010/02/20(土) 01:35:31ID:Zor8hgfe
大規模:大便
中規模:中便
小規模:小便
0873nobodyさん2010/02/20(土) 01:36:56ID:???
中便ってなんやねん
ゆるゆるの…
0874nobodyさん2010/02/20(土) 02:09:06ID:???
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1416429744
0875nobodyさん2010/02/20(土) 02:11:13ID:???
屁がまじって生クリーム的にフワフワな便なら出たことあるけどな
0876nobodyさん2010/02/20(土) 09:17:18ID:???
>>875
フワフワっておいしそうだな
そんな便ならスカトロできそうだな
0877nobodyさん2010/02/20(土) 10:34:11ID:???
>>868
賛成
CakePHP1.2は小規模、中規模、大規模のオールマイティで活用出来ると思う。
symfonyは、大規模、中規模向けで、小規模には向かないと思う。
0878nobodyさん2010/02/20(土) 13:26:22ID:???
どのFWでもどの規模でも行けるよ基本的に
ただSymfonyはCakeやZendに比べて動作が重い
0879nobodyさん2010/02/20(土) 15:31:09ID:???
なぜ標準であるライブラリをApp::import で読み込まないと使えないのでしょうか?
どうせなら、他の機能と一緒に標準で搭載しておけば楽なのに。

あまりに機能を標準で入れすぎると重くなるからかな?

初心者の素朴な疑問なのですが、誰か教えてくださいませ。
0880nobodyさん2010/02/21(日) 18:24:58ID:???
コントローラで処理した後に、処理前のページに戻るにはどう記述すればいいですか?
ググルにもキーワードがわかりません。><;おねがいします
0881nobodyさん2010/02/21(日) 18:29:59ID:???
>>880
外してるかもしれんが、元のページでURLをセッションにでも入れておけばいいんジャマイカ?
0882nobodyさん2010/02/21(日) 19:40:00ID:???
え、redirect?
0883nobodyさん2010/02/21(日) 19:51:09ID:???
>>882
そうだよ
0884nobodyさん2010/02/21(日) 23:18:19ID:???
>> 887
大規模ってかデザイナーがPHPわからない人のときでない限り
必要ない?
0885nobodyさん2010/02/22(月) 00:13:30ID:???
>>884
887 ってどれ?

デザイナーがPHP解ってたらフレームワーク要らないってこと?
デザイナーが作ったプログラムなんてメンテナンスしたくないぞ。
0886nobodyさん2010/02/22(月) 10:25:56ID:???
> デザイナーが作ったプログラムなんてメンテナンスしたくないぞ。

デザイナーが書いたPHP入りテンプレートの話でそ?
0887nobodyさん2010/02/22(月) 10:27:17ID:???
>>884

Symfony しっかり作るぞ(商売用ケーキ)
Cake サクッと作るぞ(おいしいケーキ)
Zend Fr 自分で作るぞ(うまいかどうかは作り手次第)
0888nobodyさん2010/02/22(月) 17:51:19ID:???
>>885
smartyと勘違いしてたスマン
0889nobodyさん2010/02/22(月) 23:08:02ID:???
レベル低く
0890nobodyさん2010/02/24(水) 14:32:23ID:???
CakePHPと相性のよいエディターはなんでしょうか?

eclipse PDT, Netbeans, notpad++

などが海外の掲示板には挙げられていましたが。
コード補完機能を出来る限り使いたいのですが、netbeansもeclipseもサポートしてないし。
0891nobodyさん2010/02/24(水) 14:37:54ID:???
http://www.tiplite.com/cakephp-support-in-netbeans/

今後のサポート状況を見る限り、 Netbeansがもっともベストなのかなあと思うのですが。

現時点でも eclipse, netbeans ともにカスタマイズすることである程度cakeと連携できるようですが、
どちらがより便利なのか詳しい人よければ教えてほしい!
0892nobodyさん2010/02/24(水) 16:07:45ID:???
俺はPDT使ってる
0893nobodyさん2010/02/24(水) 18:45:40ID:???
netbeans使ったけど、微妙だったな。
eclipse よりはマシだけど。

コントローラーからショートカットキーで モデル、ビューに飛べたら便利だと思うんだけど。
できないよね?netbeans。
0894nobodyさん2010/02/25(木) 05:51:56ID:???
TextMateにcakePHP bundleだろjk
0895nobodyさん2010/02/25(木) 12:44:41ID:???
一つのコントローラーのアクションで色々な処理する場合って、他のモデルも読み出すよね。
で、コーディングしてくとどうしてもコードが煩雑になる。

なのでそれをモデルにまとめたいんだが、まとめようとすると
「モデルから他のモデルを読み出す」 処理が必要になる。

モデルから他のモデルを読み出すのはやっぱりよくないのかな。
こういう場合はコントローラー多少煩雑になってもコントローラー内で処理を終わらせるべきか、
コントローラーが煩雑になりそうだったらモデルからモデルを読み出す処理をした方がよいのか。

どっちがいいんでしょうか。
0896nobodyさん2010/02/25(木) 12:48:01ID:???
>>895
モデルからモデルを呼ぶのが良い
■ このスレッドは過去ログ倉庫に格納されています