トップページ⇒php
1002コメント356KB

【PHP】フレームワーク CakePHP 17ホール目【v3α】

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2014/08/02(土) 21:57:41.01ID:LI0DdohH
CakePHPは、Ruby on Railsの概念の多くを取り入れた、高速開発とPHPの機動性を兼ね備えたフレームワーク
質問するときは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/
Twitter
https://twitter.com/cakephp
Facebook
https://www.facebook.com/CakePHP

■日本語公式
http://cakephp.jp/
フォーラム
http://cakephp.jp/modules/newbb/


※前スレ
http://kanae.2ch.net/test/read.cgi/php/1393661004/
0334nobodyさん2015/03/15(日) 22:01:54.15ID:???
>>333
自分ならusersに会員タイプ判断用のtypeフィールド追加して、その値によって動的にcontainさせる
hasoneアソシエーション自体は三つとも設定しておく

あと実際の運用でこの程度のフィールド数なら
タイプごとにテーブル分けなくてもいい気がするけど
省略してるフィールドが多いならこのテーブル構成でいいと思う
0335nobodyさん2015/03/16(月) 08:32:28.20ID:???
3を触ってみてるんだけど、複数のフォームから送信されたデータをエンティティに変換する方法がよくわからない
newEntities()で一発変換できるって書いてたんだが、それだとformのcreateには何渡せばいいんだ?まずnewEntityしたのを渡してからpostが飛んできたらpatchEntitiesって感じにすると返り値が変な配列になるし
03363332015/03/16(月) 10:52:24.28ID:???
>>334
やっぱりContainする方法がベストですかね。ありがとうございます。

あと、省略しているフィールドは多いですね。
1テーブル20ぐらいありますし、後に増える可能性もあります。
パスワード再設定用のテーブルや退会した理由をを保存するテーブルなど
ユーザー+共通テーブルがいくつかあるため、分ける形を採用しました。
03371/22015/03/16(月) 14:25:07.97ID:???
findの際の遠いアソシエーションでのconditionsについて質問です。

◆ Model
-------------------------
AAncestor
BAncestor
AParent
BParent
Item

◆ Association
-------------------------
AAncestor hasMany AParent
AParent belongsTo AAncestor
AParent hasMany Item
BAncestor hasMany BParent
BParent belongsTo BAncestor
BParent hasMany Item
Item belongsTo AParent
Item belongsTo BParent

◆ 目的
ItemsをAAncestorとBAncestorで絞り込みたい

続く
03382/22015/03/16(月) 14:26:08.03ID:???
$this->Item->find('all', array(
'conditions' => array(
'AAncestor.id' => 1,
'BAncestor.id' => 1
)
));

上記のようにすると、SQLエラーが出ます。
=> Error: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'AAncestor.id' in 'where clause'

当面の解決策として
$this->Item->find('all', array(
'conditions' => array(
'AParent.a_ancestor_id' => 1,
'BParent.b_ancestor_id' => 1
)
));
とし、それぞれ祖先ではなく、親のforeign_keyにて対応しています。

例えばconditionsに [AAncestor.name, BAncestor.name] を使いたい場合
一度それぞれでfindを走らせIDを取得することで一応は解決しましたが、
あまりスマートに見えませんし、更に離れたアソシエーションだと難儀しそうです。

上手いやり方もしくは根本的な考え方の違いがあるのでしょうか?
シンプルそうなのに検索しても解決策がみあたらず、困っています。

よろしくおねがいします! 👀
0339nobodyさん2015/03/16(月) 18:24:40.64ID:femzn5eL
「掲示板(メイン)」があって、「メッセージ(サブ)」
という関係性の時、メッセージを追加・編集する時に
どういうコントローラー・アクションにすればいいか悩んでいます。

A)メッセージ用のコントローラーを作り、掲示板IDを持ちまわる
/messages/index/bbs_id:1
/messages/add/bbs_id:1
B)掲示板のアクションに追加する
/bbs/message/bbs_id:1
/bbs/message_add/bbs_id:1
/bbs/message_edit/bbs_id:1&message_id:1

