【PHP】フレームワーク CakePHP 14ホール目【v2.1】
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2012/05/01(火) 16:58:44.53ID:fVBzm1/ACakePHPから派生したLithium(li3)も専スレできるまではここでどうぞ
質問するときはCakePHPのバージョンを書きましょう
※他フレームワークとの比較等はスレ違いです
テンプレは>>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
前スレ
【PHP】フレームワーク CakePHP 13ホール目【v2.0】
http://kohada.2ch.net/test/read.cgi/php/1320768310/
0052nobodyさん
2012/05/19(土) 22:45:43.88ID:???それってindex.phpでいじるやつでそ?
APP_DIRとかROOTとかあるけど
pluginsとかvendorsの項目が見当たらないんだが
0054nobodyさん
2012/05/20(日) 00:25:07.80ID:???pluginとかvendorsをどうしたいの?
0055nobodyさん
2012/05/20(日) 10:21:18.74ID:???0056nobodyさん
2012/05/20(日) 10:56:14.49ID:???そしてもう来るな
0057nobodyさん
2012/05/20(日) 11:00:27.81ID:???0058nobodyさん
2012/05/20(日) 11:35:51.12ID:???0059nobodyさん
2012/05/20(日) 14:29:53.88ID:???だからその「システム関係のファイル」ってなんだよ?
cakeのコアのことならマニュアルに書いてある通りだし、>>56の言う通りだ。
vendorsやプラグインも個別にどこにでも好きなところに置けるけど、
>>50 には一言も書いてねえし
0060nobodyさん
2012/05/20(日) 19:10:25.50ID:FJzAEkIA0061nobodyさん
2012/05/20(日) 22:42:21.38ID:???ことがしばしば起こるんだけど、自動でキャッシュ更新する方法ありませんか?
キャッシュはmemcachedを使っています
0064nobodyさん
2012/05/21(月) 21:42:06.73ID:???何度も使う場合は書くけど、そうでない場合はコントローラで済ます
006560
2012/05/22(火) 01:03:15.16ID:???ありがとう。
複雑なクエリや、他のコントローラーから呼ぶようなやつはファットモデルにするよ。
規約は守ってもフレームワークだからって型に縛られないようにするよ。
0066nobodyさん
2012/05/22(火) 02:11:52.42ID:???テーブルに変更が加えられたかどうかをチェックしてしまったらキャッシュしている意味がなくなるから原理的にそれは出来ないんじゃないかな
俺は手動で消してる
0067nobodyさん
2012/05/22(火) 02:26:56.79ID:???一定期間毎にキャッシュを作っていると思うけど、その形で良いと思う
0068nobodyさん
2012/05/22(火) 05:21:12.26ID:???手動でどうやって消してますか?
全部消せば簡単だけどそうすると今アクセス中の客のセッションデータが吹っ飛ぶ
更新したいキャッシュだけ消す簡単な方法あります?というかどのキャッシュを消せば良いのか
0069nobodyさん
2012/05/22(火) 10:21:13.32ID:???0070nobodyさん
2012/05/22(火) 12:26:33.17ID:mOE2ZVav0071nobodyさん
2012/05/22(火) 12:58:54.36ID:???2.2で ModelValidatorを使う
http://book.cakephp.org/2.0/en/models/data-validation.html
もしくはいくつかバリデーションルールを作っておいて、コントローラーでvalidateのフィールドを指定する
http://book.cakephp.org/2.0/en/models/data-validation/validating-data-from-the-controller.html
て感じかしらん
007268
2012/05/22(火) 14:05:53.81ID:???なんか見れるページと、見れないページがある、どうなってんだ
とりあえず助言ありがとう
0073nobodyさん
2012/05/22(火) 14:21:04.35ID:???仕方ないソース見るか…
0074nobodyさん
2012/05/23(水) 18:18:16.24ID:???コントローラ20個、モデル15個ぐらいの規模なんだが
パッと手直しするだけで移行できる?
0075nobodyさん
2012/05/23(水) 18:26:46.04ID:???自分だけで使うなら別だが、仕事だと1.3で良いと思うよ
0076nobodyさん
2012/05/23(水) 22:27:57.51ID:???でも新規サイトは2.xで作ってるから古いサイトのメンテナンスするときに混乱する
でも移行したくない
0077nobodyさん
2012/05/24(木) 17:42:05.60ID:???例えば$tmp = "5,2,3,4,1"と言う並びを記憶した文字列があったとします。
それを$id_order = explode(',",$tmp);として、
$this->Hoge->find('all',array('conditions'=>array('id'=>$id_order)));
として読み出します。読み出し自体は5件、ちゃんと拾ってきます。
ただこの場合、そのままだとid順に並び変わってしまうんです。
(この場合だと 1 2 3 4 5 に並び変わってしまう)
そのまま5,2,3,4,1の順を保持するようには出来ないのでしょうか?
queryで id IN (5,4,3,2,1)も試してみたのですが、やはりID順で並び変わってしまいます。
Hogeそのものにorder用のフィールドを準備して並び替えれば当然出来るんですが・・・
今は配列を全部読んで新たに配列を作成するという力技でやっているのでうまい方法は無いかと思いまして・・
Cakephpとは関係ない様な気もしますが参考意見でもあれば宜しくお願いします。
0078nobodyさん
2012/05/24(木) 18:35:37.61ID:???SQLはorderを指定しないと読み出し順は保証されないよ
たまたま1,2,3,4,5になるかもしれないし、そうでないかもしれない。
だからちゃんとfindのオプションでorderを指定すべき
0079nobodyさん
2012/05/25(金) 19:14:24.25ID:???Componentから呼び出した、他のComponentのinitializeが、
実行されないんだけど、実行されるようにする方法はないですか?
0080nobodyさん
2012/05/25(金) 19:20:46.92ID:/BxfQcHOXAMPPを起動させて、webrootフォルダの中のindex.phpにログインは出来るし、
index.phpを他に移動させて前の場所のアドレスを入力すると見えなくなるのですが
(http://localhost/cake/sample/index.php)
webrootフォルダの中にindex.htmlやindex2.php等を作って、
http://localhost/cake/sample/index2.php をブラウザで表示させようとしても表示できません。
これはなぜなのでしょうか?教えていただけると助かります。
008280
2012/05/26(土) 00:55:32.99ID:???レスありがとうございます。
エラーログで分からなかったので、XMAPPもCAKEPHPもインストールし直したら解決しました。
0084nobodyさん
2012/05/26(土) 16:30:05.31ID:???0086nobodyさん
2012/05/27(日) 00:59:00.50ID:???おっしゃるとおりです。
あれから調べた所、MySQLである限りはorder by fieldが使用できるので、
http://cakebaker.42dh.com/2008/06/10/order-by-field/
の形でやればいちいち取得後に並び替え処理しなくても
最初から指定の順で並び替えた状態で取得できそうです。
ありがとうございました。
0087nobodyさん
2012/05/28(月) 15:42:04.62ID:???2.1 です。
0088nobodyさん
2012/05/28(月) 21:49:33.64ID:???0089nobodyさん
2012/05/30(水) 00:22:24.86ID:???<?=$form->create(null,array('type'=>'post','action'=>'.')) ?>
等のように、
<?=
から始まるコードがあります。これをこのまま本の通りに入力するとエラーになってしまうのですが
これは、
<?php echo
と同じ意味なのでしょうか?
「<?php echo 」と書くと長いから「<?=」と書いているけど、コードを書くときは「<?php echo」に直してね
っという事なのか
私の書き方や設定がおかしいから「<?=」でエラーが出るだけで、何かをすれば「<?=」でもエラーが出ないのか?
教えていただけると助かります。よろしくお願いします。
0090nobodyさん
2012/05/30(水) 01:40:42.57ID:???マニュアルに書いてないことを知るには、ソースを読めですか?
0091nobodyさん
2012/05/30(水) 02:22:35.21ID:???cakeは関係ない。php自体のshort_open_tag設定
>>90
生ソースの前にAPI一覧を見るといいよ
こんなメソッドあったのか。なんてのも結構あるし。
それで使い方気になったらソース見ていく。って感じで俺はずいぶん勉強になったよ
0092nobodyさん
2012/05/30(水) 14:54:21.85ID:???$this->User->validates(array('fieldList' => array('email', 'password'))
こういう方法もあるんだね。
これでよかった。
0093nobodyさん
2012/05/30(水) 15:08:29.89ID:???0094nobodyさん
2012/06/01(金) 10:14:16.75ID:???hasMany tableをsaveAllした際のvalidate errorだと、formに値が自動的に戻りません。
saveAllのvalidate errorの場合は手動でformに入力値を展開するものですか?
流儀があれば教えて頂きたいです。
0095nobodyさん
2012/06/03(日) 01:26:40.50ID:???コマンドプロンプトでパスを設定後、
cake bake でデータベース設定しようとすると
最後にエラーになってしまいます。
Look okay? (y/n)
[y] > y
Do you wish to add another database configuration?
[n] > n
Creating file c:\xampp\htdocs\cake\baking\myapp\config\database.php
Wrote `c:\xampp\htdocs\cake\baking\myapp\config\database.php`
どうしたら直るでしょうか?教えていただけると助かります。
よろしくお願いいたします。
0098nobodyさん
2012/06/03(日) 13:48:18.75ID:???009995
2012/06/03(日) 15:48:10.86ID:???Creating file c:\xampp\htdocs\cake\baking\myapp\config\database.php
Wrote `c:\xampp\htdocs\cake\baking\myapp\config\database.php`
ではなく
Fatal error: Class 'DATABASE_CONFIG' not found in C:\xampp\htdocs\cake\baking\ca
ke\console\libs\tasks\db_config.php on line 260
でした。
0100nobodyさん
2012/06/03(日) 16:18:04.08ID:???0101nobodyさん
2012/06/04(月) 11:18:57.14ID:???$form->input()
でしかエラーを自動で表示してくれないって知ってた?
$form->radio()
じゃ表示してくれない。
今初めて知った・・・めちゃハマってたわ・・・くそが
バーションは1.3
0102nobodyさん
2012/06/04(月) 16:16:23.03ID:npZV9BUE0104nobodyさん
2012/06/06(水) 09:28:58.59ID:KukcN70nRewriteBaseをいじくりまわして、
ググってありとあらゆるパターンを試してみたんだけど
どうやっても500エラーが出てできない・・・
0105nobodyさん
2012/06/07(木) 00:31:59.74ID:???500出てるってことはhtaccessの記述が間違っているっぽい
0106nobodyさん
2012/06/07(木) 01:11:37.96ID:???バージョンは2.1です。
cakeフォルダを作成してそこに配置したとします。
通常だとブラウザのアドレスバーにはhoge.xx.yy/cake/controller/actionと成るわけですが、
それをhoge.xx.yy/controller/actionと表示するようには出来ませんか?
(見た目だけで良くて、アドレスバーに入力してその通りに動作する必要はありません)
ネットでhtaccessというかRewriteのページをかなり見たのですが、見た限りは上で言うcontroller/action/*1/*2の順番というか、パラメータの記述方法を変えたりするような方法ばかりでした。
何かヒントになるサイトとかでも良いのでご指導頂けませんでしょうか?
0107nobodyさん
2012/06/07(木) 01:41:54.69ID:???あるカテゴリキーワード(可変数。10個前後)が格納されたDBテーブルが
あって、さらに別のテーブルにはカテゴリキーワードごとのトッピックスが
1000個程度登録されています。
トップページで各カテゴリキーワード毎にトピックを5件だけ表示させたいの
ですが、やり方がわかりません。
カテゴリキーワードを取ってきて表示されるだけなら、findAllで取ってきて
VIEW内でforeachでまわす事で実現できました。
foreachのループ内で、現在着目中のカテゴリキーワードで詳細テーブルから
5件だけ取ってくる方法が分かりません。
トピックを全レコード事前に取得しておいて、viewの中で無理やりキーワー
ドが一致するものを5件だけ表示させる方法は思いつきますが、もっとスマー
トな方法はありませんでしょうか?
0108nobodyさん
2012/06/07(木) 02:31:59.60ID:???htaccessで書き換えられないこともないだろうけど推奨されてないだろうし不具合の原因だからやめた方がいいよ
app/webrootをウェブルートに置けない理由はあるの?
>>107
アソシエーションを学ぶんだ
一発でカテゴリキーワードごとにトピックスを5件とってこれる
0109nobodyさん
2012/06/07(木) 04:44:57.83ID:???判断できるようになってから質問しろよ
0110104
2012/06/07(木) 07:36:24.96ID:T3CmHb0tindex.phpの設定ってどのindex.phpでしょう??
ちなみにどのように設定すると良いのが教えていただけると幸いです
0111nobodyさん
2012/06/07(木) 11:41:22.43ID:???返答ありがとうございます。
単純に今現在すでにHPがあり、機能追加をする形でcakeを使用するのですが、
現状appフォルダがすでにあるのでと言う理由だけです。
既存フォルダ名の変更が不可の為、フォルダを作って・・と言うのを考えてたのです。
既存フォルダ名の変更不可というのはURL的に見た目がappじゃないとまずいということでして、サーバ上はapp2とかにしてもURLの見た目がappになればOKなんです。
どうすればよいかわからなかったので先ほどの質問として書いたと言う訳なんです。
0112nobodyさん
2012/06/07(木) 12:11:49.60ID:???ならDB側にView作ってしまいたくなるんだけど、そういう人はいないの?
まあ、実装箇所が複数に分かれるデメリットもあるのでビュー禁止ってとこも
結構あるけど。
0113nobodyさん
2012/06/07(木) 14:50:42.40ID:???いいんでしょうか?
0114nobodyさん
2012/06/07(木) 21:27:01.49ID:???そもそもappをドキュメントルートに置いちゃダメ。
webrootをドキュメントルートにおいて
それ以外はwebroot以外に配置する。
0115nobodyさん
2012/06/07(木) 21:28:11.55ID:???>>111
そもそもappをドキュメントルートに置いちゃダメ。
webrootをドキュメントルートにおいて
それ以外はドキュメントルートの外に配置する。
0116nobodyさん
2012/06/08(金) 02:27:11.80ID:RAatNy5aapp/webroot/index.php
もちろんここがウェブルートになるように設置しないとダメだよ
>>111
まず>>115の言うようにapp/webrootをドキュメントルートに置かないとダメ
サーバーの設定でドキュメントルートが変更できない場合の対策は、xrea、コアサーバー、さくらあたりでのノウハウがいっぱいあるから
それを調べて実行するとよい
>>112
規約に沿うのがフレームワークだからDBはモデルで扱うしか考えたことがないなあ
>>113
俺はなんか実装めんどくさそうならHTMLで書いちゃうわ
0117104
2012/06/08(金) 09:16:24.94ID:u8Vc96TEありがとうございます。
ウェブルート=ドキュメントルートってことですか?
0119nobodyさん
2012/06/08(金) 13:58:30.27ID:???1ずつ全部変えるのは無理だけど
itemOptionsで、even,oddの指定を入れると、奇数行、偶数行のクラスは指定できる
続きはソースで…
0120111
2012/06/08(金) 16:35:33.96ID:???私のフォルダ配置に対する理解が足りなかった訳ですね・・
レス頂いてから試してみました。
wwwの下にフォルダを作成してそこにappやlibなどのファイルを配置。
でwebrootフォルダの中身をwwwに置いてindex.phpを触れば(ROOTとかの位置を指定すれば)ちゃんとcakeとして動作してくれたのは確認できました。
home
|--ユーザアカウント
|
|--cake
| |--app
| |--lib
| |--・・・その他
|
|--www
|--css
|--img
|--js
|--index.php
のような感じで動作したのは確認できました。
でもう一つ疑問がわいてきましたが、先の話で既存のHPがある場合、index.phpとindex.htmlがかぶることになります。
今回もそのパターンで、ネットでさくらにインストールした場合を探してみるとwwwよりhome側に置くのはよく出てるのですが、
どれもwwwに一つフォルダを作成してそこに元のwebroot内のデータを置いてる感じでした。
動かしてみましたがindex.html index.phpの優先になってる方が起動するだけでした(当たり前ですが・・)
今回のようにcakeのindex.phpと元のindex.htmlがあるような場合はどのようなやり方がありますか?
0121111
2012/06/08(金) 16:36:54.35ID:???あああ、すみません。
書き込んだらスペースが削除されちゃいました。
cssから下はすべてwww内とのつもりです。
宜しくお願いします。
0122nobodyさん
2012/06/09(土) 00:03:03.20ID:7iLO1txZいまwwwになってるところをwww/cakeとかにすればいいんじゃないの?
htaccessの修正も必要になるかもしれないけど
俺なら既存のファイルが全部スタティックならcakeに統合しちゃうけどな
0123nobodyさん
2012/06/09(土) 16:53:54.98ID:u4onJvJp$this->Http->
補完する方法ないのですか?
0124nobodyさん
2012/06/13(水) 23:54:08.72ID:???Cakeで作ってるんだろ?どうやってアクセスこなしてるんだろ・・・
キャッシュ使えばパフォーマンスは気にならないのかな
0125nobodyさん
2012/06/14(木) 00:07:28.83ID:???記事のページとかPV稼いでいる部分は生PHPで書いて、それ以外のあんまりPVないところはCakePHPで作ってるって話をしていた気がする
30万UU/monthくらいのサイト持ってるけど、ビューキャッシュだけで共用レンタルサーバーでも余裕でさばけるから、
パフォーマンス追求しなければキャッシュだけで十分いけると思う
後はスケーリングの問題だな
0127nobodyさん
2012/06/14(木) 02:08:15.49ID:nFrC9cht別にそれは記事ページだけならReWriteして1行で変更できるでしょ
0128nobodyさん
2012/06/14(木) 02:23:56.37ID:???0129nobodyさん
2012/06/14(木) 12:33:43.22ID:???ユーザ仮登録
↓
メール
↓
メールに記載されたURLクリック
↓
本登録
という流れの中で、本登録ページが正しく表示されたらログイン後状態に
したいです。controllersの内部で認証後状態にするにはどうすればいい
でしょうか?
0130nobodyさん
2012/06/14(木) 12:52:02.54ID:???0134nobodyさん
2012/06/14(木) 22:42:24.08ID:???暇を取れない会社のことを指しているようだ。僕自身、「違法な只働きの多い会社はどこですか?」なんて質問はよく受ける。だ
が、はっきりいってみんな甘い。甘すぎる。そんなのブラックでもなんでもなくて、日本企業なら当たり前の話なのだ。「フラン
スやドイツより年間300時間程度は長時間労働で、有給休暇も消費せず、辞令一枚で全国転勤」というのは、日本が世界に誇るカ
ルチャーである。日本は今でも終身雇用が建前の国である。いつ潰れるかわからないような中小の下請け企業ならともかく、普通
の会社では解雇なんて不祥事でも起こさない限りは行われない。もちろん、こういう楽ちんなシステムを維持するためには、それ
なりの工夫が必要だ。まず、一定の残業は大前提だ。新規採用の代わりに残業でカバーしておけば、不況時に残業カットで人件費
を抑えられる。有給休暇が取れないのも理由は同じだ。全国転勤なんて制度があるのは日本だけだが、これも終身雇用を維持する
ためのものだ。つまり、人事部がハローワークの代わりに社内の空きポストを見つけ、再就職の斡旋をしているようなものなのだ。
であるため、大手優良企業ほど、残業も転勤も有給取得制限も確実に存在するし、雰囲気的に文句は言えない。たまに、日本企業
の労組が「組合員の長時間残業や転勤を黙認している」といって非難する人もいるが、ちょっと違う。すべては終身雇用システム
を守るための、やむを得ない副産物なのだ。たまに「勇気を持って拒否できないんですか?」という質問も受けるけど、そんなこ
と主張して村八分に耐えるだけの強靭な精神力があるなら、最初から年俸制の企業に行って頑張ることをおススメする。ところで、
真のブラック企業とは何だろうか。それは上記のロジックからすれば明らかだろう。最初から終身雇用を守るつもりも、成果に応
じた年俸を上乗せする気もなく、長時間残業が当たり前で有給も取れない会社のことだ。新卒の時点でそういう会社に遭遇するこ
とは「滅多に」ないし、入ったら入ったで何年か修行して転職すればよいだけの話なので、入る前からあれこれ心配する必要は無
い。最悪なのは右往左往した挙句、内定無しで卒業してしまうことだというのはおぼえておくといい。
0136nobodyさん
2012/06/18(月) 09:29:52.49ID:???見るとpostデータにmodel名が含まれてしまう事があるのですが、postデータ
にmodel名を含ませないように出来ないのでしょうか?
<input name="data[test]" type="text" value="" id="test" />
こうなる場合と
<input name="data[models][test]" type="text" value="" id="test" />
こうなる場合があります
0137nobodyさん
2012/06/18(月) 09:55:08.10ID:???nullじゃなくてfalseにすれば期待した動作になりました
0138nobodyさん
2012/06/20(水) 20:53:26.92ID:???の俺が言う
Cakephpはやめとけ
0139nobodyさん
2012/06/20(水) 21:44:38.57ID:???0141nobodyさん
2012/06/20(水) 22:13:18.78ID:???Cakeは国内の知名度だけはいい線いってるよ
0142nobodyさん
2012/06/21(木) 00:32:08.42ID:???いくらFUELPHPが凄くても一人で細々とやっててもねぇ
あ、英語できるならいいけど
0143nobodyさん
2012/06/21(木) 01:35:20.48ID:???2.2ももうすぐ出そうだし、最近のCakeは順調…すぎてついていけなくなってるけどw
0145nobodyさん
2012/06/21(木) 02:16:55.75ID:???レコードのとあるフィールドの値で取得結果を変えるなら
select
case field1 when 0 then 'ぬるぽ' else field2 end
from tblA;
こんな感じでSQLの記述だけで完結出来るんですが、外から与えた変数で
同じような事を簡単に出来ないでしょうか?
取得結果は最終的にはviewで表示するのですが、
view内でforeachで回す際にループごとに条件判定をして…という方法は避
けたいです(viewにあまりゴテゴテとロジックを書きたくないので)
0146nobodyさん
2012/06/21(木) 08:42:57.93ID:???mysqlならIFって関数があるから、fieldsかモデルの$virtualFieldsで、
"IF(Model.field1 = 0 , 'ぬるぽ' , Model.field2)"
って書いてる。条件が複数あるなら入れ子でもいける。
0148nobodyさん
2012/06/21(木) 18:17:56.38ID:bhjX0YXlコードイグナイタ
見通しが良いから
0149148
2012/06/21(木) 18:18:47.19ID:bhjX0YXl0150nobodyさん
2012/06/21(木) 19:08:33.82ID:???0151nobodyさん
2012/06/21(木) 19:49:36.93ID:0C9bmUAd廃止されるで
■ このスレッドは過去ログ倉庫に格納されています