【PHP】フレームワーク CakePHP 17ホール目【v3α】
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2014/08/02(土) 21:57:41.01ID:LI0DdohH質問するときはCakePHPのバージョンを書きましょう
※他フレームワークとの比較等はスレ違いです
■本家
http://www.cakephp.org/
APIドキュメント
http://api.cakephp.org/
github - cakephp
http://github.com/cakephp
the Bakery
http://bakery.cakephp.org/
cookbook(マニュアル)
[3.x] http://book.cakephp.org/3.0/
[2.x] http://book.cakephp.org/2.0/ja/
[1.3] http://book.cakephp.org/1.3/ja/
https://twitter.com/cakephp
https://www.facebook.com/CakePHP
■日本語公式
http://cakephp.jp/
フォーラム
http://cakephp.jp/modules/newbb/
※前スレ
http://kanae.2ch.net/test/read.cgi/php/1393661004/
0075nobodyさん
2014/09/05(金) 02:12:07.63ID:???あるある
フレームワークで用意されたModel・AppModelクラスを継承したものだけがモデルだと思ってる
実際はモデルの部分集合にすぎんのに
んで行き場を失ったビジネスロジックがコントローラやヘルパーでヒャッハーしてる
0076nobodyさん
2014/09/05(金) 03:12:00.07ID:???特にHTMLヘルパーがパンくずの配列$_crumbsを状態として持ってるのは違和感バリバリだわ
おもいっきり単一責任の原則に反してるしパンくずリストの構築に責任を持つクラスを作るべき
ヘルパーのメソッドはパンくずリストを表すオブジェクトか配列を受け取って出力の整形をするだけでいい
>会員サイトじゃない場合はどうするんだよ。
腹筋崩壊するからやめろっやwwww
0077nobodyさん
2014/09/05(金) 04:34:38.73ID:???な、結局煽ったり重箱の隅突っつくしかなくなるだろ?
いつの間にか話が「モデルの使い方」になってら。
話のすり替えもいいとこだ。
>>67では「簡単な例で示しただけ。浅はか」と言ったから、
仕様を会員サイトで想定し体験をだしたら、腹筋崩壊するぐらい面白いっと。
次はどんな煽りで来るんだろうなー面白いこと言えたらいいんだけどなー
0078nobodyさん
2014/09/05(金) 10:37:11.84ID:???複雑な処理なら一部他に任せるように変えてけばよくね?
モデルに委任してもいいし
コントローラ経由でモデルに処理移すのと大差ないやん
007978
2014/09/05(金) 11:00:32.52ID:???例えばSystemMessageクラスをモデルに作るのもあり……?
008078
2014/09/05(金) 11:10:14.48ID:???ビューロジックとビジネスロジックの解釈の違いが噛み合わん原因っしょ
>>73の会員サイトの例で説明を試みると
挨拶文はUserモデルと比べれば瑣末にすぎないビューの表現の一種やん→ビューロジック ヘルパー派
挨拶文の選択条件は見せ方に依存しねえじゃん→ビジネスロジック モデル派
0081nobodyさん
2014/09/05(金) 12:29:00.74ID:???0082nobodyさん
2014/09/07(日) 03:06:53.03ID:???pagenationでUNION使いたいんだけど情報が全くないので困ってます
生のSQL叩いてpagenationに組み込む方法しかないのかな
0083nobodyさん
2014/09/07(日) 11:45:44.93ID:???多分、別のモデルを作るのがいいと思う。
簡単なのは、UNION 後のビュー(データベースのビュー)のモデルを作る方法。
この方法なら、Model::$paginate() と Model::$paginateCount() をわざわざ実装する必要がないからね。
ビューを作るのが嫌な場合、それらのメソッドを実装したモデルを作ることになると思うけど、
その場合は、生の SQL を書くより DboSource::buildStatement() を使った方がいいと思う。
Paginator::$settings の設定を生の SQL に組み込むのは大変だよ。
0084nobodyさん
2014/09/07(日) 11:47:23.50ID:???Model::paginate() と Model::paginateCount() ね。
0085nobodyさん
2014/09/07(日) 17:38:42.22ID:???レスありがとうございます
ビュー作るのは少し微妙なのでbuildStatement()の方で補おうと思います
それでもなかなかややこしいですね
0086nobodyさん
2014/09/10(水) 19:35:59.90ID:???リニューアルついでにcakephp使おうか迷ってる。
0087nobodyさん
2014/09/11(木) 01:14:28.20ID:???0088nobodyさん
2014/09/11(木) 01:15:53.40ID:???0089nobodyさん
2014/09/24(水) 23:35:14.19ID:???0090nobodyさん
2014/09/25(木) 01:32:54.46ID:???俺は使ったことないんだけど、Oracle のプラグイン作ってくれた人がいる
https://bitbucket.org/odin88/cakephp-2.0-oracle/src
0091nobodyさん
2014/10/07(火) 11:48:06.87ID:QG2cjBR/たとえば 商品 hasMany 素材 だとして
商品のPK以外の値と 素材テーブルのある値とでアソシエーションを組みたい場合があります。
この場合、「素材のある値」はforeingKey で指定可能ですが、商品テーブル側のどの値を使うのかは
PKで決め打ちになっていていじれません。
どうするのが良いでしょうか。
0094nobodyさん
2014/10/25(土) 16:31:19.49ID:???0095nobodyさん
2014/11/04(火) 02:37:17.02ID:???fuelと比べてつらい? 簡単?
0096nobodyさん
2014/11/04(火) 02:55:59.62ID:???PHP5.5
CakePHP2.4.10
http://ameblo.jp/tondemonight/entry-10124640485.html
少し古いページですが、URLの末尾にスラッシュ(トレイリングスラッシュ)を
つけようと思い上記ページの通りに.htaccessを設定しました。
思い通りの動きにはなったのですが、何故かpostもgetもデータが受け取れなくなりました。
htaccessを理解しないまま貼り付けたため、何が原因でこういう事態になったのかわかりません。
とりあえず、htaccessを元に戻せばデータの受け渡しはできるのですが。。。
XAMPP上で上記の動きになったので、さくらインターネット環境でも
試したのですが同様の現象が発生しました。
どなたか詳しい方、教えて頂けないでしょうか?
0097nobodyさん
2014/11/15(土) 12:14:51.51ID:W0Odgr3AMissing Method in AdminController
こいうエラーメッセージが表示されてしまいます。
これを表示させない方法はありますか?
やりたい事は、もし存在しない(コントローラー等が未定義)の状態で
アクセスされたら指定したエラーページに飛ばしたいです。
0098nobodyさん
2014/11/15(土) 16:00:55.50ID:???0099nobodyさん
2014/11/15(土) 19:52:27.40ID:ZGSnFqpdありがとうございます。
0100nobodyさん
2014/11/15(土) 20:12:36.24ID:VK5/2N9Recho $this->Form->input('password');
次のコードが出力されます。しかしこのままでは画面のレイアウトが
どうも満足できません。
<div class="input text required">
<label for="UserUsername">Username</label>
<input name="data[User][username]" maxlength="50" type="text" id="UserUsername">
</div>
そこで次の様にスタイル指定をしたタグを出力させたいのですが
フォームヘルパーを使うと以下の様な出力を行う事は出来ないのでしょうか?
<div class="input text required original_1">
<div class="original_2" style="width:50px;float:left;"><label for="UserUsername">Username</label></div>
<div style="width:150px;float:left;">
<input name="data[User][username]" maxlength="50" type="text" class="original_3" id="UserUsername">
</div>
</div>
0101nobodyさん
2014/11/15(土) 22:46:51.55ID:???【複数形の英単語】Controller.php
という名前にするのがルールなのでしょうか?
必ず複数形にする必要があるのでしょうか?
0102nobodyさん
2014/11/16(日) 02:51:08.67ID:???ルールではない、規約だ
規約にのっとっていれば色々とフレームワークが自動でやってくれる部分が多いが、
規約から外れたとしてもなんとかする方法は(面倒臭い方法だが)用意されている
そういう面倒臭さが嫌なら大人しく規約に従っておくのが吉
0103nobodyさん
2014/11/16(日) 11:29:55.49ID:88uIuRDd了解です。
thank you
0104nobodyさん
2014/11/16(日) 11:31:49.43ID:QtKRF6/y(開発の出来る人を想定)閲覧者にばれない様に作り込む事は可能ですか?
幾らやってもばれるものでしょか?
セキュリティ的に開発に使用しているFWは隠蔽した方が良い気がしております。
0106nobodyさん
2014/11/16(日) 13:04:20.46ID:rzwbZ1qv一から開発するの凄く手間じゃないか
0108nobodyさん
2014/11/16(日) 15:00:53.86ID:???そしてなにを満たせばセキュリティ的に合格なFWなのだろう?
セキュリティがーとかいう人間に限って知識が薄っぺらい。
0109nobodyさん
2014/11/16(日) 15:33:17.44ID:I3T4ePm6アセットディレクトリを /wp-contents/themes/*** にして、/wp-admin/ の振る舞いを偽装して
WordPress っぽくつくる。
これであまり熱心ではない開発者はWPだと思うだろ。
あとは Router というか $routes の設定をいじって、URLのパターンから推測できないようにする。
エラーメッセージの文言をすべて変更する。
まぁでも、既知の領域では隠蔽できるだろうけど、いつ何時新しい状態が現れるか分からないから完全に隠すのは難しいと思われる。
0110nobodyさん
2014/11/16(日) 19:46:24.87ID:???零細企業のサイトで、たった数件の検索に毎回15秒かかってるとこがあって理解できん
作った人間が下手なだけならいいが、Cakeの問題なら仕事で使いたくない
MVCやルーティングだけFW、DBやSQLカスタマイズでセキュリティ自力対応じゃダメかね
Cake案件が多いので、企業が使いたがってるのかは知らんが、気になってしょうがない
0111nobodyさん
2014/11/16(日) 21:26:26.08ID:???開発者もサーバの性能も糞すぎるとかじゃねえの
0112nobodyさん
2014/11/16(日) 22:24:01.26ID:???だったら15秒くらいかかる。
0113nobodyさん
2014/11/16(日) 22:36:50.85ID:???非表示状態のレコード含めても1000行はこえないでしょ
過去テーブルに移してなきゃ、ID番号が4万台だから最大4万行のはず
0114nobodyさん
2014/11/16(日) 22:40:15.89ID:???0116nobodyさん
2014/11/17(月) 20:32:45.39ID:???何使っても一緒だわな…
0117nobodyさん
2014/11/17(月) 23:14:10.85ID:84kAq3ioありがとうございます。
0118nobodyさん
2014/11/18(火) 07:26:12.45ID:BXcgCvPC<td style="width:100px"></td>
という風に列幅を指定しているにも関わらずサイズが適用されません。
なぜでしょうか?また、どうすればcakePHPを使用していても
指定したサイズに列幅調整を行う事が出来ますか?
0119nobodyさん
2014/11/18(火) 16:42:48.64ID:???0120nobodyさん
2014/11/18(火) 18:42:27.17ID:???それはcakeじゃなくてDBの問題。MySQLなら
ALTER TABLE テーブル名 AUTO_INCREMENT=1001
とか実行すればいいよ
まあphpmyadminとか使ってGUIでやったほうが楽だけどね
>>118
まちがいなくcakeは無関係
出力された後のことはHTMLとブラウザの解釈の問題
とりあえずは簡単なサンプルでタグの不整合だのCSSだのをチェックし直すといい
0121nobodyさん
2014/11/18(火) 19:07:45.09ID:???0122nobodyさん
2014/11/18(火) 20:13:46.51ID:???インデックス貼ってないんじゃないの?
mysqlってインデックス貼らないと遅くなるの俺は最近知ったね。
0123nobodyさん
2014/11/18(火) 23:18:16.68ID:72ycgRPS次の呼び出しをしているのですがなぜか
Google Analytics に認識されません。
サイトにアクセスした直後にリアルタイムを見ていますが
アクセスが一向にカウントされないのですがなぜでしょうか?
<?=$this->element("google_analytics")?>
</head>
0124nobodyさん
2014/11/18(火) 23:24:02.50ID:8pS7TyyMだけど分かりました。単なるタイムラグでした。
0125nobodyさん
2014/11/18(火) 23:27:49.19ID:???0126nobodyさん
2014/11/18(火) 23:34:44.64ID:???その遅さじゃindexどころか、innodbで↓やってるとしか思えないな
「総件数(○○件)」 SELECT count(*) FROM テーブル
「検索項目A(○件)」 SELECT count(*) FROM テーブル WHERE カラム = 'A'
「検索項目B(○件)」 SELECT count(*) FROM テーブル WHERE カラム = 'B'
「検索項目C(○件)」 SELECT count(*) FROM テーブル WHERE カラム = 'C'
0127nobodyさん
2014/11/20(木) 18:21:53.44ID:CTsz5JQbシステムを組んでいます。
hogeuser/apps/test_app
→アプリ本体
hogeuser/cake
→cakePHPのモジュール群
hogeuser/www/test_app
→最初にアクセスされる基本ファイル等(index.php)
hogeuser/www/image/****
→ここにAuth認証でログインしたユーザのみが画像等をアップロード出来る様な
システムを組みたいのですが、cakePHPで実現可能でしょうか?
様にしたいのですが
0128nobodyさん
2014/11/21(金) 01:55:20.21ID:???アセットのパスは CakePHP に依存せず自由だよ。
ほかの原因で権限が無いとかはあるかもしれないけど、Cake側では制限はない。
0129nobodyさん
2014/11/27(木) 14:38:07.68ID:???テーマを作るってやり方を見たのですが、
他に良い方法があれば教えてください。
0130nobodyさん
2014/11/27(木) 22:10:45.74ID:???あるいは何がしたいのか書かないとレスしようがないんじゃないかな
0131nobodyさん
2014/11/28(金) 06:59:13.03ID:???Model(ロジック)の方は、特別にスマホ対応をする場合もあるかもしれんが。
0132129
2014/12/01(月) 13:39:14.91ID:???「テーマが使えない」ではなく、他に方法があれば教えてくださいという質問です。
>>131
レスポンシブデザインならCSSだけで良いのですが、
スマホ専用サイトの場合、ビューが変わるし、必要なモデルも変わります。
PC版と同じコントローラーを使って同じだけモデルを呼び出すのは
無駄な要素が大きいと思い、テーマの変更だけで良いのかな?と思いまして。
0133nobodyさん
2014/12/01(月) 23:10:19.10ID:???俺はテーマ以外考えられんな。
レスポンシブでPC、スマホの両方対応というのも無駄な処理がコントローラーに増え、重くなるし。
テーマ一択で。
0134nobodyさん
2014/12/02(火) 00:51:09.72ID:???アクション共通ならビューにサブディレクトリ作るだけでもいい気が
0135nobodyさん
2014/12/02(火) 01:45:31.11ID:???横レスだけどレスポンシブデザインにしたらサーバーサイドの処理は基本的には変わらないんじゃないの?
俺の勘違いかな。
0136nobodyさん
2014/12/02(火) 02:25:29.44ID:???おっしゃる通り。確かに変わりませんね。
僕のミスです。失礼しました。
レスポンシブデザインって、ちゃんとしたサイトだとPCとスマホは分けるべきだと思うんだけどな。
0137nobodyさん
2014/12/02(火) 06:43:53.62ID:???Modelが変わるなら、Viewも応じて変えた方がいいに決まってる。
0138nobodyさん
2014/12/04(木) 15:36:33.40ID:R0j+bkTkCakeで出力されるHTMLのCSS部分はローワーキャメルケースですが、
HTMLヘルパーを使用しない箇所はどうしていますか?
同じようにローワーキャメルケースで書いてますか?
それとも独自の書き方を採用していますか?
0141nobodyさん
2014/12/10(水) 12:16:09.19ID:D9PtQRCXサーバからコマンドでシェルを実行させる場合について質問です。
シェルを実行させるパスを
/usr/local/bin/php /home/hoge/public_html/app-admin/Console/cake.php Hello
みたいにすると、「Shell class Hello Shell could not be found」というエラーになります。
上記パスのapp-adminをappにすればエラーが出ないのですが、
appの名前を変えても実行するにはどうすれば良いのでしょうか?
0143nobodyさん
2014/12/10(水) 14:37:49.96ID:???app の名前を指定するパラメータは確か -app じゃなかったかな。
-app app-admin
みたいなのをくっつければいいかもしれない。
そもそも、そんな呼び出し方する理由が分からんがな。
普通は app-admin のディレクトリに移動して Console/cake を呼び出すんだぜ。
0144nobodyさん
2014/12/10(水) 15:23:03.23ID:???0145名無しさん@そうだ選挙に行こう
2014/12/14(日) 19:10:29.85ID:R4VgTAzM毎回結合が走っている様です。
この条件の時には結合を走らせるけれども
この場合には、結合せずにfindする
といった事をコントローラー側で制御する事は可能でしょうか?
毎回、結合してクエリ結果を返していると、テーブルのレコード件数が大きくなってきた場合に
パフォーマンスに影響が出る事が予想れます。
0146nobodyさん
2014/12/14(日) 21:01:50.73ID:???bindModel()やunbindModel()で動的に変更するか
検索時にjoinsを使えばいい
詳しい使い方は↓に載っている
http://book.cakephp.org/2.0/ja/models/associations-linking-models-together.html
このスレの質問のほとんどはこのドキュメントで解決できるので
開発者なら他のページも一通り読んでおくことを薦める
0147nobodyさん
2014/12/14(日) 21:34:57.75ID:R4VgTAzMthanks
見てみます!
0148nobodyさん
2014/12/15(月) 10:55:13.83ID:???対して変わらないような気がする。
どっちもとんでもないクエリ吐き出すんだけどね。
joins 使えばそこそこまとも。
CakePHP3 ではかなり改善される模様。
0149nobodyさん
2014/12/15(月) 11:30:36.76ID:???0150nobodyさん
2014/12/15(月) 19:02:35.15ID:Hxt+g1uLさせた方が楽な気がするのだが俺だけ?
0151nobodyさん
2014/12/15(月) 20:40:41.52ID:???0152nobodyさん
2014/12/15(月) 21:02:08.37ID:???0153nobodyさん
2014/12/15(月) 22:12:11.75ID:UqCW5FKLアソシエーションは好かん
0154nobodyさん
2014/12/16(火) 03:08:27.79ID:???SQLをPDOとかで直に書いた方がいいの?
それともZendとかで最小限のライブラリ読み込んだ方がいいの?
何で日本人はCake使いたがるの?
英文サイト解読してlaravelとか使えないの?
0156nobodyさん
2014/12/16(火) 10:38:29.65ID:MEG1C3Vrしらなんだ!!
0157nobodyさん
2014/12/16(火) 17:04:45.60ID:???0159質問�@
2014/12/18(木) 00:17:48.32ID:ZHBfn1LO原因不明のエラーが出ます。
以下のコードを実行したところ投入データに一意成約違反などない筈なのに
エラーが出てしまいます。
気になるのは、エラーメッセージに「'30-1-2014-12-17'」こんな文字列がどうやらSQLで
発行されている様です。
全く原因が分かりません。お助けくださいm(_)m
$insert_data = array(
'tableTests' => array (
'user_id' => $user_id,
'sequence_number' => $sequence_number,
'confirm_date' => $executed_date,
)
);
debugprint($insert_data);
0160質問�A
2014/12/18(木) 00:19:48.09ID:ZHBfn1LOarray(1) {
["tableTests"]=>
array(4) {
["user_id"]=>
string(2) "30"
["sequence_number"]=>
string(1) "1"
["confirm_date"]=>
string(10) "2014-12-17"
}
}
$this->tableTests->create();
$this->tableTests->save($insert_data);
なぜかエラーメッセージが出てしまいます。
SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '30-1-2014-12-17' for key 'PRIMARY'
#0 /home/maxnko/cake/lib/Cake/Model/Datasource/DboSource.php(460): PDOStatement->execute(Array)
#1 /home/maxnko/cake/lib/Cake/Model/Datasource/DboSource.php(426): DboSource->_execute('UPDATE `uxnko...', Array)
0161質問�@�A
2014/12/18(木) 00:39:30.54ID:ZHBfn1LO0162nobodyさん
2014/12/18(木) 10:51:48.08ID:???0163nobodyさん
2014/12/18(木) 16:27:33.17ID:IJydX9LXアソシエーションのプライマリキーが邪魔してました。
アソシエーション使わない方が小回りが利いて良いですね。
0164nobodyさん
2014/12/19(金) 19:52:59.80ID:BHq08Q5j毎度、ブラウザのみならずJSデバッガーを開いてJSを毎度開いてデバッグする必要があり手間なので
全てpostを行い、サーバ側でバリデーションその他を行う様にしました。
開発の生産性はAjaxと比べてどちらが早いですかね?
0166nobodyさん
2014/12/19(金) 23:20:57.71ID:???サーバ側でバリデーションは必須じゃないのか……
0167nobodyさん
2014/12/21(日) 15:17:01.54ID:kDlJPF64そもそもだけど、Ajaxで is_post"ajax")って感じで
バリデーションをするとcrome上でデバッガーを開いてやらないといけないでしょ?
それが面倒なんです。
普通にPOSTで全てリクエストを行っていれば
簡単にデバッグ出来るけど、Ajaxにするとサーバからの戻り値をJavaScript側でもデバッグを
する必要があるでしょ?
それが本当に面倒に感じるんです。
0168nobodyさん
2014/12/22(月) 22:18:50.23ID:???クライアント側でのバリデーションはオマケ
クライアント側でバリデーションをやろうがやるまいが、サーバ側でのバリデーションは必須
0169nobodyさん
2014/12/23(火) 21:07:58.32ID:???バグの原因にならんの?不安で仕方ない。
アップデートしたくないのをjsonで削除するとファイルまで削除されるし。
0170nobodyさん
2014/12/23(火) 21:31:44.30ID:???0171nobodyさん
2014/12/24(水) 01:58:44.52ID:???例えばcake2.4使ってて、中身を少し変えるとするじゃん。
で、2.4を指定してcomposerしたらどうなる?
1 同じ2.4なので何も起きない
2 同じ2.4だけどファイルが少し違うので新しい2.4を、上書きする
どっちなんでしょうか?
0172nobodyさん
2014/12/24(水) 08:56:59.50ID:???composer.jsonにcakephp/cakephpを2.4.*と指定したということでいいかな?
https://packagist.org/packages/cakephp/cakephp
基本的にリポジトリに登録されているバージョン情報を利用するわけなので
開発中のバージョンを指定しなければ問題無いだろう
●composer install
- composer.lockファイルがある → composer.lockファイルに記録されたものと同じバージョン
- composer.lockファイルがない → Packagistに登録されている2.4系の最新バージョン
●composer update
Packagistに登録されている2.4系の最新バージョン
自分で開発していてアップデートしたくないパッケージがあれば
composer.jsonに2.4.8などとバージョンを決め打ちで指定してupdateすれば影響はほぼない
ソースを配布するならcomposer.lockを残しておいてupdateは自己責任でやれよってことで良くないか?
0174nobodyさん
2014/12/26(金) 14:52:05.09ID:y17exSu4<?php echo
$this->Form->input(
'Fuga.fuga_id',
array(
'label' => false,
'legend' => false,
'div' => false,
'type' => 'radio',
'options' => $hogeArray,
'default' => $hogeDefault));
?>
optionsに指定している「$hogeArray」はコントローラ側からセットしている配列。
defaultに指定している「$hogeDefault」はデフォルト選択値。
やりたいことは「$hogeArrayがn個毎に改行を入れて表示」なのですが、上手くいきません。
separatorに例えば「<br />」などを指定すれば項目1つずつ改行されるのですが、
個数指定をしてseparatorを入れるようなことはできたりしないでしょうか?
■ このスレッドは過去ログ倉庫に格納されています