【PHP】フレームワーク CakePHP 17ホール目【v2.4】
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2014/03/01(土) 17:03:24.57ID:8AJ9GD6ECakePHPから派生した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/1378659370/
0620nobodyさん
2014/06/01(日) 12:20:08.01ID:???0621nobodyさん
2014/06/02(月) 00:43:40.92ID:???class Entity extends Model {
public $hasAndBelongsToMany = array(
'RelatedEntity' => array(
'className' => 'Entity',
'foreignKey' => 'relational_id',
),
);
}
こういうこと?
0622nobodyさん
2014/06/05(木) 11:57:49.53ID:+YUe8hGX「コマンド ラインが長すぎます」
というエラーが出るのですが、何かわかる方いらっしゃいますか?
環境は以下の通りです。
Windows 7
CakePHP 2.3.10
PHP 5.3.5
ファイル:app/Console/Command/ApprovalShell
<?php
App::uses('CakeEmail', 'Network/Email');
class ApprovalShell extends AppShell {
public function main() {
$Email = new CakeEmail();
$Email->config('default');
$Email->from(array('[email protected]' => 'ほげほげ'));
$Email->to('[email protected]');
$Email->subject('お願い');
$Email->send();
}
}
0623nobodyさん
2014/06/05(木) 14:05:40.48ID:???Windowsで開発するのやめれたらいいと思うよ。
よく知らんけど、Cakeのエラーメッセージは英語。
てことは、おそらくコマンドプロンプトか、代わりに使ってるターミナル系アプリの出してるエラー。
エラーメッセージから、cakeコマンドへのファイルパスや引数も含め、
実行しようとしたコマンドの文字数が多すぎた。
てことが予想出来る。
0624nobodyさん
2014/06/05(木) 16:25:42.75ID:+YUe8hGXありがとうございます。
おっしゃるとおりかもしれません。
0625nobodyさん
2014/06/05(木) 19:12:08.87ID:???「コマンド ラインが長すぎます」
なんてエラーは出たこと無いな。
原文はなんて書いてんの?
0626nobodyさん
2014/06/05(木) 19:12:52.47ID:???0627nobodyさん
2014/06/05(木) 20:29:33.26ID:???0628nobodyさん
2014/06/05(木) 22:14:09.51ID:???普段はwindowsで開発、最終的なテストだけ本番機で行っているわ
PHPはわりと環境依存大きいけどcake使ってると依存度がかなり軽減されると思う
0629nobodyさん
2014/06/05(木) 22:23:36.19ID:???その方がお手軽だし
0630nobodyさん
2014/06/05(木) 22:26:03.50ID:???phpとかmysqlはwindows上で動かすのは無駄だからやってない
vagrantで簡単に作れるしさ
0631nobodyさん
2014/06/05(木) 22:29:27.33ID:d26v3tZW開発用のサクラ鯖に直結して開発してるぞ。
リモートプロジェクト
0632622
2014/06/05(木) 23:27:51.32ID:+YUe8hGXおさわがせしました。
PHPのメール設定がおかしかったみたいです。
0633nobodyさん
2014/06/06(金) 00:56:33.55ID:???0634nobodyさん
2014/06/06(金) 01:07:28.95ID:???0635nobodyさん
2014/06/06(金) 01:37:12.74ID:???しなくていい苦労って多いもの。
0636nobodyさん
2014/06/06(金) 02:32:32.38ID:???画面系で動作が変わるとしたらソース自体に問題がありそう
0637nobodyさん
2014/06/06(金) 03:44:03.22ID:???0638nobodyさん
2014/06/06(金) 06:32:05.95ID:???0639nobodyさん
2014/06/06(金) 11:48:12.37ID:???Windows と Mac 混在して bake してて問題ないんだが、
気づいてないだけかな
0640nobodyさん
2014/06/06(金) 12:18:51.00ID:???0641nobodyさん
2014/06/06(金) 13:35:54.13ID:???今試しに同じデータベースを元にして Mac と Windows で bake したのを
git で比較したけど差分なかったぞ?
0643nobodyさん
2014/06/06(金) 15:39:44.51ID:???2.5.1
CAKE_CORE_INCLUDE_PATH はコアの Cake ディレクトリを格納している
ディレクトリのパス。
0645nobodyさん
2014/06/06(金) 17:22:45.98ID:???そりゃ絶対パスだから違うわけだけど、
bake して生成された結果には影響ないよ?
ちなみに今の論点はあくまでも
>bakeした時面倒なんだよ
に対する疑問ね。
0646nobodyさん
2014/06/07(土) 13:17:32.00ID:???これは、phpファイルのみしか管理できないのですか?
例えばjqueryとか、画像も管理できるのでしょうか?
教えてください。
よろしくお願いします。
0647nobodyさん
2014/06/07(土) 14:18:28.71ID:???composerは基本、外部のライブラリを管理したり
プロジェクトの作成に利用したりするもの
jqueryは
component/jquery
を使えば管理できる
画像は外部のものなのかい?
0648nobodyさん
2014/06/07(土) 14:22:04.06ID:???ありがとうございます。
画像やjqueryはプラグインに入れようと思って、それをbitbucketで管理します。
全てのサイトでそのプラグインをcomposerで管理できるのかなとおもいまして。
0649nobodyさん
2014/06/07(土) 14:26:11.05ID:???bitbucketで
各々サイトと、jqueryのプラグインを別に管理したとして
>全てのサイトでそのプラグインをcomposerで管理できる
ってのは可能だよ
0651nobodyさん
2014/06/10(火) 09:20:20.15ID:???これと同じ問題でハマってます
どうすればいい?
users/123 等の時は users/index/123にしたくて
users/read
users/edit
などアクション名を指定した時は、そのアクション実行したいのですが
0653nobodyさん
2014/06/10(火) 11:13:53.54ID:???どこかにサンプルはないでしょうか?
0654nobodyさん
2014/06/10(火) 13:57:21.11ID:???http://api.cakephp.org/2.5/class-Router.html#_connect
http://book.cakephp.org/2.0/en/development/routing.html#route-elements
0656nobodyさん
2014/06/11(水) 00:44:51.34ID:???編集可能にする方法を教えて下さい。
(他人のユーザ情報は編集不可、表示のみ)
0657nobodyさん
2014/06/11(水) 00:46:47.80ID:???0659nobodyさん
2014/06/11(水) 01:06:59.37ID:???クライアント側は他にアプリを作ればどんなHTTPリクエストでも送れるからだ
編集ボタンを表示しないのも予防策にはなるが
根本的にはサーバ側でデータベースのアップデートやセーブやデリートをする前に
CRUDの対象となるレコードがログインユーザ自身のものかどうかを確認するステップが必要
より具体的にはログインユーザのIDと更新するユーザテーブルのレコードのIDが一致するかどうかだ
0661nobodyさん
2014/06/11(水) 08:53:19.95ID:???0662nobodyさん
2014/06/11(水) 10:34:05.54ID:???ユーザー情報の更新のリクエストにユーザーIDを含むようなフォームを作ったとしても
Cakeのパラメータ改ざんとCSRFのチェックが有効なら
悪意あるユーザーがフォームを改ざんして他のユーザーIDに変えたら
パラメータ改ざんチェックで引っかからんのかい?
教えてエロい人
まあそれでも>>661みたいに根本的に他のユーザの情報を更新できないようにしたほうが安心安全か
人為的なミスも起きにくいし
データベースを変更しないユーザー情報表示画面の時だけリクエストにユーザーIDを含める
ユーザー更新・削除時は対象レコードの選択にログインユーザのIDをそのまま使う
0663nobodyさん
2014/06/11(水) 17:28:51.09ID:???CSRF対策は、そのページに行くまで正しい経路をたどってるかどうか
フォーム改ざんは、そのページに含まれるポスト対象のフィールドが正しいかどうか
のチェックだったはず。なので、POSTされるフィールド値を変更されたとしても、
Cake側では対応できないはず。
0664nobodyさん
2014/06/11(水) 20:19:39.05ID:???皆様のおかげでテストケースの有用性がわかるようになりました。
composerの便利さも。
jenkinsとかはどうなんですか?
0665nobodyさん
2014/06/11(水) 21:00:28.09ID:???AppControllerを継承したAdminControllerを継承したEventControllerを動かしたら
AdminControllerのusesに書いてあるモデルが、AdminControllerのbeforeFilter内で使えなかったぞ
EventControllerのusesに追加したら動いたが、なんだかなー
0667nobodyさん
2014/06/11(水) 21:52:04.25ID:???$_mergeParentのことか?
これでAdminControllerを指定したら、今度はAppControllerをマージしてくれないからダメ。
ぐぐったらこれ皆困ってるらしくてそれぞれ独自に_mergeVarsを改造したりして直してるな。
なんでこの問題公式が放置してるんだ?
0669nobodyさん
2014/06/11(水) 22:07:34.04ID:???3の開発で忙しいんじゃないかな(*´∀`*)
0670nobodyさん
2014/06/11(水) 22:43:50.86ID:???オレはやんないけど。
0671nobodyさん
2014/06/12(木) 01:35:46.71ID:???>>667 はいくつかのコントローラに共通する機能が必要なら、
その時は継承ではなくてコンポーネントを作ったらどうかな?
コンポーネントはそのために存在しているわけだし。
共通機能を継承で得ようとするのは、言語やフレームワークを問わず、
あんまり良い選択ではないと思うけど。
0672nobodyさん
2014/06/12(木) 01:39:01.21ID:???うーむこれがPHP脳というやつか
0673nobodyさん
2014/06/12(木) 01:48:11.52ID:???言語は問わないと書いたがな。
たとえば
EffectiveJava 第4章 項目14「継承よりコンポジションを選ぶ」
コンポーネントは文字通りこのコンポジションパターンだよ。
0674nobodyさん
2014/06/12(木) 02:42:37.90ID:???>>665の例で言うと、EventController(他にもあるが)は管理者専用機能のコントローラである。
管理者用コントローラに共通の処理(ログインなど)をAdminControllerに書き、EventControllerはそれを継承した。
同じことをコンポーネントでやろうとすると、すべての管理者用コントローラーに
まったく同じコード(コンポーネントのメソッドを呼び出すコード)を書かねばならないのでは?
非常に不便だと思うが、俺が勘違いしてたら教えて欲しい。
0675nobodyさん
2014/06/12(木) 02:56:04.36ID:???その処理なら Component::startup() でいいんじゃないかと思ったんだけど、どうだろう?
場合によってはメソッドの呼び出しも必要になるけれども
けど、それは parent:: で親クラスのメソッドを呼ぶのとそれほど変わりないのかなと。
0676nobodyさん
2014/06/12(木) 02:57:29.99ID:???>いくつかのコントローラに共通する機能
としてるけど、>>665 で問題にしてるのは
広い意味では機能で間違いないんだけど
単に設定値である点においてズレてる。
ここではそれこそ、コンポーネントの
使い方なんかを指定しているわけで、
これは継承してほしいと思うよ。
0677nobodyさん
2014/06/12(木) 03:11:49.49ID:???1.x系からのふるまいだから、仕様変更が入る可能性は低くないかな。
どうしても継承の継承が必要なケースで
さらに、孫クラスに基底クラスから継承させたいパラメータがあるなら
基底クラスのコンストラクタで $this->uses に入れればいいわけだし。
0678nobodyさん
2014/06/12(木) 09:12:51.74ID:???また名が廃る
0679nobodyさん
2014/06/12(木) 11:19:04.70ID:???0680nobodyさん
2014/06/12(木) 11:22:15.38ID:???何だこの仕様
0681nobodyさん
2014/06/12(木) 11:22:23.38ID:???どんな感じですか?
0682nobodyさん
2014/06/12(木) 11:28:47.32ID:???パフォーマンスはお察し
0683nobodyさん
2014/06/12(木) 12:11:49.21ID:???使ってこそのフレームワークだから、コミュニティの勢いは重要。
0684nobodyさん
2014/06/12(木) 12:25:24.65ID:???0685nobodyさん
2014/06/12(木) 13:23:35.06ID:???0686nobodyさん
2014/06/13(金) 08:29:35.00ID:???0687nobodyさん
2014/06/13(金) 08:39:23.01ID:???書いたコードの分だけ、負債がどんどん増えていく
0688nobodyさん
2014/06/13(金) 09:00:43.34ID:???0689nobodyさん
2014/06/13(金) 10:44:08.86ID:???adminプレフィクスを使うのが一般的な方法だと思っていたんだが
実際のところみんなはどうやっているんだ?
0690nobodyさん
2014/06/13(金) 11:00:42.12ID:???俺はクッキーでログイン画面作って、セッション有る無しでview表示を少し変えてる。
ずっとこれでやってるけど。。。
ダメかな?
0691nobodyさん
2014/06/13(金) 12:20:32.10ID:???全体的に管理者の機能が一般利用者とそんなに変わらなければそれでもいいのかもね。
プレフィクスを切っている場合でも
public function admin_search() {
$this->search();
}
なんてコードは実際に書かれるわけで。
0692nobodyさん
2014/06/13(金) 14:29:24.42ID:???面白そうだったんで最初やってみたけど、
同じクラスにヤバいアクションが混在するのが気持ち悪い。
それ以降やったこと無いな。
>>690
表示だけならそれでいいんじゃない?
0693nobodyさん
2014/06/13(金) 17:20:45.32ID:???管理画面だけ変えたい設定(キャッシュしないとかdebug2とか)があるし。
0694nobodyさん
2014/06/14(土) 17:11:30.81ID:???ホーム用のコントローラーを作るか既存のコントローラーでやるか
0695nobodyさん
2014/06/14(土) 17:15:43.40ID:???0696nobodyさん
2014/06/14(土) 17:19:19.02ID:???HomesControllerだけど他にもaboutとかシンプルなページと兼用
0697nobodyさん
2014/06/14(土) 17:26:13.81ID:???その場合、コントローラー付きで直アクセスされた場合、
何かリダイレクト処理を入れてるんですか?
(/homes/indexとか/homes/aboutでアクセスされた場合)
0699nobodyさん
2014/06/14(土) 17:42:44.81ID:???対策はしてない
最近やってないから忘れてる…
0700nobodyさん
2014/06/14(土) 18:59:09.94ID:dq/AB5k+URLに「hoge」がついていたら、パラメーターをhogeとして受け取りたいです。
/users/ →UsersControllerのindexアクション
/users/detail →UsersControllerのdetailアクション
/hoge/users/ →UsersControllerのindexアクションでパラメーターhoge
/hoge/users/detail →UsersControllerのdetailアクションでパラメーターhoge
というイメージなのですが、こういう事はルーティングの設定で可能でしょうか?
可能なら書き方を教えてください。2.4系を使用しています。
0701nobodyさん
2014/06/14(土) 21:50:21.39ID:???できるよ
/* /hoge/users/ がマッチする設定 */
$route = '/hoge/users/';
$defaults = array('controller' => 'users', 'action' => 'index', 'hoge');
Router::connect($route, $defaults);
/* /hoge/users/ がマッチする設定 */
$route = '/hoge/users/:action';
$defaults = array('controller' => 'users', 'hoge');
Router::connect($route, $defaults);
/* /users/ と /users/detail は設定なしの標準でマッチ */
0702nobodyさん
2014/06/14(土) 21:54:32.07ID:???/* (1) /hoge/users/ がマッチする設定 */
$route = '/hoge/users/';
$defaults = array('controller' => 'users', 'action' => 'index', 'hoge');
Router::connect($route, $defaults);
/* (2) /hoge/users/detail などがマッチする設定 */
$route = '/hoge/users/:action';
$defaults = array('controller' => 'users', 'hoge');
Router::connect($route, $defaults);
/users/ と /users/detail は設定なしの標準でマッチ
(2) のパターンは detail 以外のアクションにも適用されることに注意して。
もしアクションを限定したいのなら別の書き方が必要。
0704nobodyさん
2014/06/15(日) 14:07:12.52ID:???data[Model][name]→nameにする方法って無いでしょうか?
0708nobodyさん
2014/06/16(月) 00:20:49.49ID:???散々ハマった挙げ句、自分でFormタグ書いてるわ
0709nobodyさん
2014/06/16(月) 12:40:04.49ID:2sVNmbqM一度登録済のパスワードをユーザ操作により変更した場合、
パスワードの認証対象の値はハッシュ値で自動でDBに登録されるのですが
それを再び登録し直すにはどうすれば良いのでしょうか?
例)
[入力パスワード] [ハッシュ値]
testpass ijierwaaasdfkjiewi32jasdfkj3
↓ ユーザがパスワードを変更した場合
testpass2 asdafasdfasjd・・・etc ←ハッシュ化する関数は何でしょうか?
0710nobodyさん
2014/06/16(月) 18:38:51.83ID:???0711nobodyさん
2014/06/17(火) 00:26:53.74ID:???Security::hash($password, null, null)
ちなみに v2.4 までは
AuthComponent::password($password)
だったけど、2.5 からは非推奨。
0712nobodyさん
2014/06/17(火) 00:34:56.25ID:???Security::hash($password)
でOK
0713nobodyさん
2014/06/17(火) 06:18:50.52ID:???INSERT時にidがnullであることを前提にしてるから、自前でid渡すと
バリデーション時にisUniqueやonCreateの指定がうまくいかなくなるね。
これはCakeではそういうもんなのか。自前でバリデーション書くしかないのか。
0716nobodyさん
2014/06/17(火) 12:03:04.11ID:???それはもちろん指定してる。
だが、isUniqueやonCreateはうまくいかなかった。
結局数字のidを追加して対応した。
0717nobodyさん
2014/06/17(火) 12:32:01.97ID:???onCreate は使ったこと無いんでよく分からんけど、
isUnique は、保存前に Model::$id をセットしてやってもダメなん?
0718nobodyさん
2014/06/17(火) 16:22:43.39ID:???それは試してないな。primaryKeyの名前がidじゃなかったから、idは一切いじらなかった。
Model::isUniqueのソースあらためて見たら、$this->idにNULLを入れていたらうまくいったかもしれん。
0719nobodyさん
2014/06/17(火) 17:08:04.87ID:???スキーマのフィールド名が id であるかどうかとは無関係。
■ このスレッドは過去ログ倉庫に格納されています