どちらにしろメッセージを投稿する時はbbs_idを保持しなければいけないので、
Aパターンでも良い気がしますが、Bの方が関係性は明確です。

どの形で良いかご意見ください。
0340nobodyさん2015/03/16(月) 23:44:21.41ID:L8XNWzC1
>>337-338
1個先のアソシエーションで条件指定する場合はJOINしてるから
そのままのconditions指定でいけるけど
2個先以上のテーブルは別のSQLを投げて情報をとってくるので
そのままconditionsに条件指定しても取ってこられなかったはず

cakephp contain deep associations
cakephp conditions deep associations
とかでググると解決策出てくる

>>339
ルーティングとコントローラー/モデルを切り分けて考えた方がいい
BBSという機能を実装したいのなら、まず親のTopic(スレッド)と子になるComment(レス)を想定して
TopicsController / TopicModel
CommentsController /CommentModel
とかを作って、それぞれにindexとかaddとかeditを実装する
(名前は別にbbsとmessagesでもいいけど)

最終的にユーザーに見せたいURLとかSEO的に設定したいURLがあるなら
ルーティングで
/bbs/add/topic_id:1
/bbs/topic_id:1
/bbs/topic_id:1/message_id:1
/bbs/message/edit/message_id:1
とかで好きなURLでアクセスできるようにするのがいい
03413392015/03/17(火) 00:48:50.89ID:???
>>340
>ルーティングとコントローラー/モデルを切り分けて考えた方がいい

という一文でハッとしました。
確かにURLはルーティング次第でどうとでもなりますよね。
1つのコントローラーでまとめるのではなく、
シンプルに目的に応じたコントローラー・アクションを作ります。

ありがとうございました!
0342nobodyさん2015/03/19(木) 14:00:57.78ID:???
ビッ○カメラ札幌店の副店長の佐藤伸弦が暴行事件が起きていた

佐藤伸弦 佐藤伸弦 佐藤伸弦 佐藤伸弦 佐藤伸弦

佐藤伸弦 佐藤伸弦 佐藤伸弦 佐藤伸弦 佐藤伸弦

佐藤伸弦 佐藤伸弦 佐藤伸弦 佐藤伸弦 佐藤伸弦

佐藤伸弦 佐藤伸弦 佐藤伸弦 佐藤伸弦 佐藤伸弦

佐藤伸弦 佐藤伸弦 佐藤伸弦 佐藤伸弦 佐藤伸弦
0343nobodyさん2015/03/20(金) 01:10:50.26ID:ScoidpU5
エクストリムサーバを使っています。
現在

php で mkdir コマンドを実行してもディレクトリがなぜか
作成出来ません。

mkdirの戻り値が false になってしまいます。

何が原因なのでしょうか?
0344nobodyさん2015/03/20(金) 14:15:11.15ID:???
>>332
元のソースを追っかける癖をつけとくと捗るぞ
マニュアルでピンと来なくてもソース見れば、なーんだってことは良くある
03453392015/03/20(金) 16:27:02.68ID:fjnzAr64
Cakeの命名規則ってどこまで忠実に再現してますか?

Class名をキャメルケース、関数をキャメルバックで書くのは分かるのですが、
変数もキャメルバックで書くのは抵抗があって、
スネークケース($foo_bar)にしています。
0346nobodyさん2015/03/20(金) 23:35:07.93ID:???
>>343
権限

>>345
2系まではわりと適当だけど3系になってからPSR準拠になってるし少しずつ従っていった方がいいよ
俺はmysqlとかjsとの連携を考えるてずっと変数はスネークケースでやってきたけどそろそろ潮時かもしれん
phpcsでたくさん例外作るのも面倒だしね
でもインデントがスペース四つなのは未だに納得できない
03473452015/03/21(土) 01:58:13.22ID:???
>>346
1つのサイト作るのに色んな命名規則使うから悩みますよね。
CSSやJavascriptでもそれぞれ必要とされる規則は違うし。

