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

【PHP】フレームワーク CakePHP 16ホール目【v2.4】

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

※他フレームワークとの比較等はスレ違いです

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

■日本語公式
http://cakephp.jp/
フォーラム
http://cakephp.jp/modules/newbb/
cookbook(マニュアル)
[2.x] http://book.cakephp.org/2.0/ja/index.html
[1.3] http://book.cakephp.org/ja

http://kohada.2ch.net/test/read.cgi/php/1354593996/l50
0153nobodyさん2013/09/23(月) 10:43:47.86ID:???
やっぱそうだよね
俺もそう思っていた
0154nobodyさん2013/09/23(月) 13:37:52.78ID:???
コントローラーに書いてある$thisってなにがはいってるの?
何を指してるの?
0155nobodyさん2013/09/23(月) 13:43:42.09ID:???
マジで言ってんの?
0156nobodyさん2013/09/23(月) 13:49:32.13ID:???
CakeはSecurity.levelの設定をhighにしてるとわけのわからないセッション切れとか問題てんこ盛りで起きる
仕方なくmediumで使うと安定している
0157nobodyさん2013/09/23(月) 14:34:05.91ID:???
>>152
お前も勉強しろ
0158nobodyさん2013/09/23(月) 16:47:11.98ID:???
>>152
「フレームワーク メリット」でぐぐって勉強しましょう。

>>154
クラスを勉強しましょう。
0159nobodyさん2013/09/23(月) 17:10:55.17ID:???
反論できないと見える
0160nobodyさん2013/09/24(火) 10:22:15.50ID:PewVrVzx
cakeのわかりにくさは、モデルのわかりにくさ、単数形複数形の使い分けの分かりにくさに直結してると思う
0161nobodyさん2013/09/24(火) 10:48:16.58ID:???
思いません
0162nobodyさん2013/09/24(火) 11:01:06.76ID:???
マジックメソッド、コールバックメソッド、
リフレクションを用いた初期設定値の自動マージ、
そのあたりの隠蔽された処理の把握に苦戦する。

とは言え、これはCakeに限ったことじゃないが。
0163nobodyさん2013/09/24(火) 12:09:00.22ID:???
>>162
オレもいまCake使ってて
モデルが単数形でコントローラーが複数形だけど
それって他のフレームワークも同じ?
フォームヘルパーとか$this->request->data=$this->Post->read()の値をフォームで使えるようにするらしいけど
$this->set('xxx',$this->request->data);じゃなくて
そのまま使えるけどそれも隠蔽されてるっていうの?
0164nobodyさん2013/09/24(火) 13:18:17.37ID:???
>>153
一人のキチガイが根拠も示さず必死に否定してるけど
開発速度向上はフレームワークのメリットのひとつだよ
0165nobodyさん2013/09/24(火) 13:56:07.30ID:???
>>163
未作成のモデルをCakePHPみたいに暗黙的に呼び出すというのは俺は知らない。
SynfonyにしろCodeIgniterにしろテーブルと関連付けた
アクティブレコードを明示する必要があって、
そこで単数形にするかどうかは好きにすればって感じだったと思う。

> フォームヘルパーとか$this->request->data=$this->Post->read()の値をフォームで使えるようにする

え、そうなん?初耳だわ。
0166nobodyさん2013/09/24(火) 14:28:03.92ID:???
>>165

>ほとんどの場合、このような形式を意識することはありません。
>CakePHPの FormHelper やモデルのfindメソッドは全てこの形式に従っています。
>FormHelperを使っていれば、 $this->request->data で簡単にこの形式のデータにアクセスできるようになっています。

$this->setに代入じゃなくて
$this->request->dataに代入で使える

