トップページ⇒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/
0263nobodyさん2015/02/13(金) 12:47:36.01ID:trE+wwbV
>>261
cakePHPオリジナルでは出来ないですか?
0264nobodyさん2015/02/13(金) 13:27:08.47ID:???
公式ドキュメントくらい読まな
http://book.cakephp.org/2.0/ja/models/retrieving-your-data.html#id5

あと、
name = 'A' and name = 'B'
は常にfalse
0265nobodyさん2015/02/13(金) 16:25:24.50ID:???
>>262
俺女だけどしても良いわよ。
0266nobodyさん2015/02/13(金) 20:17:11.72ID:hnonnNdg
>>264
OK
0267nobodyさん2015/02/14(土) 12:22:29.76ID:riWWWAwO
ユーザーテーブル(users)の設計で相談です。cakephp2系です。
ログインする時、「ユーザー名+パスワード」と「メールアドレス+パスワード」の2パターンが主に使われると思います。
管理人は前者の方法でログインし、一般ユーザーは後者でログインします。

usersテーブルが
id|username|password|email|role|created|modified
だとして、ユーザー名を使わないログインの場合は単純にusernameをNULLにして登録すれば良いんですかね?
それか、usernameにemailの値を代入するべきですかね?
でもその場合、文字数制限のバリデーションエラーが起きる気がします。
(それはroleの分類で回避すればいいことですが)

それか、usersテーブルひとつにまとめるのではなく、分けるべきでしょうか。
どのようにするのが良いかご意見お願いします。
0268nobodyさん2015/02/14(土) 12:58:10.84ID:???
>>267
ACLとかの権限関係をきっちり作るなら
あえて管理人だけ特別扱いする必要は無いのでは
02692672015/02/14(土) 14:04:25.83ID:???
>>268
ACLできっちりじゃなくて、単純にログイン方法を分けたいだけなんです。
0270nobodyさん2015/02/14(土) 17:22:20.07ID:???
>>269
俺ならメールアドレスパスワードに統一。
別に管理人ログインフォーム作成。
管理人フォームにはユーザー名とパスワード。
って感じにする。
02712672015/02/14(土) 17:33:06.70ID:???
>>270
はい。自分もそのような画面設計なのですが、>>267でも質問しました通り、
テーブルをどういう構造にしたらいいか教えてほしいと思いまして・・。
0272nobodyさん2015/02/14(土) 18:20:44.22ID:???
>>271
ヌルでいいよ。
名前のところにメールアドレスなんて入ってたら
次触る人がナンジャコリヤァアってなる。
02732672015/02/14(土) 20:15:38.73ID:???
>>272
分かりました。ではテーブル設計自体は問題無さそうですね。ありがとうございます
0274nobodyさん2015/02/14(土) 21:07:46.13ID:???
こいつのテーブル もうヌルヌルだぜ
0275nobodyさん2015/02/14(土) 21:59:10.14ID:???
フォーム分けるんだったら、テーブルも分けちゃえばいい、ってのはなしか?
0276nobodyさん2015/02/15(日) 00:53:41.16ID:???
ありだと思うよ。そもそも管理用と一般用では用途が違うからね。
0277nobodyさん2015/02/15(日) 14:50:48.71ID:1brRf+Il
cakePHP2を使っています。
ヘルパーを使ってボタンを出力しようと以下のコードを書いたところ
なぜかエラーが出てしまいます。

array() の部分を省いてボタン名だけの指定であれば動きます。
cakePHP2ではボタンにID、NAME属性を付ける事が出来ないのでしょうか?

[コード]
echo $this->Form->button("Edit",
array(
"id" => "id_hoge",
"name" => "name_hoge",
),
);

[エラー内容]
Parse error: syntax error, unexpected ')'
0278nobodyさん2015/02/15(日) 16:24:05.11ID:???
モデルとルールの違うGETパラメーターのバリデーションってどうしてる?
例えばモデル的には日付がdateカラムに入ってるんだけど
ユーザーが検索するときはyear:2014とか年号だけ指定して検索できなくて
yearが1970から2015までの値以外ならバリデーションエラーをだしたい時とか
ルールが同じならコントローラー側で動的にバリデーター呼び出すだけで楽なんだけど