ただ、変数にキャメルバックはどうも違和感があるんですよね・・・
キャメルバックにする分、文字数が減って見やすくなるとは思うんですが。
あと、インデントはスペース4つではなく2つにしてます。さすがに4つは長いかと。

という事を考えると、色々とCakeの規則から逸れてしまいますね・・。
0348nobodyさん2015/03/21(土) 14:40:09.68ID:???
自分の経験で規則から逸らしたくなるようじゃ
経験が足りないってことなんだよw
0349nobodyさん2015/03/21(土) 14:58:23.21ID:???
経験があるからこそ規約に疑問を持つのだろう
PSR通りにコーディングするのは今日からプログラム始めた素人にもできる

みんなが疑問持ちながら好き勝手に書くと良くないから
グループ開発の指針としてコーディング規約があるにすぎない
0350nobodyさん2015/03/21(土) 15:14:19.63ID:???
経験が「ない」からじゃなくて「足りない」からね

大勢が使う何かの規約を責任持って作ったことがあれば
それからわざわざ逸そうなんて思わないってこと
0351nobodyさん2015/03/21(土) 16:42:25.47ID:???
4スペースで見辛いって、どんなコードを書いてるのか気になる
0352nobodyさん2015/03/21(土) 20:42:49.66ID:???
>>350
グループ開発ならコーディング規約は大切だけどcake使ってるからcakeの規約を必ず採用しなければいけないわけじゃないと思うけどな
もちろんコアは必ず規約に従うべきだけどapp以下は規約推奨という程度だよ

>>351
タブインデント支持なんだろ
0353nobodyさん2015/03/22(日) 00:28:55.54ID:???
CakePHPを始めたばかりです。ちょうど知りたかった内容なので.


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:???
>>353
cakephpcsは最新版だとcakephp3の規約準拠なので2系使ってる人はこっちの古いバージョン使ってね
ってREADMEに書いてあった
cakephpは2系はタブインデントで3はスペースインデントに変わってる
03553532015/03/22(日) 05:08:44.10ID:???
>>354
感謝です。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:???
3.0の日本語版はほとんどのところが未翻訳か2.0の内容のままだし
正式リリースもまだだしそんなもん
0357nobodyさん2015/03/22(日) 16:16:39.32ID:???
お客様根性って奴ね

Found an issue? Submit a correction on GitHub
0358nobodyさん2015/03/24(火) 21:25:37.75ID:???
いつの間にか3のstableでてるやん
0359nobodyさん2015/03/24(火) 22:27:39.16ID:???
>>358
ここまで違うと3にするか、他に乗り換えるか迷うよね
0360nobodyさん2015/03/24(火) 22:51:32.29ID:???
新規案件もしばらく2だろうなー
今回は1から2のインパクトより大きい
0361nobodyさん2015/03/25(水) 10:40:02.23ID:???
実際、まだ1.3で稼働しているサイトも一杯あるだろうし、
新規案件とはいえ、なかなか変えられないわな
0362nobodyさん2015/03/25(水) 22:03:40.40ID:nkhbQP1f
Bbs→(belongsTo)→User→(hasOne)→Profile

こういう関係のテーブル構成で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:???
362です。自己レスですけど、joins使うのが一番みたいですね。
全部アソシエーションで出来たらと思ったのですが無理なので、
joinsを使って対応します。
0364nobodyさん2015/03/26(木) 21:56:46.58ID:???
確認画面などで出力する時、h()でエスケープしてます?
それとも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:???
cake3でだいぶ良くなったらしいね
Laravelが流行だどうこう言ってますけど

結局、cakeとcodeigniter学んでおけばいいっしょ
0369nobodyさん2015/03/27(金) 22:21:52.83ID:/GK6nVHi
日本時刻が【2015/03/27 22:18】で海外サーバ(Lunarpages)で
PHPを実行し、日本時刻を表示しようと以下のコードを書きました。