変なの
0167nobodyさん2013/09/24(火) 14:53:11.90ID:2aQmFqKG
そこまでやってくれなくても… って感じだな
0168nobodyさん2013/09/24(火) 16:31:42.77ID:???
モデルを単数形、テーブルを複数形、コントローラーを複数形っていうルールは他のフレームワークも同じですか?
教えてください
0169nobodyさん2013/09/24(火) 16:36:08.50ID:???
>>164
141を読んでくれ。これをどう解釈するかだ。
0170nobodyさん2013/09/24(火) 17:46:21.20ID:???
単数形、複数形の問題ってビューのコーディング時にも悩むんだよな
0171nobodyさん2013/09/24(火) 18:01:42.34ID:???
>>169
他に何のメリットがあるの?
開発速度以外はデメリットだらけだろ
オープンソースのFWはオレオレ作る時間がない時に仕方なく使うもの
0172nobodyさん2013/09/24(火) 18:10:35.82ID:???
>>171
品質の向上とかあるだろggrks。

cakeが最良とは言わんが、今の時勢でフレームワークを使うことを考慮しないのはありえん。
0173nobodyさん2013/09/24(火) 18:12:57.27ID:???
>>171
メリットのひとつだけど他にもいろいろあるでしょ
0174nobodyさん2013/09/24(火) 18:24:26.00ID:???
>>171
・利用者が多いので、プラグイン作成の手間が省ける
・大規模サイトでも利用されてる安心感
・命名規則が統一してるから、名前付けで悩まなくてもいい
・不特定多数で開発する時、意思の疎通が図りやすい
・コピペで作っても不具合が起きづらい
・公式が現在も開発を続けている安心感

まだ続けてるか?
0175nobodyさん2013/09/24(火) 18:28:31.88ID:???
>>171
逆に実行速度以外オレオレのメリットがないような
0176nobodyさん2013/09/24(火) 18:29:58.01ID:???
>>175
そもそも実行速度求めるならPHP使う必要があるのかと。
0177nobodyさん2013/09/24(火) 18:34:34.37ID:???
スレが伸びてると思えば、
やはり不毛なフレームワーク論争かw
0178nobodyさん2013/09/24(火) 18:38:55.69ID:???
PHPを使うとどうせ遅いんだから、という理由で速度を全く気にしないというわけにもいかないよな
0179nobodyさん2013/09/24(火) 18:50:09.35ID:???
>>178
「遅い」の定義は要件次第だから、前提条件がないとこれもまた不毛な議論に。
0180nobodyさん2013/09/24(火) 21:21:03.36ID:???
cakeでは簡単なことしかできないように思える。
cakeで凝ったつくりのサイトとかあったら教えてもらえませんか?
0181nobodyさん2013/09/24(火) 21:39:34.62ID:???
>>180
逆にcakeでできないことって何だろう。。。
根性あれば大抵できると思うんだが。
0182nobodyさん2013/09/24(火) 23:14:27.72ID:???
>>180
そもそもあんたが言っている「凝った作りのサイト」が
どういったものなのかわからないので答えようがない。

cake以外で作っていてもいいから、
まず「凝った作りのサイト」の例をいくつか上げてくれ。
サイトいうだけじゃなく凝ってる部分はどこかも言うように。
0183nobodyさん2013/09/25(水) 00:17:25.95ID:???
facebookとかtwitterとか言い出したりしてw
0184nobodyさん2013/09/25(水) 00:26:04.71ID:???
CakeでSNS作ったんだけどどうやって集客すんの?
0185nobodyさん2013/09/25(水) 01:34:52.18ID:QAhhx/Ja
それcakephpと関係ないような…
0186nobodyさん2013/09/25(水) 01:50:11.08ID:???
>>184
ケーキ食べ放題とかでアピール、かな・・・
0187nobodyさん2013/09/25(水) 13:03:59.31ID:???
Cake最新版を落としてきて、cake test core AllTestsをやったら
Fatal error: Class 'PagesController' not found
と出るんだけど、なにこれテスト通らないのにリリースされてんの?
0188nobodyさん2013/09/25(水) 14:54:07.29ID:???
>>187
そのテストはお前に必要なのか?
0189nobodyさん2013/09/25(水) 21:12:17.21ID:???
>>178
PHPだから遅いのは確かだが、その中でも早いフレームワークは出てきてる。

>>180
「凝った作りのサイト」ってよくわからんが技術が無いだけじゃないの?

