【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/
0352nobodyさん
2015/03/21(土) 20:42:49.66ID:???グループ開発ならコーディング規約は大切だけどcake使ってるからcakeの規約を必ず採用しなければいけないわけじゃないと思うけどな
もちろんコアは必ず規約に従うべきだけどapp以下は規約推奨という程度だよ
>>351
タブインデント支持なんだろ
0353nobodyさん
2015/03/22(日) 00:28:55.54ID:???Cakephp-codesnifferのバージョンでインデントの検知(警告)がなぜ、違うのでしょうか?
Ver2.0.2だと タブで警告...スペース使え
Ver0.1.3だと スペースで警告...タブ使え と真逆になります。
ちなみに
Ver2.0.2は composerで設置 https://github.com/cakephp/cakephp-codesniffer
Ver0.1.3は pearで設置し、
netbeansのPHPCSMDの設定を
Ver2.0.2 を使うときは C:\php\vendor\bin\phpcs.bat
Ver0.1.3 を使うときは C:\php\phpcs.bat を指定すると切り替えて使えます。
※WindowsのPathは、両方通します
CakePHPは「タブインデントが正解」で良いのですよね?
0354nobodyさん
2015/03/22(日) 01:51:28.83ID:???cakephpcsは最新版だとcakephp3の規約準拠なので2系使ってる人はこっちの古いバージョン使ってね
ってREADMEに書いてあった
cakephpは2系はタブインデントで3はスペースインデントに変わってる
0355353
2015/03/22(日) 05:08:44.10ID:???感謝です。3で逆になるんですね。
言われる通り、3.0の規約の英語版には
「Four spaces will be used for indentation.」 となって、「4スペースを使え」ってなってました。
http://book.cakephp.org/3.0/en/contributing/cakephp-coding-conventions.html
ちなみに2.0は「One tab will be used for indentation.」
http://book.cakephp.org/2.0/en/contributing/cakephp-coding-conventions.html
3.0の日本語版が間違ってます。これって大混乱を招きます
「インデントには単一のタブが用いられます。」
http://book.cakephp.org/3.0/ja/contributing/cakephp-coding-conventions.html
「過去の継承」って意味や、本家本元の大間違い有りって、CakePHPって大丈夫なのでしょうか。
何を信じて良いんだろ〜
0356nobodyさん
2015/03/22(日) 14:35:05.61ID:???正式リリースもまだだしそんなもん
0357nobodyさん
2015/03/22(日) 16:16:39.32ID:???Found an issue? Submit a correction on GitHub
0358nobodyさん
2015/03/24(火) 21:25:37.75ID:???0360nobodyさん
2015/03/24(火) 22:51:32.29ID:???今回は1から2のインパクトより大きい
0361nobodyさん
2015/03/25(水) 10:40:02.23ID:???新規案件とはいえ、なかなか変えられないわな
0362nobodyさん
2015/03/25(水) 22:03:40.40ID:nkhbQP1fこういう関係のテーブル構成でfindをrecursive=>2でfirst取得すると、
array(
[Bbs] => array()
[User] =>Array(
[Profile] => Array()
))
こんな感じの配列になるのですが、Userの中に入れない方法って無いでしょうか?
つまり、$data['User']['Profile']['name']ではなく、
$data['Profile']['name']だけで参照させたいです。
0363nobodyさん
2015/03/25(水) 23:13:38.47ID:???全部アソシエーションで出来たらと思ったのですが無理なので、
joinsを使って対応します。
0364nobodyさん
2015/03/26(木) 21:56:46.58ID:???それともsave時点でエスケープします?
0365nobodyさん
2015/03/26(木) 23:26:01.65ID:???0366nobodyさん
2015/03/27(金) 00:53:05.30ID:???何に使うことになるかわからんからな
0367nobodyさん
2015/03/27(金) 12:05:56.79ID:???入力時点でエスケープやサニタイズしなくても
Cake使ってる上ではセキュリティ的には問題ないんだよね?
0368nobodyさん
2015/03/27(金) 20:44:33.33ID:???Laravelが流行だどうこう言ってますけど
結局、cakeとcodeigniter学んでおけばいいっしょ
0369nobodyさん
2015/03/27(金) 22:21:52.83ID:/GK6nVHiPHPを実行し、日本時刻を表示しようと以下のコードを書きました。
【PHP】
//ローカル時刻にGMTとの時差を引く
$time = time() - date("Z");
echo date("Y/m/d H:i:s (D)", $time);
//ついでに日本時間を表示
$time = $time + 9*3600;
echo "<BR>";
echo date("Y/m/d H:i:s (D)", $time);
【実行結果】
2015/03/27 05:22:14 (Fri)
2015/03/27 14:22:14 (Fri)
実行した結果、時刻が日本時間とかなりずれているのですがどこが間違っていますか?
0370nobodyさん
2015/03/27(金) 22:27:30.43ID:???0371nobodyさん
2015/03/27(金) 22:39:55.31ID:???教えてください。。。
0372nobodyさん
2015/03/28(土) 11:31:26.66ID:???そのサーバーの現在時刻を表示させる
時刻計算してGMTを表示させる
時刻計算してJSTを表示させる
この手順でうまくいかなければ諦めろ
はい、この話は終わり
0374nobodyさん
2015/03/28(土) 15:56:09.33ID:???init.js というスクリプトがデバッグされていますが
なぜこんな自分で読込もしていない様なスクリプトが読み込まれているのでしょうか?
※javascriptのスレッドが見つからなかったので人が一番多そうなここで
質問させてもらっています。
0375nobodyさん
2015/03/28(土) 17:42:04.24ID:???はい、この話は終わり
0376nobodyさん
2015/03/29(日) 01:04:03.61ID:???みたいな煽りをするための材料作りに来たような感じ
0377nobodyさん
2015/03/29(日) 16:04:33.31ID:???0378nobodyさん
2015/03/29(日) 19:57:31.43ID:???0379nobodyさん
2015/03/29(日) 20:26:31.18ID:???0380nobodyさん
2015/03/30(月) 23:11:34.93ID:???どうすればPHPが使える様になりますか?
マニュアルが古すぎて設定が出来ないです。
http://www.serverqueen.jp/cs/startup/zoomimg/shared_php01.html
0381nobodyさん
2015/03/30(月) 23:42:44.98ID:???なんで最近こういうのが増えたんだ?
0382nobodyさん
2015/03/31(火) 02:02:19.81ID:???いまのとこ誰も賛同してくれてないけどな
でもあると思うんだよなぁ
0385nobodyさん
2015/03/31(火) 11:14:53.43ID:???1:初心者がタダでプログラミングを学ぼうとする
2:ドッドインストールというサイトを見つけて勉強する
3:しかし、基本的なことをちょっと紹介してるだけなので、何が必要か分からない。
4:知恵袋や教えてgooで質問するのは手間がかかる
5:「そうだ!2ちゃんねるなら会員登録が必要ないし、大勢居るから教えてくれるだろう!」
6:適当に板名を見てWebProg板を探すも、どのスレに質問していいかわからない
7:「ま、スレタイにPHPってついてるし、上の方にあるからこのスレでいいやろ」
って感じだと予想
0387nobodyさん
2015/03/31(火) 15:33:31.65ID:???動画学習系のあるけど、やってみてわかったけど動画学習は効率悪い
気分的にやった感はすごいあるけど
0388nobodyさん
2015/03/31(火) 15:53:01.22ID:???そこが作ったDVDを再生しながら同じように入力する程度で、全く身に付かなかった。
あれなら3000円ぐらいの初心者本買って、その通り作る方がマシだわ
0389nobodyさん
2015/04/01(水) 00:49:18.74ID:???知識豊富すぎだろ
0391nobodyさん
2015/04/01(水) 10:37:36.77ID:???毎回、動作テストの度にフォーム入力していくので面倒です。
こういう時ってCakeのテスト機能を使うのでしょうか?
いまいち、テストの使い方がよくわからないので教えて下さい。
0392nobodyさん
2015/04/01(水) 17:00:09.59ID:PiSv1kDp馬鹿まるだし
0393nobodyさん
2015/04/01(水) 21:48:03.44ID:PiSv1kDpaiueo<br><br>
,
&
0395nobodyさん
2015/04/01(水) 23:37:29.02ID:???ちゃんとやりたいのですが、どうやってテストを作ればいいか分かりません。
せめてググり方だけでも教えて下さい
0396nobodyさん
2015/04/01(水) 23:56:21.88ID:PiSv1kDpとりあえず舌をおもいっきりかめばいいと思うよ
0401nobodyさん
2015/04/03(金) 18:37:35.13ID:???かと言ってコントローラーで設定するのも悩む。
0403nobodyさん
2015/04/03(金) 23:32:55.11ID:???海外サーバを希望です。
0404nobodyさん
2015/04/03(金) 23:37:54.15ID:???どういうこと?例えば
ホーム > ネット関係 > WebProg
だとして、この流れをコントローラーから配列を作成してsetし、
ビューでヘルパーから読み込むとか?(俺はそうしてた
でも、ページ毎のタイトルをDBで管理しない限りは、
コントローラーに直接書かなきゃいけないからなぁ
DB管理していないページもあるし。
0405nobodyさん
2015/04/03(金) 23:53:39.12ID:???そんな感じ
二階層までならコントローラー名とアクション名に準じたタイトルでパンくず作ってあげてもいいかも
それ以上の階層はdbなりconfigure使うしかないんじゃないかなー
>>403
AWSっていう海外サーバーならお金払えば払っただけ無制限にディスク使わしてくれるらしいよ
0406nobodyさん
2015/04/04(土) 00:40:37.59ID:???404だけど、やっぱりそうか。ページ名をどこで管理するかが問題なんだよなぁ。
DB使うと、簡単なページを追加した時でも、DBに追加する必要もあるし。
0407nobodyさん
2015/04/04(土) 15:50:08.18ID:???インストールするのにComposerとかみんな使ってんの?
色々知らないことが増えてる…
0408nobodyさん
2015/04/05(日) 01:16:56.44ID:???やっぱりリスキーだよね?
0409nobodyさん
2015/04/05(日) 02:17:41.58ID:???0410nobodyさん
2015/04/05(日) 04:14:01.43ID:???おれならお断りする案件だな
0411nobodyさん
2015/04/05(日) 15:06:11.90ID:???いや、結構ガチガチの会員サイト
安定しているシステムなのにこれをcake3に置き換えてボコボコになりそうで怖いです。
VB6.0→VB.net へのリプレースみたく大変な事になりそう。
0412nobodyさん
2015/04/05(日) 17:50:15.66ID:???0413nobodyさん
2015/04/06(月) 12:01:41.30ID:???プライマリーキー以外で結合する必要があるから
アソシエーションじゃなくてjoinsに書いてるけど、その点だけが困る。
0416nobodyさん
2015/04/07(火) 21:18:58.02ID:???いけるいける
primarykeyとforeignkey切り替えれば
まあ素直にjoinした方が見通しいいかもしれないけど
0417nobodyさん
2015/04/08(水) 10:25:46.98ID:???どうやっていけますか?
User→Profile
User→Bbs
Bbs→Entry
というモデル設計で、BbsとEntryをhasOneで繋ぎつつ、
Bbsのuser_idとProfileのuser_idを結合したいのですが。
0418nobodyさん
2015/04/08(水) 22:50:18.86ID:???そういう構成なら直接結合しないでUser経由して結合した方がいいよ
深い結合については>>340あたりを参照
0420nobodyさん
2015/04/09(木) 00:40:19.67ID:???413=415=417=419ですが自己レスです。
joinsを使ってもUser経由で結合してもそんなにSQLの回数は変わりませんね。
強いて言うなら、$data['User']['Profile']['name'];
みたいに多次元配列になるのが煩わしいだけでしょうか。
joinsの場合は、$data['Profile']で書けますが。
よほど深い階層になる場合や複雑なSQLでない限り、
極力、joinsは使わないようにします。色々と教えていただきありがとうございました。
0421nobodyさん
2015/04/09(木) 01:19:01.76ID:???0422nobodyさん
2015/04/09(木) 14:29:29.47ID:???どちらにしろフレームワーク使うんだから、後々修正しやすい方がいい
0423nobodyさん
2015/04/13(月) 14:41:46.28ID:kiqQUtSecore.phpのprefixにmypageを追加して、会員専用の処理がある場合は、
該当のコントローラーで、アクション名にmypageを付けて処理する。
例)会員情報の変更
/mypage/users/edit →UsersControllerにmypage_editを追加
例)会員が投稿した日記を編集
/mypage/diaries/edit/1 →DiariesControllerにmypage_editを追加
例)会員ではない人が日記を閲覧
/diaries/detail/1 →DiariesControllerにmypage_detailを追加
という考えで良いのでしょうか?
URLはrotes.phpに指定すればいかようにも変えられるというのは分かるのですが、
出来るだけCake利用者がやっている、ベターな方法を追求したいと思っています。
それがprefixを使う方法なのか、MypageControllerを作る方法か、routesのみで切り替えるのか
どれが良いか悩みますので、作り方に法則のようなものがあれば教えて下さい。
0424nobodyさん
2015/04/13(月) 22:48:51.65ID:???editとかのページはauthコンポーネントのallow使って制御した方がいい
detailをprefixで振り分けてるのは悪くはないけどそこまで表示内容に違いがないのならprefix使うまでも無い気がする
0425nobodyさん
2015/04/14(火) 11:10:39.83ID:???つまり、わざわざmypageというprefixやコントローラーを作るのではなく、
各アクションにアクセス制限(authのallow)をするだけでいい
ってことですかね?それが一般的ならそうしますが、
どうもログイン後のページって、adminとかmypageを付けるような気がするんです。
決まりがあるわけじゃないでしょうが、ググってもそういう情報が多くて・・・
0426nobodyさん
2015/04/14(火) 11:13:26.07ID:???例)会員ではない人が日記を閲覧
/diaries/detail/1 →DiariesControllerにmypage_detailを追加
↓
/diaries/detail/1 →DiariesControllerにdetailを追加
(誰でも閲覧できるから、prefix必要ないです)
0427nobodyさん
2015/04/14(火) 22:26:08.70ID:???規模が大きくなるのならログイン必須であることを明示するためにもprefixあった方がいいかもだけど
一人で小規模でやるなら分けるほどでもない
0428nobodyさん
2015/04/14(火) 23:14:54.67ID:???どの程度が「規模が大きい」から図りかねるのですが、
モデルが50ぐらいあるなら大きいって認識でいいですかね?
前述した通り、「一般的なベターなやり方」を教えて欲しいのですが・・・
0429nobodyさん
2015/04/14(火) 23:40:26.26ID:???モデルというよりコントローラーの数によるだろうけど、それだけでかけりゃ分けた方がいいよ
一般的にベターとか言われも、例えば規模が本当に小さければcakephpなんて使わずに
phpの1ファイルで実装した方がいい場合もあるわけだし
規模感無視して一般的な話をしようとしても無理だよ
0430nobodyさん
2015/04/15(水) 00:06:47.65ID:???cakeのモデルって使い勝手悪いのですが、これがフレームワークでは普通なのでしょうか?
アソシエーション定義してもrecursiveの深さを検索するとかこんなもの使い道あるのでしょうか?
テーブルにただマッピングされてるだけのsql発行クラス以上の使い方があるのでしょうか?
っていうか、このモデルというのは使い勝手がいいのですか?
0432nobodyさん
2015/04/15(水) 00:30:30.11ID:???フレームワーク使うのに、小規模ってことは無いと思うんです。
例えば「お問い合わせフォーム作りたいから使おう」とか「会社紹介ページ作りたいから使おう」
ってレベルの人がフレームワークに立ち寄らないと思うんです。
それより規模がでかくて数々のプラグインや便利ツール(ヘルパー・コンポーネント等)
があるからフレームワークを使おうと思うわけで。
そしてもうひとつの利点である「開発方法を定める」ってのもあると思うんです。
命名規則やMVCの考え方など、1人でやってたらその都度変わりそうな要件も
フレームワークを使うことで統一する事が出来るし、それは後の改修のしやすさに繋がる。
だからこそ「一般的でベターな方法を追求する」事ってメリットがあると思うんですよ。
そこにメリットが無かったり、「人それぞれじゃね?」ってなると、
それこそオレオレフレームワークと変わらない気がします。
>>430がフレームワークを使おうと思ったキッカケも、
「自分一人の考えで済ませたくないから」じゃないですかね。
そして過去の自分の経験・考えがあるからこそ、
「Cakeのモデル定義は使い勝手が悪い」という判断ができるわけで。
だからやっぱり「自分の好きな様にやれよ」って言われても、しっくり来ないんです。
0433nobodyさん
2015/04/15(水) 00:47:12.63ID:???TeraTermで接続するにはどうすれば良いでしょうか?
0434nobodyさん
2015/04/15(水) 00:57:56.92ID:???sqlもおぼつかないど素人です。
>>432
>だからやっぱり「自分の好きな様にやれよ」って言われても、しっくり来ないんです。
そうですね、なにか他人と共有できるものを獲得できるようにフレームワークで一番最初に引っかかったものいじってみたしだいです。
よくわからないので、とりあえず青い鳥を探してがんばってみることにします。
ありがとうございました。
0435nobodyさん
2015/04/15(水) 01:03:19.42ID:???いわんとすることはわかるけど、cakeでもコントローラー10個以下の小規模なものと
コントローラー100個以上の大規模なものでは、cakeという規約の上でも開発ポリシーは変わるよ
もちろん参加メンバーの多寡でも変わる
たとえばcakeはキャッシュ先をファイルとapcとmemcacheとredisに対応してるけど、
決してデフォルト設定のファイルキャッシュが多くの場合にベターな手段であるということではない
最終的に自分の案件でなにを使うか決めるのはやはりそれぞれの開発者だよ
0436nobodyさん
2015/04/15(水) 01:16:06.96ID:???フレームワークを使わない場合、
ファイル管理は主にフォルダ分けで対応していたと思うんです。
そのフォルダ分けがコントローラー分けに変わっただけで。
でも、コントローラーを分ける理由てファイルが肥大化して読みにくくなるからで、
1コントローラー1アクションを実行するCakeの場合、
パフォーマンスに大きく影響はでないと思います。
ただ、その「ファイルが読みにくくなる」というのは開発効率の面で大きな問題ですし、
バグのリスクが高まるなら、素直にファイルを分けたり、
プラグイン化するのも大事だと思います。
その、「どれぐらいの量に達したらこうするべき」って指標があれば良いんですけどね。
それはあくまで要件次第って事が難しくさせるんです。
基本的に誰しも最初は小規模の物を作るだろうし、
継続して運営していくようなものなら後から機能を追加して大きくなっていくと思うし。
とりあえず、会員専用ページのURLやコントローラー構成に「こうするべき」
という指標はないということで納得する事にします。色々とありがとうございました。
0437nobodyさん
2015/04/15(水) 02:03:20.77ID:???Cakeのモデルを「使い勝手が悪い」と評価した理由や経緯に
興味があるんだけれど。差し支えなければ教えて欲しい。
0438nobodyさん
2015/04/15(水) 03:26:27.37ID:???findで帰ってくる連想配列が使いづらい
モデルのhasManyでつながってるモデルのさらにhasManyを取得するのがrecursiveで階層指定する以外、ドキュメントに見当たらない。
とか
まだ、勉強段階で自分が勘違いしてるかもしれんが、使い勝手がいいとは。。。
0439nobodyさん
2015/04/15(水) 08:07:14.49ID:???findの返り値はcakephp3からオブジェクトになったはず
俺はpdoで返ってくる値とどちらも大して違わないと思うけど、
cakephp2の配列は良くも悪くもphp的だね
recursiveが扱いにくいのは事実で、基本的にはcontainableを使う方がいい
0440437
2015/04/15(水) 13:46:41.43ID:???回答ありがとう。「モデルの使い勝手が悪い」にはそもそも同意していて、
初心者の観点だとどのへんが辛いと感じるのかなと思ったので。
Cake2でのモデルを扱うには、Containable と Hash を活用するようにすれば
少しは辛さは軽減できると思うけれど、何というかどちらもいわゆるバッド
ノウハウの類であって、本質的な辛さを解決するものではないし、だからこそ
Cake3では、エンティティオブジェクトを返すようになり、Containable /
recursive / afterFind / virtualfield などがなくなってしまったんだと思う。
0441nobodyさん
2015/04/15(水) 16:25:28.65ID:???データ量が膨大で3日程かかってしまいます。
DL中にWindows Update等の横やりがはいり、DL処理が中断されてしまいます。
その後DL処理を再開するにあたり、既にローカルに対象ファイルがある場合には
スキップして、新しいファイルのみWEBサーバからローカルにDLする設定方法はありますか?
0442nobodyさん
2015/04/15(水) 17:44:41.75ID:???それってCakeと関係なくね?
CakeはPHPというプログラムを使って、主にWebサイトやシステムを作るものだよ?
あなたの悩みはFTPとかSSHとかtelnetとか通信上の問題だと思うんだけど。
0444nobodyさん
2015/04/15(水) 20:20:48.34ID:???ありがとうございます。
Containableはよさそうですね。
>>440
Hashはバッドノウハウってのはまさにですが使ってますね。
とりあえずはcake2をしばらく弄ってみます。
0445nobodyさん
2015/04/16(木) 19:40:28.40ID:???ウンコって書きました。もうしませんごめんなさい。 by FIX ★ウンコって書きました。もうしませんごめんなさい。 by FIX ★ウンコって書きました。もうしませんごめんなさい。 by FIX ★
0446nobodyさん
2015/04/16(木) 20:04:32.48ID:qC1kWGvR<b>どうやってかいた?</b>
0447nobodyさん
2015/04/16(木) 20:13:15.48ID:???0448nobodyさん
2015/04/16(木) 20:14:44.25ID:???0449nobodyさん
2015/04/16(木) 22:21:57.51ID:???0450nobodyさん
2015/04/18(土) 17:51:43.74ID:???>>472
なんで IDとか日付が他のレスと違ってるの?
2chのバグ?
0451nobodyさん
2015/04/19(日) 18:05:07.95ID:0/QVOYd7#ビュー
echo $this->Form->input('Entry.1.name', array('type' => 'text'));
echo $this->Form->error('Entry.1.name');
では表示されませんでした。
■ このスレッドは過去ログ倉庫に格納されています