【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:???
過疎っていたのでPHP繋がりでここに質問しました。
教えてください。。。
0372nobodyさん2015/03/28(土) 11:31:26.66ID:???
そのサーバーのphpのタイムゾーンを表示させる
そのサーバーの現在時刻を表示させる
時刻計算してGMTを表示させる
時刻計算してJSTを表示させる

この手順でうまくいかなければ諦めろ
はい、この話は終わり
0373nobodyさん2015/03/28(土) 15:51:44.79ID:???
>>372
試してみます。
0374nobodyさん2015/03/28(土) 15:56:09.33ID:???
jQueryしか使っていないのにJavaScriptをcromeでデバッグすると
init.js というスクリプトがデバッグされていますが
なぜこんな自分で読込もしていない様なスクリプトが読み込まれているのでしょうか?


※javascriptのスレッドが見つからなかったので人が一番多そうなここで
質問させてもらっています。
0375nobodyさん2015/03/28(土) 17:42:04.24ID:???
Web制作板の専門スレの方が人が多いよ。

はい、この話は終わり
0376nobodyさん2015/03/29(日) 01:04:03.61ID:???
なんか、後々「CakePHPとかいうオワコンフレームワークを使ってるやつらはこの程度の質問にも答えられない低能だったんだなw」
みたいな煽りをするための材料作りに来たような感じ
0377nobodyさん2015/03/29(日) 16:04:33.31ID:???
Cake3、悪くはないんだけど一年半くらい遅かったなという感じ
0378nobodyさん2015/03/29(日) 19:57:31.43ID:???
どういう意味?
0379nobodyさん2015/03/29(日) 20:26:31.18ID:???
どうせDDD信者だろ
0380nobodyさん2015/03/30(月) 23:11:34.93ID:???
共用サーバでServer Queenをかりたのですが php が使えません。。。

どうすればPHPが使える様になりますか?

マニュアルが古すぎて設定が出来ないです。
http://www.serverqueen.jp/cs/startup/zoomimg/shared_php01.html
0381nobodyさん2015/03/30(月) 23:42:44.98ID:???
スレ違いというか板違いというか2chで聞くことじゃない
なんで最近こういうのが増えたんだ?
0382nobodyさん2015/03/31(火) 02:02:19.81ID:???
ひそかにドッ○インストールとかのせいだとおれは思ってる
いまのとこ誰も賛同してくれてないけどな
でもあると思うんだよなぁ
0383nobodyさん2015/03/31(火) 05:51:02.97ID:???
>>382
なんで関係あるの?
0384nobodyさん2015/03/31(火) 10:08:31.38ID:???
>>382
俺は春だからと思うよ
0385nobodyさん2015/03/31(火) 11:14:53.43ID:???
>>383
1:初心者がタダでプログラミングを学ぼうとする
2:ドッドインストールというサイトを見つけて勉強する
3:しかし、基本的なことをちょっと紹介してるだけなので、何が必要か分からない。
4:知恵袋や教えてgooで質問するのは手間がかかる
5:「そうだ!2ちゃんねるなら会員登録が必要ないし、大勢居るから教えてくれるだろう!」
6:適当に板名を見てWebProg板を探すも、どのスレに質問していいかわからない
7:「ま、スレタイにPHPってついてるし、上の方にあるからこのスレでいいやろ」

って感じだと予想
0386nobodyさん2015/03/31(火) 11:25:28.40ID:???
>>385
なるほどそういう意味か
0387nobodyさん2015/03/31(火) 15:33:31.65ID:???
schooとかドットインストールとか
動画学習系のあるけど、やってみてわかったけど動画学習は効率悪い