>>184
SEO対策だね。初歩しか知らんからそれ以上はなにも言えないw
0190nobodyさん2013/09/25(水) 23:37:22.39ID:???
人間がストレスたまらないスピードなら遅いって言われる部類でも構わない
0191nobodyさん2013/09/26(木) 00:26:56.50ID:???
>>189
SEO対策は集客のためにするんじゃないぞ。

SEOは単に検索エンジンにとって適切な作りにするだけだ。
それによって、検索した時の順位が上がることがあるが、
集客できるかどうかはコンテンツ次第。
0192nobodyさん2013/09/26(木) 21:43:37.36ID:???
htmlヘルパーのhtml->imageのurlで生成されるa要素に属性をつけることは可能でしょうか?
やり方がございましたらご教示お願いします
0193nobodyさん2013/09/26(木) 22:53:10.81ID:???
出来ません。
HtmlHelper::link() メソッドでラップするなり何なりして下さいませ。
0194nobodyさん2013/09/26(木) 23:27:13.45ID:???
まだhtmlヘルパーなんてのあるんだね。
プログラムに処理させるのは簡単なループと条件判定とURLぐらいにして
普通にタグを書くべきだという結論にいたったけどね。
0195nobodyさん2013/09/27(金) 02:25:34.52ID:???
まぁまぁ賛同するわ、その意見
0196nobodyさん2013/09/27(金) 11:37:18.57ID:???
>>193
やっぱりそうなりますか
ありがとうございます

>>194
現在ページのけつにスラッシュありかなしかで相対パスが変わってしまうのを無視できるのでヘルパー使ってます
絶対パスだったら生でいいと思います
0197nobodyさん2013/09/27(金) 13:21:36.12ID:???
PHPスレがないのでここで質問しますが
PHPでバリデーションする場合ってどうやってますか?

cakephpみたいにvalidateのmessage=>'エラー'とかみたいなのがあればいいのですが
ライブラリをぐぐっても多すぎて困ってます

PHP長年やってる人はどのようにしてるのでしょうか?
いちいちif分で2ページにわたり書いてました
フレームワークを使わないでPHPでやる方法の上級者の意見を参考にしたいです教えてください
使ってるライブラリ名とかでもいいです
0198nobodyさん2013/09/27(金) 16:33:01.11ID:???
あ
0199nobodyさん2013/09/27(金) 17:16:00.06ID:???
>>197
いちいち二ページ書くのがいやだからフレームワークを使う
フレームワークを使うのが嫌なら二ページ書くしかないだろ
0200nobodyさん2013/09/27(金) 17:54:19.34ID:???
2ページって・・・
ひょっとしてノートにでも書いてるの?
0201nobodyさん2013/09/27(金) 18:11:54.74ID:???
>>197
cakephpにはvalidateのmessage=>'エラー'とかみたいなのがあるのでそれを使います。
0202nobodyさん2013/09/27(金) 20:46:51.61ID:???
複数のページにauth認証をかけていて、ログインしたuserは全てのページが見られるようになってるんですが、
特定のユーザーだけ、特定のページのみ閲覧可能にする方法はございますでしょうか
ご教示お願いいたします
0203nobodyさん2013/09/27(金) 23:51:29.97ID:???
特定のユーザーか否か判定して正しければ正規のアクションを実行し、
そうでなければエラーページ表示しろ
0204nobodyさん2013/09/28(土) 00:10:22.06ID:???
>>202
ACO, ARO を使ったアクセス制御を勉強して下さい。
CakePHPの組み込みで3種類の設定が用意されています。

データベースを用いた方法が最も柔軟で高機能ですが、
管理が複雑になるので始めはiniファイルかphpファイルを用いたやり方がオススメです。


設定ファイルは

app/Config/acl.ini.php
app/Config/acl.php

のいずれかをカスタマイズして用います。

チュートリアルには残念ながらデータベースを用いる方法しか載っていませんが、
ググればある程度日本語の資料も出てくると思います。
0205nobodyさん2013/09/28(土) 01:32:35.29ID:???
>>204
cakebookが本当にひどいな。見ない方がいい。普段はcakebookの出来には寛大だが、こればかりは無理!
0206nobodyさん2013/09/28(土) 01:43:14.41ID:???
>>196
いえ、ですからaタグのhrefのURLの部分だけでいいと言ってるんです。
0207nobodyさん2013/09/28(土) 02:24:59.99ID:???
HtmlHelper::link() にかぎらず、使い所だけおさえておけばいいんじゃない?

