【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/
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 であるかどうかとは無関係。
0721nobodyさん
2014/06/18(水) 12:55:32.95ID:1XJ5G0pn自分でCakePHPのサイトを作ろうと思っているのですが、気になった点がありました。
今、作ろうとしているサイトは、ポートフォリオ系になるので、
自分が作ったゲームやWebサイトを置く予定であります。
CakePHPを使う必要性は薄いのですが、フレームワーク経験が必須なため、
経験を積むという意味で、CakePHPを使用しました。
そして、サイトには、大きく分類して、トップページ、ゲーム、Webサイト、リンクがあり、
それぞれ、topsテーブル、gamesテーブル、sitesテーブル、linksテーブルがあります。
そこで、気になったのが、
CakePHPでは、Controller、View、Model、データテーブルの名前を揃えなければならないと習ったのですが、
そうなると、出力するテーブルが違う場合は、GamesController、SiteControllerのように、
コントローラーとフォルダを用意すべきでしょうか。
それとも、1つのコントローラー、1つのViewフォルダにまとめられるでしょうか?
0722nobodyさん
2014/06/18(水) 13:01:47.43ID:???0723nobodyさん
2014/06/18(水) 13:23:44.25ID:1XJ5G0pn特に問題ないとのことでしょうか?
0724nobodyさん
2014/06/18(水) 14:07:44.93ID:???topsってテーブルが気になるな。何があるテーブルか分からん。
sitesテーブルとlinksテーブルの違いとか。
お前さんの用途は「自作のゲームやWebサイトの情報を公開する」だろ?
じゃ、「products」テーブルだけか、分けても「links」「games」だけだと思うんだが。
あと、基本的なCakeの命名規則が分かってないよ。
Controller:GamesController
Model :GameModel
View :Games
テーブル:games
0726nobodyさん
2014/06/18(水) 14:29:45.54ID:1XJ5G0pnWebサイトに載せるのは、ゲームとWebサイトです。
topsは、トップページなのですが、ここに更新履歴を置くところです
sitesは、メインとなるホームページ以外に作った、Webサイトを置くところです。
ここでは、ゲーム以外の製作物と認識してくだされば十分です。
linksは、素材とかをお借りしたサイトとかへのリンクです。
gamesテーブルとsitesテーブルは、productsテーブルにまとめたほうがよさそうです。
ご助言ありがとうございます。
そうなると、
Controller:TopsController
Model :TopModel
View :Tops
テーブル:tops
Controller:GamesController
Model :GameModel
View :Games
テーブル:games
Controller:LinksController
Model :LinkModel
View :Links
テーブル:link
という風に分けた方が、使用するテーブル単位で分けた方が無難ということでしょうか
0727nobodyさん
2014/06/18(水) 15:13:40.83ID:???更新履歴ならnewsとかupdatesとかにしたらどうだ?
0728nobodyさん
2014/06/18(水) 15:41:33.35ID:???0729nobodyさん
2014/06/18(水) 15:45:20.63ID:???0730nobodyさん
2014/06/18(水) 16:30:07.27ID:1XJ5G0pn最初は、更新履歴を表したテーブル名は、newsでつけていたのですが、
コントローラー名とフォルダ名を揃えなければならないということ思い出して、
それでトップ画面の名前を、更新履歴のテーブル名にしてしまいました。
(トップ画面に更新履歴を表示させるため)
それで、テーブル名とコントローラー名、フォルダ名がずれていても問題ないということでしょうか?
0731nobodyさん
2014/06/18(水) 16:39:06.81ID:???1画面にニュースとリンクを両方表示したいときどうするつもりだ?
画面に名前をつけたのがView、データの集まりに名前をつけたのがModel。
Cakeでは便宜上Viewのフォルダ名とコントローラ名を合わせると幸せになれるというだけ。
0732nobodyさん
2014/06/18(水) 16:39:37.90ID:???0733nobodyさん
2014/06/18(水) 16:59:54.99ID:ma+gijMnhttp://www.tanteifile.com/diary/2014/06/17_01/
0734nobodyさん
2014/06/18(水) 17:34:03.35ID:???つまり、いろいろ質問してるけど、とにかくやってみてから
問題を見つけて行ったほうがいい。
手を動かさない奴に何をいっても無駄だ。
>という風に分けた方が、使用するテーブル単位で分けた方が無難ということでしょうか
などという小賢しい質問をする前にまず作れ。
そして壊して作りなおせ。
0735nobodyさん
2014/06/18(水) 23:32:42.92ID:???ViewからModelのvalidateを参照して、「名前は○文字までです」みたいな表示をしたい。
ベストプラクティスなやり方ありますかね?
もしくはViewからもModelからも見える所に数値のdefineを置くべきだろうか。
0736nobodyさん
2014/06/19(木) 00:35:54.86ID:???文字数制限をViewでも管理したいってことか?
そう頻繁に変わるものじゃないから、
Viewに直接注意書きを書くのが一番だと思うが
0737nobodyさん
2014/06/19(木) 01:10:02.52ID:???パーサのオーバーヘッドが多少気になるけど、まぁ悪くない。
0738nobodyさん
2014/06/19(木) 01:18:19.13ID:???Viewから変更する必要はなく、注意書きを書きたいだけなんだよね
制限文字数なんかは後から変更される可能性があるので、ModelとViewの両方に直書きしたくない
やはり設定ファイル式にすべきか
0739nobodyさん
2014/06/19(木) 02:04:30.51ID:???モデルキャッシュを使うと、重くならないぞ
0740nobodyさん
2014/06/19(木) 02:06:51.32ID:???0741nobodyさん
2014/06/19(木) 16:22:55.58ID:???Configure::write('Routing.prefixes', array('admin'));
routes.phpでルーティングをしたい時、
Router::connect('/', array('controller' => 'pages', 'action' => 'index', 'home'));
Router::connect('/admin/', array('controller' => 'pages', 'admin' => true));
としているのですが、同じような内容を2回書くのが面倒です。
これは仕様として仕方ないのでしょうか?
0742nobodyさん
2014/06/19(木) 23:44:09.30ID:???業務でやってたら怖くない?
慣れなん?
サーバー移転ですら怖くてできん。。
0743nobodyさん
2014/06/19(木) 23:45:58.63ID:???0745nobodyさん
2014/06/20(金) 00:11:16.79ID:???0746nobodyさん
2014/06/20(金) 01:16:57.68ID:???0747nobodyさん
2014/06/20(金) 09:35:32.81ID:???別のフレームワークに変えるだろう
でも今からだと何がいいんだろう
0749nobodyさん
2014/06/20(金) 11:20:56.99ID:???laravelじゃないか
phalconは業務でも使ってるけど
バグはそれなりにあって、Segmentation Faultで落ちると結構大変
速度は比較にならないほど速いし、フレームワークの仕組みも良いけどさ
0750nobodyさん
2014/06/20(金) 16:37:24.67ID:1CC0efjoアップローダーを作ろうとしているのですがウィルスファイルをアップロードされると不味いので
アップロード可能なファイル種類を事前に jpg のみに制限しておいた方が無難でしょうか?
0754nobodyさん
2014/06/20(金) 17:53:47.33ID:???別のウィルスに感染させる必要があるんだろ?
単に画像を閲覧しただけで感染するなら、対策とか無理じゃないか?
twitterとかfacebookはウィルスだらけになるぞ
0755nobodyさん
2014/06/20(金) 18:27:17.32ID:I3iP4JeKjpgのみアップロード可能にしておけば、ウィルスに感染していない人が
その画像を閲覧する分には何も影響がないと言う事でしょうか?
ウィルス感染している人自体が少ないと思うので被害は少ないですよね。
0756nobodyさん
2014/06/20(金) 18:38:27.21ID:???と言うより、防ぎようがない気もする。
でも、画像アップロード出来るWebサービスは日々オープンしてるわけだし、
そこまで神経質になっても仕方ないよ。
0757336
2014/06/20(金) 18:41:21.97ID:???0758nobodyさん
2014/06/20(金) 20:23:31.26ID:???0759nobodyさん
2014/06/20(金) 21:08:45.45ID:5NSL3HdG詳しく
0761nobodyさん
2014/06/21(土) 00:35:05.85ID:???0762nobodyさん
2014/06/21(土) 00:48:00.43ID:???まあサムネイル作って無効な画像かどうか(ライブラリによるがnullが返ったり真っ白画像になったり)を調べるという手はあるかも。
0763nobodyさん
2014/06/21(土) 01:03:27.67ID:???0764nobodyさん
2014/06/21(土) 03:26:03.92ID:f1vlSuIgjpgでいいやん。jpgでエロ画像みえるやん。jpgで072できるやん。
0765nobodyさん
2014/06/22(日) 12:51:34.63ID:???insertは問題ないのですがupdateが上手くいきません。
(上書きされずに毎回insertされる)
saveメソッドでupdateするには主キーを渡す必要があるのは分かっているのですが、
その方法がよく分かりません。このような場合はどうすれば良いのでしょうか?
usesテーブル
-id//主キー
-username
-password
profilesテーブル
-id//主キー
-user_id//外部キー
-birthday
class ProfilesController extends AppController{
public function edit(){
$id=$this->Auth->user('id');
if($this->request->is(array('post','put'))) {
$this->request->data['Profile']['user_id'] = $id;
if ($this->Profile->save($this->request->data)) {
$this->Session->setFlash(__('The profile has been saved.'));
} } }
テーブルを1つにまとめてしまえば話しは早いのですが
別の都合でそれができません。
0768nobodyさん
2014/06/22(日) 22:23:19.92ID:???おかげでUPDATE処理時に更新対象じゃないカラムが勝手にDEFAULT値に変わってえらい事になった。
なにしてくれるんじゃい。
0769nobodyさん
2014/06/22(日) 23:25:35.42ID:???0770nobodyさん
2014/06/24(火) 16:40:44.26ID:???DBアクセスやめて固定のJSONを1行返すだけにしても大きく変わらず。
Core i7のWin8のXampp環境でもCentOSのVPS環境でもそんな感じ。
いくらCakeが遅いって言っても遅すぎると思うのだが、なにかおかしいです?
0771nobodyさん
2014/06/24(火) 17:44:24.00ID:???0772nobodyさん
2014/06/24(火) 17:59:57.86ID:???根本何か間違えてるだけだろ
0773nobodyさん
2014/06/24(火) 21:11:44.93ID:???0774nobodyさん
2014/06/24(火) 23:54:56.03ID:NjjfXiKQGETパラメータでcakeのコントローラにアクセスを掛けたいのですがどうすれば良いでしょうか?
本来は、検索ボタンを押した際に�@でコントローラのメソッドにアクセスを
したいのですが、�Aになってしまいます。
�@・・・期待しているGETアクセス
http://test.com/hoge/buta/123/tarou
�A・・・想定外に生成されるURL
http://test.com/hoge/buta?id=123&name=tarou
コントローラ
HogeControler
{
public function Buta($id , $name)
{
//ここで「/」区切りでアクセスされた値を取得する。
}
}
HTML
<form name="name_form" action="/hoge/buta" method="get">
<input type="text" id="id_test" name="id" value="">
<input type="text" id="id_test" name="name" value="">
</form>
■ このスレッドは過去ログ倉庫に格納されています