気分的にやった感はすごいあるけど
0388nobodyさん2015/03/31(火) 15:53:01.22ID:???
10年ぐらい前、WAVEというスクールに40万ぐらいだして通ってたが、
そこが作ったDVDを再生しながら同じように入力する程度で、全く身に付かなかった。
あれなら3000円ぐらいの初心者本買って、その通り作る方がマシだわ
0389nobodyさん2015/04/01(水) 00:49:18.74ID:???
ドットインストールの管理人すごいよな
知識豊富すぎだろ
0390nobodyさん2015/04/01(水) 10:35:00.70ID:???
そりゃー >>389 より知識は↑だろ。
0391nobodyさん2015/04/01(水) 10:37:36.77ID:???
1テーブル(1登録画面)に入力箇所が30ぐらいあるのですが、
毎回、動作テストの度にフォーム入力していくので面倒です。

こういう時ってCakeのテスト機能を使うのでしょうか?
いまいち、テストの使い方がよくわからないので教えて下さい。
0392nobodyさん2015/04/01(水) 17:00:09.59ID:PiSv1kDp
↑
馬鹿まるだし
0393nobodyさん2015/04/01(水) 21:48:03.44ID:PiSv1kDp
テストやでぇ〜

aiueo<br><br>
,
&
0394nobodyさん2015/04/01(水) 22:47:15.60ID:???
>>391
手を抜きたいのならフォームのオートコンプリート系アドオン
ちゃんとやるならテスト
0395nobodyさん2015/04/01(水) 23:37:29.02ID:???
>>394
ちゃんとやりたいのですが、どうやってテストを作ればいいか分かりません。
せめてググり方だけでも教えて下さい
0396nobodyさん2015/04/01(水) 23:56:21.88ID:PiSv1kDp
>>395
とりあえず舌をおもいっきりかめばいいと思うよ
0397nobodyさん2015/04/01(水) 23:56:38.03ID:???
>>395
cakephp phpunit
0398nobodyさん2015/04/02(木) 00:50:20.30ID:???
>>396
おもいっきり噛んだら死ぬだろwwwww
0399nobodyさん2015/04/02(木) 04:06:35.84ID:???
>>398
その方がいいとおもうんだよ。
0400nobodyさん2015/04/02(木) 10:32:15.69ID:???
>>399
分からないことを教えてっていうだけで舌噛めとかwwwwww
0401nobodyさん2015/04/03(金) 18:37:35.13ID:???
パンくずとかMETAの内容をビューから設定するのって、ちょっと違和感ある。
かと言ってコントローラーで設定するのも悩む。
0402nobodyさん2015/04/03(金) 22:48:02.25ID:???
>>401
構造だけコントローラーで渡して表示はビューでやればええやん
0403nobodyさん2015/04/03(金) 23:32:55.11ID:???
ディスク容量の制限の無いオススメのサーバはどこですか?
海外サーバを希望です。
0404nobodyさん2015/04/03(金) 23:37:54.15ID:???
>>402
どういうこと?例えば

ホーム > ネット関係 > WebProg