フレームワークってあくまでも標準を提供するだけであって、
規約でさえも単なるバリエーションの一形態として捉えたんで良いのではないかと。

規約に縛られ過ぎも良くないし、規約を無視し過ぎも良くない。
中庸が良いと思う。
0208nobodyさん2013/09/28(土) 07:50:01.51ID:???
>>203
どうもです
たしかにそれがシンプルですね

>>204
ACO,AROですね
勉強してみます
おすすめの方法の方向でやってみたいと思います
ありがとうございました
0209nobodyさん2013/09/28(土) 10:59:00.81ID:???
>>204
aco,aroっていまいち使いどころがわからない。
例えばあるページの一部のリンクの表示をユーザーによってオンオフする場合、
aco,aroを使い、かつ、ボタンの表示制御のコードも書くよね。
なんか楽になってない気がするんだよね。
0210nobodyさん2013/09/28(土) 12:27:13.28ID:???
>>209
ACO, AROしらんけど、ユーザーによってオンオフするという機能の
作り方にある種の壁がある。

・壁を乗り越えられない人

if ($user == 'admin') { 管理画面表示 }
こんなコードを書く

・壁を乗り越えた人
if ( 権限があるか?('管理画面', $user) ) { 管理画面表示 }
こんなコードを書く


前者はユーザーが増えた時どうするの?
新たにグループ作りたくなったらどうするの?
adminだけど特定の場合(無料ユーザー等)には
管理画面の一部を消したくなったらどうするの?
などなど拡張性が低い。(全体的にメンテナンスが必要になるしコードも見づらくなる)

後者の書き方をしておけば、引数のユーザーから
いろんな条件を元に表示する権限を決めるだけだから拡張性が高い。

ACO, AROは、後者の壁を乗り越えた人だけが理解できる機能だと思う。
0211nobodyさん2013/09/28(土) 13:52:09.15ID:???
>>210
adminだけど特定のユーザーに管理画面解放する使い方って?
俺の認識では、管理画面とユーザー用管理画面は
分けるべきだと思うが。共通化するなんて怖い
0212nobodyさん2013/09/28(土) 14:23:58.43ID:???
リクエストとレスポンスのお互いを集合論的に捉えることが出来るのが
ACO,AROの最大のメリット。
だと思う。
0213nobodyさん2013/09/28(土) 14:56:21.69ID:mm0OqWTD
みなさんはviewにヘルパーとか使いまくりますか?
0214nobodyさん2013/09/28(土) 15:13:51.00ID:???
ビューにヘルパーは使った事がありません
ビューは非プログラマに書かせるから、ctp自体使わずHTMLに近いテンプレートシステム使ってます
0215nobodyさん2013/09/28(土) 18:23:01.86ID:???
>>211
説明の仕方が悪かったね。

adminでもGoogle Appのように
無料契約やビジネス契約によって機能が制限されることはある。

そういう話だったが、普通に田中さん(マネージャー)とか
そういう例えにしておけばよかったね。
0216nobodyさん2013/09/28(土) 19:02:36.41ID:???
ACO,AROは名前が紛らわしい
0217nobodyさん2013/09/28(土) 20:16:14.74ID:???
ACO - アクセスコントロールオブジェクト(Access Control Object) - ある主体が取り扱う「物」
ARO - アクセスリクエストオブジェクト(Access Request Object) - ある物を取り扱う「主体」
0218nobodyさん2013/09/28(土) 20:22:28.91ID:???
>>217
何もわからねえぞ
理系か
0219nobodyさん2013/09/28(土) 22:27:35.62ID:???
たとえばdiariesテーブルに複数人のdiaryがまとめて入っているとして、
他人のdiaryが見られないように制御をするとしたら、ACO&AROの仕組みでは対応できなくない?
リクエストを受けたときに、そのユーザーが対象のactionを実行できるかできないかの制御しかできないんでしょ?
0220nobodyさん2013/09/28(土) 23:57:31.97ID:???
CakePHP1系の情報ブログに書いてる人、消してくれないかなあ…
検索時邪魔でしょうがない、確実に今開発してる人の生産性を少しずつ下げてる
0221nobodyさん2013/09/29(日) 01:03:09.68ID:???
>>219
デフォルトというか、Cakeの組み込みはそうです。
でも拡張すれば出来なくはない。
昔やったことがある。
ただ、管理が分けわからなくなって嫌になったんで、そのやり方は封印して
結局PHPの設定ファイルに書き込む方法に落ち着いた。