>>277
配列なら最後に余計なカンマ入れられるけど
引数は最後に余計なカンマ入れるとエラーになる
02792772015/02/16(月) 02:27:00.96ID:vJjLQ3Jt
>>278
ありがとうございます!出来ました!!
0280nobodyさん2015/02/18(水) 19:23:06.50ID:4aEt4KO0
初心者なんだけど、公式ドキュメントのここ(http://book.cakephp.org/3.0/en/controllers.html)のこのコード

// src/Controller/RecipesController.php

class RecipesController extends AppController
{
public function popular()
{
$popular = $this->Recipes->find('popular');
if (!$this->request->is('requested')) {
$this->response->body(json_encode($popular));
return $this->response;
}
$this->set('popular', $popular);
}
}
の、if (!$this->request->is('requested'))って条件の「!」いらなくない?動かしてみたらやっぱりない方がちゃんと動くし。
ここで言ってもしょうがないんだろうけど、自分の考え方が正しいのか不安だから聞きたかった
0281nobodyさん2015/02/18(水) 22:49:27.06ID:???
バージョン3ってRC2にもなってたんだ
0282nobodyさん2015/02/19(木) 00:34:03.06ID:???
次で正式版みたいだね
0283nobodyさん2015/02/19(木) 01:12:24.31ID:???
根本的に変わってるから3.1までは様子みたい
0284nobodyさん2015/02/19(木) 04:45:09.33ID:???
>>283
ここまで変わると、他の言語に乗り換えるのもありだよなあ
0285nobodyさん2015/02/19(木) 17:29:51.85ID:???
cakePHP2を使っています。
コントローラでpaginateを使いたいのですが、
ビューに引き継ぐと、なぜか「order」が効いていません…SQLにも「ORDER BY」が出ていません
インターネットでいろいろ調べて試してみたのですが、結局うまく動かなかったです…
下記名前はダミーですが、こんな感じで書いているのですが、どこがおかしいのでしょうか?
どなたかおわかりの人教えてください><
もし下記だけじゃ情報が足りなかったらご指摘ください

≪コントローラ部分≫
$this->employee->virtualFields['group_age'] = 0;
$this->paginate = array('employee' => array(
'group' => array('employee_age','gender'),
'fields' => array('employee_name','gender','count(employee_name) as employee__group_age'),
'order' => array('employee__name' => 'desc'),
'limit' => 20 ,
));

$data = array('paginate' => $this->paginate('employee') );

$this->set("data",$data);
0286nobodyさん2015/02/19(木) 20:21:28.79ID:???
>>285
ごめんなさい
'order' => array('employee__name' => 'desc'),
この部分が、
'order' => array('employee__group_age' => 'desc'),
でした

よろしくお願いします
0287nobodyさん2015/02/19(木) 22:14:32.35ID:???
なんでgenderだけプレフィックスなしなんだろう……紛らわしいな
原因を断定はできないがとりあえず目についたところとしてはバーチャルフィールドの名前あってなくね?
1行目group_age、4,5行目がemployee__group_ageで揺れてんじゃん


あとこの4行目の配列の一要素目 'employee_age'じゃねーの?
Group Byに指定してない列は集計関数かませずにSELECT句にそのまま使えないでしょう
名前ダミーにすんのはいいけど正確に変換してくれよ
0288nobodyさん2015/02/20(金) 10:08:11.20ID:???
>>287
正確じゃなくてすみません

ありがとうございます、試してみます
0289nobodyさん2015/02/20(金) 19:16:31.11ID:mKx/fp25
PHPで検索した結果を元にHTMLファイルを作成しています。
生成したHTMLのコード上ではしっかりと

【test.html】
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type">

と記述しているのですが、ローカルにダウンロードして
サクラエディタで test.html を開くと右下に「SJIS」と表示されてしまいます。


【php側】
$html = {htmlコード;
file_put_contents("test.html", $html);


HTMLを生成しているPHP自体の文字コードも UTF-8 です。
なぜSJISになるのでしょうか?
0290nobodyさん2015/02/20(金) 22:35:03.17ID:???
CakePHP 2.6.1でCakeDCのSearch Plugin使おうとしてて
readmeに従ってつくったけど検索が機能しないです
parsedParams()をvar_dumpしてみると空だし
urlの引数が/id:10/user:hoge/とかの形式じゃなくて
?id=10&user=hogeとかになっちゃってるみたい
バグかなぁ… 英語でググったり何度かソース見返すけどわからないです…
この現象の原因わかる方いますか?
0291nobodyさん2015/02/21(土) 09:54:25.08ID:???
>>290
namedからqueryにデホルトの仕様が変わったんだよ
0292nobodyさん2015/02/21(土) 14:39:47.92ID:???
>>291
そうなんだ!動かない原因は別なのか…
もう少し探ってみます
ありがとうございまつ
02932892015/02/21(土) 14:53:33.16ID:gR4qq4TK
誰か教えてください。
0294nobodyさん2015/02/21(土) 15:38:23.20ID:???
エディタの問題じゃねえの?
02952892015/02/21(土) 15:44:22.51ID:gR4qq4TK
>>294
ありがとうございます。
解決しました。
0296nobodyさん2015/02/22(日) 17:44:38.17ID:???
composer 使ってる人ってこまめにアップデートしてるの?
下手にバージョン上げてもバグる原因増えるだけだと思いやってないんだけど。
0297nobodyさん2015/02/22(日) 19:27:47.08ID:???
何の為のバージョン指定だ
0298nobodyさん2015/02/22(日) 21:39:50.80ID:???
投稿フォームと投稿一覧が同じページ内にある掲示版的なものを作成しています。
入力欄が問題なく埋められていた場合、投稿フォームの「投稿」ボタンを押すと、コントローラーのaddが呼ばれてその投稿が追加されindexにリダイレクト、という動きはなんとかできたのですが、
入力欄の入力をバリデーションして不正なものがあった際に、indexのページ内の投稿欄にそのことを示すメッセージを表示するようにする方法がわかりません。
唯一思いついたのは、addのビューを投稿欄のみにしておいて、indexのビュー内からiframeで呼ぶことくらいです。
どなたかご教示頂けると幸いです。
0299nobodyさん2015/02/23(月) 00:25:29.64ID:???
>>298
投稿欄部分をajaxで書き換え
0300nobodyさん2015/02/23(月) 01:14:35.54ID:???
>>299
ありがとうございます。調べるうちに、バリデーションエラーの内容をセッションに書き込んでリダイレクト先でセッションから読み出して代入、という方法も見かけたんですがこっちの方がずっとスマートですね。
というか結果的にcakephp関係ない質問になってしまって申し訳ないです。
0301nobodyさん2015/02/23(月) 08:49:31.17ID:???
>>300
俺はいつもindexに書き込み処理をつけるね。
そういう場合。
0302nobodyさん2015/02/23(月) 12:35:39.33ID:???
MVCについてイマイチ自分が理解してないのもあって、てっきりcrudの4機能は別のメソッドに書かなきゃならないものなのかと思っていましたが、そうすれば全部解決なんですよね。
実は今回やってるものが非常に特殊なケースで、IE6対応も切り捨てられないため、ajaxでやろうとして困っているところでした。
0303nobodyさん2015/02/23(月) 13:57:46.86ID:qtvdKJqN
>MVCについてイマイチ自分が理解してないのもあって、
馬鹿
0304nobodyさん2015/02/23(月) 14:33:46.89ID:3dGVU3d0
文字コードをUTF-8からSJISに変換したつもりなのですが
以下コードを実行すると、なぜか取得した文字コードが空文字に
なってしまいます。何が原因なのでしょうか?


【コード】
//文字を設定
$search_word = "ドラクエ";

//デフォルト
$char_code = mb_detect_encoding($search_word);
echo "char code:[{$char_code}]<br>";

//文字コードを変換 UTF-8 ⇒ SJIS
$search_word = mb_convert_encoding($search_word,"SJIS","auto");
$char_code = mb_detect_encoding($search_word);
echo "char code:[{$char_code}]<br>";


【実行結果】
char code:[UTF-8]
char code:[]
0305nobodyさん2015/02/23(月) 14:59:54.92ID:???
>>304
autoじゃなくてUTF8を指定すべきじゃないかな。
あとはphp.iniで指定してる内部文字エンコーディングとかでも変わってるくるからね。
0306nobodyさん2015/02/23(月) 15:07:53.87ID:3dGVU3d0
>>305
UTF-8 を指定してもダメでした。
0307nobodyさん2015/02/24(火) 21:03:39.17ID:???
cakephp形式のURL配列で
hoge/fuga/hoge2
まで指定したい場合はどうしたらいいんでしょう?
controller=>hoge,action=>fuga,のあと、hoge2にあたる部分の指定の仕方がどうにも見当たりません。
0308nobodyさん2015/02/24(火) 22:00:31.14ID:???
すいません、自己解決しました。
最後のhoge2に当たるところで数字を使っていたのがどうもよくなかったみたいで、文字列に変えたところ、actionを指定した後にカンマを打ってそのまま書くだけでうまく行きました。
でもコントローラからstrvalしてビューに渡してもなぜかビューではint扱いされるんですね。
0309nobodyさん2015/02/26(木) 17:58:39.07ID:36YMsn8X
2.5.8を使っています。Viewの場所をコントローラーで変更できないでしょうか?
/app/View → /app/webroot/templates

みたいに、Viewファイルが存在するディレクトリを変えたいです。
0310nobodyさん2015/02/26(木) 22:07:17.99ID:???
>>309
core.phpにビューのディレクトリ指定してる部分がある
0311nobodyさん2015/02/26(木) 23:30:44.40ID:36YMsn8X
>>310
bootstrap.phpにあった
App::build(array('View' => WWW_ROOT . 'templates/'));
を、コントローラーのbeforeFilter()に追加したら出来ました。
ありがとうございました。
0312nobodyさん2015/02/27(金) 01:42:29.56ID:YC5Ps1qe
echo mb_detect_encoding($str_output); ・・・�@
$str_output = mb_convert_encoding($str_output,"UTF-8","ASCII");
echo mb_detect_encoding($str_output); ・・・�A

文字列をUTF-8にコンバートしているのですが
上記コードを実行しても一向にutf-8になりません。


常にASCII が返ってきます。
何が原因なのでしょうか?
0313nobodyさん2015/02/27(金) 01:59:37.38ID:???
マルチバイト文字で試してる?
0314nobodyさん2015/02/27(金) 05:01:23.09ID:YC5Ps1qe
>>313
半角英数字です。
0315nobodyさん2015/02/28(土) 14:46:39.93ID:IfvfAmZV
海外のレンタルサーバでphpを実行したんですが
以下の様なエラーが出ます。

何が原因なのでしょうか?

UID of script is smaller than min_uid
0316nobodyさん2015/02/28(土) 14:56:54.33ID:IfvfAmZV
315
自己解決しました。
0317nobodyさん2015/03/02(月) 20:14:31.17ID:/EFmk8QS
助けてください。

value serverが糞過ぎです。

cronを設定しても動きません!!もしvalue serverで正常に動作させる方法が載っているHPを

ご存知の方がいらっしゃいましたら教えてください。
0318nobodyさん2015/03/02(月) 22:25:23.88ID:???
スレチ
0319nobodyさん2015/03/03(火) 07:45:40.08ID:???
>>317
どうせ設定ミスだからまず最初にローカルで動作確認してから
同じ設定をvalueserverに張り付けた方がいい
レンタルサーバーでいきなりcron動かすのは問題点特定しにくいから鬼門
0320nobodyさん2015/03/03(火) 09:37:28.36ID:???
環境構築面倒くさがってレンタル鯖でテストするやつもいるからなあ
今ならビルトインサーバで一発だし今回みたいなケースもxampp使えばすぐなのに
0321nobodyさん2015/03/06(金) 00:22:12.48ID:???
3.0のドキュメントって英語版もまだだいぶ不親切だな
saveallがやってた動きがどうにも再現できん、難しいこと全然やってないのになあ
0322nobodyさん2015/03/06(金) 01:05:40.10ID:???
cakephp1で動いてるサイトあるんだけど、機能を追加したい。
3ヶ月かけて作ったサイトなんだけど
2でリニューアルすべき?
みんなならどうする?
0323nobodyさん2015/03/06(金) 07:38:23.90ID:???
1と2や3は修正点多いから、コスト安くするなら1のままで機能追加したいかな、
CakePHP以外にもPHPのバージョンを5.x系の最新にする手間もあるし

バージョン上げるなら、3がRC版がリリースされたので3に上げたい、
だけど上げるとしても機能追加とバージョンアップ作業は別々にした方が安心、
同時だとCakePHP、PHPのバージョンアップ、機能追加とやる事多過ぎで混乱すると思う
0324nobodyさん2015/03/06(金) 10:32:09.44ID:???
>>323
ありがとうございます!
0325nobodyさん2015/03/07(土) 00:01:00.07ID:4wJwCx0B
すごいプログラミングを考えた!どうよ?
http://fox.2ch.net/test/read.cgi/poverty/1425651890/
0326nobodyさん2015/03/12(木) 11:53:15.78ID:???
独り事だけど、setFlashってめちゃくちゃ便利だな。
セッション使うから嫌って変数を作ってたんだが、setFlashだけで良いことに気づいた。
elementも指定できるから、処理が成功/失敗のHTMLを出力することも出来るし、ビューに無駄な箇所が減る。
0327nobodyさん2015/03/12(木) 14:39:44.54ID:???
リダイレクトさせるとデバッグしにくいから$this->flashばかり使っちゃってる
0328nobodyさん2015/03/13(金) 13:31:35.39ID:qp4/hKaL
Configure::write('Session.cookie', 'CAKEPHP');でクッキー名を指定できますが、
FooControllerのAuthでは'FooCookie', BarControllerのAuthでは'BarCookie'のように
クッキーの名前だけ分けたいのですがどこで指定すればよいのでしょうか。
お願い致します。
0329nobodyさん2015/03/13(金) 20:39:40.33ID:???
セッションクッキーをコントローラーで分けるというのはそもそもの実装方針が危うそうだが…
あえてやるなら各コントローラーのbeforefilterかな
0330nobodyさん2015/03/14(土) 12:38:08.43ID:???
これから新規で開発しようと思うんだけど
3使うのってまだ早いですかね?

公式ドキュメントも日本語訳まだ整備されてないですよね
0331nobodyさん2015/03/14(土) 15:21:12.60ID:???
cakephp使ったことないけど3系になったら
使ってみたいわ
0332nobodyさん2015/03/14(土) 17:04:29.47ID:???
ドキュメントが日本語になってないことより、ドキュメントに書いてないことを調べる術が少ないのが困るな
ドキュメントに書いてないことが多いのはいつものことなんだけども
0333nobodyさん2015/03/14(土) 18:33:04.60ID:FIB+Mu1T
Cake2.5.8を使っています。ユーザー(ログイン機能を持つ)が複数ある場合の
アソシエーション構成について悩んでいます。
テーブルは以下になります(重要な箇所以外省いています)

■ユーザーテーブル(users)
id|username|password|email
■プロフィールテーブル(profiles)
id|user_id|name|gender|comment
■店舗情報テーブル(shops)
id|user_id|name|address|tel
■広告主のテーブル(clients)
id|user_id|company|tantou|tel

■アソシエーションのパターン
一般会員の場合は、ユーザー+プロフィール
店舗会員の場合は、ユーザー+店舗情報
クライアント会員の場合は、ユーザー+広告主

となります。
それぞれ会員登録するページでは上記の組み合わせで登録します。

ユーザーに3つのテーブルをhasOneしてContainで
どのテーブルを取得するか選ぶ方法も考えたのですが、
その設計が正しいのか否か分かりません。

どういうモデル構成でどうアソシエーションを組めば良いか
アドバイスください。お願いします。
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&amp;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']だけで参照させたいです。
■ このスレッドは過去ログ倉庫に格納されています