だとして、この流れをコントローラーから配列を作成してsetし、
ビューでヘルパーから読み込むとか?(俺はそうしてた

でも、ページ毎のタイトルをDBで管理しない限りは、
コントローラーに直接書かなきゃいけないからなぁ
DB管理していないページもあるし。
0405nobodyさん2015/04/03(金) 23:53:39.12ID:???
>>404
そんな感じ
二階層までならコントローラー名とアクション名に準じたタイトルでパンくず作ってあげてもいいかも
それ以上の階層はdbなりconfigure使うしかないんじゃないかなー

>>403
AWSっていう海外サーバーならお金払えば払っただけ無制限にディスク使わしてくれるらしいよ
0406nobodyさん2015/04/04(土) 00:40:37.59ID:???
>>405
404だけど、やっぱりそうか。ページ名をどこで管理するかが問題なんだよなぁ。
DB使うと、簡単なページを追加した時でも、DBに追加する必要もあるし。
0407nobodyさん2015/04/04(土) 15:50:08.18ID:???
Cake3のお勉強でもしようと思ったんだけど
インストールするのにComposerとかみんな使ってんの?
色々知らないことが増えてる…
0408nobodyさん2015/04/05(日) 01:16:56.44ID:???
cake2で構築してるシステムを今さら3にアップするのは
やっぱりリスキーだよね?
0409nobodyさん2015/04/05(日) 02:17:41.58ID:???
趣味なら良いと思うが、運用中で、しかも会員サイトなら他人に迷惑かかるから止めたほうが良いと思う
0410nobodyさん2015/04/05(日) 04:14:01.43ID:???
既存のcake2システムをcake3にアップか
おれならお断りする案件だな
0411nobodyさん2015/04/05(日) 15:06:11.90ID:???
>>409 >>410
いや、結構ガチガチの会員サイト


安定しているシステムなのにこれをcake3に置き換えてボコボコになりそうで怖いです。

VB6.0→VB.net へのリプレースみたく大変な事になりそう。
0412nobodyさん2015/04/05(日) 17:50:15.66ID:???
ボコボコになるだろうな。情報も少ないし、困った時も解決しづらい。
0413nobodyさん2015/04/06(月) 12:01:41.30ID:???
joinsで直接結合すると、afterFindって効かないんですね。(Cake2系で)
プライマリーキー以外で結合する必要があるから
アソシエーションじゃなくてjoinsに書いてるけど、その点だけが困る。
0414nobodyさん2015/04/06(月) 21:23:28.83ID:???
>>413
updateallするんでなければpkeyを動的に切り替えた方が楽だよ
0415nobodyさん2015/04/06(月) 21:52:45.80ID:???
>>414
結合させるモデルの両方共プライマリーキーじゃないんです。
なので、動的切替は無理かと。
0416nobodyさん2015/04/07(火) 21:18:58.02ID:???
>>415
いけるいける
primarykeyとforeignkey切り替えれば
まあ素直にjoinした方が見通しいいかもしれないけど
0417nobodyさん2015/04/08(水) 10:25:46.98ID:???
>>416
どうやっていけますか?

User→Profile
User→Bbs
Bbs→Entry

というモデル設計で、BbsとEntryをhasOneで繋ぎつつ、
Bbsのuser_idとProfileのuser_idを結合したいのですが。
0418nobodyさん2015/04/08(水) 22:50:18.86ID:???
>>417
そういう構成なら直接結合しないでUser経由して結合した方がいいよ
深い結合については>>340あたりを参照
0419nobodyさん2015/04/09(木) 00:21:50.88ID:???
>>418
分かりました。難しいですが勉強します。ありがとうございました。
0420nobodyさん2015/04/09(木) 00:40:19.67ID:???
>>418
413=415=417=419ですが自己レスです。
joinsを使ってもUser経由で結合してもそんなにSQLの回数は変わりませんね。
強いて言うなら、$data['User']['Profile']['name'];
みたいに多次元配列になるのが煩わしいだけでしょうか。
joinsの場合は、$data['Profile']で書けますが。

よほど深い階層になる場合や複雑なSQLでない限り、
極力、joinsは使わないようにします。色々と教えていただきありがとうございました。
0421nobodyさん2015/04/09(木) 01:19:01.76ID:???
414,416,418ですがいくらなんでも行動と理解が早すぎると思いました
0422nobodyさん2015/04/09(木) 14:29:29.47ID:???
多重配列になるのが嫌なら、それこそafterFindで調節する手もあるな。
どちらにしろフレームワーク使うんだから、後々修正しやすい方がいい
0423nobodyさん2015/04/13(月) 14:41:46.28ID:kiqQUtSe
会員専用ページ(マイページ)の設計について悩んでいます。

core.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:???
>>423
editとかのページはauthコンポーネントのallow使って制御した方がいい
detailをprefixで振り分けてるのは悪くはないけどそこまで表示内容に違いがないのならprefix使うまでも無い気がする
0425nobodyさん2015/04/14(火) 11:10:39.83ID:???
>>424
つまり、わざわざmypageというprefixやコントローラーを作るのではなく、
各アクションにアクセス制限(authのallow)をするだけでいい

ってことですかね?それが一般的ならそうしますが、
どうもログイン後のページって、adminとかmypageを付けるような気がするんです。
決まりがあるわけじゃないでしょうが、ググってもそういう情報が多くて・・・
0426nobodyさん2015/04/14(火) 11:13:26.07ID:???
あと、>>423の以下の例は間違いでした。

例)会員ではない人が日記を閲覧
/diaries/detail/1 →DiariesControllerにmypage_detailを追加
↓
/diaries/detail/1 →DiariesControllerにdetailを追加
(誰でも閲覧できるから、prefix必要ないです)
0427nobodyさん2015/04/14(火) 22:26:08.70ID:???
>>425
規模が大きくなるのならログイン必須であることを明示するためにもprefixあった方がいいかもだけど
一人で小規模でやるなら分けるほどでもない
0428nobodyさん2015/04/14(火) 23:14:54.67ID:???
>>427
どの程度が「規模が大きい」から図りかねるのですが、
モデルが50ぐらいあるなら大きいって認識でいいですかね?
前述した通り、「一般的なベターなやり方」を教えて欲しいのですが・・・
0429nobodyさん2015/04/14(火) 23:40:26.26ID:???
>>428
モデルというよりコントローラーの数によるだろうけど、それだけでかけりゃ分けた方がいいよ