まぁ、俺が下手なのは認めるとして、逆に言うと、下手な人間にも使えるような
うまい仕組みとはいえないと思う。
0222nobodyさん2013/09/29(日) 01:12:36.30ID:???
下手な人でも使えるなんてのは幻想だよ。
だから技術職というものがあり、
技術があることで金を稼いでいるんだ。
0223nobodyさん2013/09/29(日) 01:54:05.25ID:???
>>220
久々に感動した自己中
0224nobodyさん2013/09/29(日) 01:58:37.63ID:???
ワロタ
0225nobodyさん2013/09/29(日) 02:04:25.72ID:???
そもそもの元凶は
2で仕様変え過ぎ
0226nobodyさん2013/09/29(日) 13:11:03.72ID:???
検索するとき期間を1年以内にすれば大体問題ないよ
0227nobodyさん2013/09/29(日) 13:37:17.57ID:???
そんなことどうやってできるの
0228nobodyさん2013/09/29(日) 13:43:46.71ID:???
あ、できたw
0229nobodyさん2013/09/29(日) 13:48:05.32ID:???
もしかしてChromeじゃないとできないとかある?
0230nobodyさん2013/09/29(日) 13:52:02.75ID:???
URLに自分でパラメータをつければいんじゃね?
&tbs=qdr:yみたいに
0231nobodyさん2013/09/30(月) 13:40:06.80ID:???
>>214
俺はヘルパー使いまくりだけど、HTMLに近いてSmartyみたいな感じ?
0232nobodyさん2013/09/30(月) 14:07:01.24ID:???
サイト全体で共通の関数はどこにかくのかな!?
0233nobodyさん2013/09/30(月) 14:08:21.98ID:???
vendors
0234nobodyさん2013/09/30(月) 17:13:49.37ID:???
自分で作るならLib
サードパーティー製ならVendors
http://book.cakephp.org/2.0/en/getting-started/cakephp-folder-structure.html
0235nobodyさん2013/09/30(月) 21:53:03.23ID:YNM1OLM4
emailコンポーネントを利用してメール送付しようとしてるのですが
送信処理はできてもヘッダーにtoがないのですが原因などわかりますでしょうか・・・
0236nobodyさん2013/09/30(月) 22:56:45.74ID:YNM1OLM4
すいません。単純にポートが閉じているだけでした・・・
0237nobodyさん2013/09/30(月) 23:32:26.73ID:???
Webアプリ開発を加速する CakePHP2定番レシピ119

っていう本がでたらしいのですが
どうですかね?
最近CakePHPはじめたばっかりなので
本かおうとおもってますが
0238nobodyさん2013/09/30(月) 23:52:23.59ID:II3eS9V+
質問です。
Cakeのwebroot下にWordpressをインストールしました。
一応稼働できてはいるのですが、
URLがルートの場合はwebroot内にあるWordpressディレクトリを表示したいのですが
htaccessで可能でしょうか?
0239nobodyさん2013/10/01(火) 04:54:23.88ID:???
思いつかん
0240nobodyさん2013/10/01(火) 09:02:42.29ID:???
こないだからCakeでテスト書いてるが、難しいな…。

どうしてもテストか実際の実行かで分岐しないといけない個所があるんだけど
Cakeで「今テスト中か?」の確実な判定はどうすればいいのでしょう

開発してたら知りたくなるこういうことが公式には載ってないんだよなーという一例
0241nobodyさん2013/10/01(火) 11:07:03.38ID:???
テスト書くのはとても高いスキルの要ることだと思うよ。
Cakeだからむずかしいってことではないと思う。
Cake本体のテストケース見てみ。
すっげー大変なことしてるから。

テスト中の判定はいくつかやりかたはあると思うけど、
それってテストの書き方に問題があるのでは?
0242nobodyさん2013/10/01(火) 11:10:07.46ID:???
なんかおかしな書き方になってしまったが、
要するにCake本体のテストもかなりえげつないことしてるけど、
それはCakeだからそうなったってことではないだろうということ。

あとどうしても判定したいなら CakeTestSuiteDispatcher.php で定数定義してるんで、
それを使ってみるとか。
あとは $_SERVER の SCRIPT_NAME を見るとか。
0243nobodyさん2013/10/01(火) 13:16:24.04ID:???
あざっす、SCRIPT_NAME見ることで解決しました
モデルにどのDBから読み込むか(マスターとスレーブ)動的に変更している所があって
テスト時にそこが本来のDB読みに行こうとしてハマってた等、回避不可能なことがいくつもあってな
いやーテストって本当難しいわ、製品作るより難しい
テストに関する情報が少ないのも難易度を上げてるな、本とかにも大抵ちょろっとしか載ってないもんな
0244nobodyさん2013/10/01(火) 14:25:16.95ID:???
まじめにTDDやったら「テスト書くほうが時間がかかるんじゃないか?」
ってレベルじゃねーな

テストを書く時間9割で
残り実コード書く時間とテスト走らせる時間が5分5分
0245nobodyさん2013/10/01(火) 14:29:15.29ID:???
デグレで困らなくなるから先行投資だと思え
と言いつつ設計と実装を同時に進めるチャランポランな俺はTDDが出来ない
0246nobodyさん2013/10/01(火) 15:03:39.29ID:???
納品して終わりならテストは書かない、そうしないととても納期に間に合わない
運用も任されたり長年使い続けるシステムならテスト書く、そうしないと1年後は毎日バグフィクスで潰れる
0247nobodyさん2013/10/01(火) 15:57:47.39ID:???
2.2.9を使っています。
外部PHPプログラムからCakeの結果(findで生成される配列など)を
受け取りたいのですが、可能でしょうか?

1.3系はググって見つかったのですが、2系は見つかりません。
もし可能なら方法を教えてください
0248nobodyさん2013/10/01(火) 16:00:33.49ID:???
>>247
1.3系でどういった情報が見つかったの?2系で基本的に違いがあるとも思えないけど。
02492472013/10/01(火) 17:43:00.64ID:???
>>248
以下で紹介されている方法を参考にしました。
ttp://web.mt-systems.jp/archives/783

1.3系はこの方法で動きますが、2系ですと一部の関数や命名規則が変わっているので、
この通りにやっても動きません。
Dispatcherの書き方の問題だと思うのですが、
ソースを見てもどうやって実行値を取得すれば良いか、わかりませんでした・・。
0250nobodyさん2013/10/01(火) 18:10:43.96ID:???
読んでみたが、何がやりたいのかさっぱり分からなかった orz...
0251nobodyさん2013/10/01(火) 18:29:49.41ID:???
>>249
そこまでしてでも組み込みたいのか。。。
素直にバッチ化して呼び出すとか、WebAPI経由で呼べばいいものを。。。
0252nobodyさん2013/10/05(土) 01:07:51.95ID:???
Cake2になってよくわからないので誰か教えてくだしあ

コントローラの途中で特定の条件を満たすとヘッダが404を出して終わり
(ブラウザには404 Not foundが表示される)としたいのだが、
CakeResponseというのを使うらしいのだがドキュメント見て

$this->response->httpCodes(404); return; とか
$this->response->statusCode(404); return; とかやっても、ページが表示されてしまう
後者は404が返るようにはなるのだが、ビューの内容も返してしまってるようだ

要は
header('404 Not Found', true, 404);
$this->_stop();
と同じ結果にしたいのだが、CakeResponseを使って書くにはどうすればいいのだろう?
■ このスレッドは過去ログ倉庫に格納されています