一般的にベターとか言われも、例えば規模が本当に小さければcakephpなんて使わずに
phpの1ファイルで実装した方がいい場合もあるわけだし
規模感無視して一般的な話をしようとしても無理だよ
0430nobodyさん2015/04/15(水) 00:06:47.65ID:???
今、cakeを勉強中なのですが、他のフレームワークを今まで使ったことがないのでわからないので検討違いかもしれないですが、
cakeのモデルって使い勝手悪いのですが、これがフレームワークでは普通なのでしょうか?
アソシエーション定義してもrecursiveの深さを検索するとかこんなもの使い道あるのでしょうか?
テーブルにただマッピングされてるだけのsql発行クラス以上の使い方があるのでしょうか?
っていうか、このモデルというのは使い勝手がいいのですか?
0431nobodyさん2015/04/15(水) 00:22:06.23ID:???
>>430がRDBMSさえも理解してない素人なのか自前でORマッパーを作りかねない玄人なのか判断つきかねる
0432nobodyさん2015/04/15(水) 00:30:30.11ID:???
>>429
フレームワーク使うのに、小規模ってことは無いと思うんです。
例えば「お問い合わせフォーム作りたいから使おう」とか「会社紹介ページ作りたいから使おう」
ってレベルの人がフレームワークに立ち寄らないと思うんです。

それより規模がでかくて数々のプラグインや便利ツール(ヘルパー・コンポーネント等)
があるからフレームワークを使おうと思うわけで。

そしてもうひとつの利点である「開発方法を定める」ってのもあると思うんです。
命名規則やMVCの考え方など、1人でやってたらその都度変わりそうな要件も
フレームワークを使うことで統一する事が出来るし、それは後の改修のしやすさに繋がる。

だからこそ「一般的でベターな方法を追求する」事ってメリットがあると思うんですよ。
そこにメリットが無かったり、「人それぞれじゃね?」ってなると、
それこそオレオレフレームワークと変わらない気がします。

>>430がフレームワークを使おうと思ったキッカケも、
「自分一人の考えで済ませたくないから」じゃないですかね。
そして過去の自分の経験・考えがあるからこそ、
「Cakeのモデル定義は使い勝手が悪い」という判断ができるわけで。

だからやっぱり「自分の好きな様にやれよ」って言われても、しっくり来ないんです。
0433nobodyさん2015/04/15(水) 00:47:12.63ID:???
レンタルサーバでFTP接続しか受け付けないサーバに
TeraTermで接続するにはどうすれば良いでしょうか?
■ このスレッドは過去ログ倉庫に格納されています