14/06/10 17:33:53.47
>>654
㌧
結局正規表現使わなかったけど、解決しました
656:nobodyさん
14/06/11 00:44:51.34
twitterのように自分自身のユーザ情報のみ
編集可能にする方法を教えて下さい。
(他人のユーザ情報は編集不可、表示のみ)
657:nobodyさん
14/06/11 00:46:47.80
ログインユーザと編集する対象のユーザが同じかどうか確かめればいいだけじゃん
658:nobodyさん
14/06/11 00:51:45.60
>>657
ありがとうございます。
一致したら「編集」ボタンを表示する、などの処理をすれば良いのでしょうか?
659:nobodyさん
14/06/11 01:06:59.37
基本的に信頼していいのは自分がプログラムにハードコーディングしたサーバ側の処理だけ
クライアント側は他にアプリを作ればどんなHTTPリクエストでも送れるからだ
編集ボタンを表示しないのも予防策にはなるが
根本的にはサーバ側でデータベースのアップデートやセーブやデリートをする前に
CRUDの対象となるレコードがログインユーザ自身のものかどうかを確認するステップが必要
より具体的にはログインユーザのIDと更新するユーザテーブルのレコードのIDが一致するかどうかだ
660:nobodyさん
14/06/11 02:19:09.44
>>658 は、ちゃんと >>659 の言ってることを理解できたのだろうか・・・
661:nobodyさん
14/06/11 08:53:19.95
リクエストにユーザーIDをつけない
662:nobodyさん
14/06/11 10:34:05.54
あれ?
ユーザー情報の更新のリクエストにユーザーIDを含むようなフォームを作ったとしても
Cakeのパラメータ改ざんとCSRFのチェックが有効なら
悪意あるユーザーがフォームを改ざんして他のユーザーIDに変えたら
パラメータ改ざんチェックで引っかからんのかい?
教えてエロい人
まあそれでも>>661みたいに根本的に他のユーザの情報を更新できないようにしたほうが安心安全か
人為的なミスも起きにくいし
データベースを変更しないユーザー情報表示画面の時だけリクエストにユーザーIDを含める
ユーザー更新・削除時は対象レコードの選択にログインユーザのIDをそのまま使う
663:nobodyさん
14/06/11 17:28:51.09
>>662
CSRF対策は、そのページに行くまで正しい経路をたどってるかどうか
フォーム改ざんは、そのページに含まれるポスト対象のフィールドが正しいかどうか
のチェックだったはず。なので、POSTされるフィールド値を変更されたとしても、
Cake側では対応できないはず。
664:nobodyさん
14/06/11 20:19:39.05
ありがとうございます。
皆様のおかげでテストケースの有用性がわかるようになりました。
composerの便利さも。
jenkinsとかはどうなんですか?
665:nobodyさん
14/06/11 21:00:28.09
>>568の問題、2.5でも直ってねーじゃねーか
AppControllerを継承したAdminControllerを継承したEventControllerを動かしたら
AdminControllerのusesに書いてあるモデルが、AdminControllerのbeforeFilter内で使えなかったぞ
EventControllerのusesに追加したら動いたが、なんだかなー
666:nobodyさん
14/06/11 21:09:11.43
>>665
マージする継承クラスを指定できるパラメータがあったはず。
ドキュメント読んでみて。
667:nobodyさん
14/06/11 21:52:04.25
>>666
$_mergeParentのことか?
これでAdminControllerを指定したら、今度はAppControllerをマージしてくれないからダメ。
ぐぐったらこれ皆困ってるらしくてそれぞれ独自に_mergeVarsを改造したりして直してるな。
なんでこの問題公式が放置してるんだ?
668:nobodyさん
14/06/11 22:06:20.17
>>667
あ、本当だな。
CakePHPが糞と言われるのがよく分かるwww
669:nobodyさん
14/06/11 22:07:34.04
それがCakeクオリティ!
3の開発で忙しいんじゃないかな(*´∀`*)
670:nobodyさん
14/06/11 22:43:50.86
糞とか言ってる暇があったら issue 出すか、プルリクしろよ。
オレはやんないけど。
671:nobodyさん
14/06/12 01:35:46.71
>>670 出したところで却下かと。
>>667 はいくつかのコントローラに共通する機能が必要なら、
その時は継承ではなくてコンポーネントを作ったらどうかな?
コンポーネントはそのために存在しているわけだし。
共通機能を継承で得ようとするのは、言語やフレームワークを問わず、
あんまり良い選択ではないと思うけど。
672:nobodyさん
14/06/12 01:39:01.21
え?
うーむこれがPHP脳というやつか
673:nobodyさん
14/06/12 01:48:11.52
>>672
言語は問わないと書いたがな。
たとえば
EffectiveJava 第4章 項目14「継承よりコンポジションを選ぶ」
コンポーネントは文字通りこのコンポジションパターンだよ。
674:nobodyさん
14/06/12 02:42:37.90
>>671
>>665の例で言うと、EventController(他にもあるが)は管理者専用機能のコントローラである。
管理者用コントローラに共通の処理(ログインなど)をAdminControllerに書き、EventControllerはそれを継承した。
同じことをコンポーネントでやろうとすると、すべての管理者用コントローラーに
まったく同じコード(コンポーネントのメソッドを呼び出すコード)を書かねばならないのでは?
非常に不便だと思うが、俺が勘違いしてたら教えて欲しい。
675:nobodyさん
14/06/12 02:56:04.36
Controller::beforeFilter() に言及してたから、
その処理なら Component::startup() でいいんじゃないかと思ったんだけど、どうだろう?
場合によってはメソッドの呼び出しも必要になるけれども
けど、それは parent:: で親クラスのメソッドを呼ぶのとそれほど変わりないのかなと。
676:nobodyさん
14/06/12 02:57:29.99
>>671 がややずれてるのは
>いくつかのコントローラに共通する機能
としてるけど、>>665 で問題にしてるのは
広い意味では機能で間違いないんだけど
単に設定値である点においてズレてる。
ここではそれこそ、コンポーネントの
使い方なんかを指定しているわけで、
これは継承してほしいと思うよ。
677:nobodyさん
14/06/12 03:11:49.49
>>676
1.x系からのふるまいだから、仕様変更が入る可能性は低くないかな。
どうしても継承の継承が必要なケースで
さらに、孫クラスに基底クラスから継承させたいパラメータがあるなら
基底クラスのコンストラクタで $this->uses に入れればいいわけだし。
678:nobodyさん
14/06/12 09:12:51.74
こんなゴミなもの対応されたら
また名が廃る
679:nobodyさん
14/06/12 11:19:04.70
3のソースからは $_mergeParent は消えてるみたいだな。
680:nobodyさん
14/06/12 11:22:15.38
常識的に考えて、マージしないとおかしいだろ
何だこの仕様
681:nobodyさん
14/06/12 11:22:23.38
3使ってる人いるん?
どんな感じですか?
682:nobodyさん
14/06/12 11:28:47.32
3は継承全部マージされるよ
パフォーマンスはお察し
683:nobodyさん
14/06/12 12:11:49.21
3に苦労して移行するくらいなら、LaravelとかRailsに移るかな。
使ってこそのフレームワークだから、コミュニティの勢いは重要。
684:nobodyさん
14/06/12 12:25:24.65
cakeとsymfonyが本命FWとして争っていた時期が懐かしい
685:nobodyさん
14/06/12 13:23:35.06
みんな良く勉強できるな。他の言語に移るのは辛いわ。。。
686:nobodyさん
14/06/13 08:29:35.00
Cake使い続けるほうが長期的に見て辛い
687:nobodyさん
14/06/13 08:39:23.01
それはあるw
書いたコードの分だけ、負債がどんどん増えていく
688:nobodyさん
14/06/13 09:00:43.34
その負債の原因がCakeではなく自分にあるとも気づかぬままにw
689:nobodyさん
14/06/13 10:44:08.86
管理者用の機能って、Adminコントローラを作るんじゃなくて
adminプレフィクスを使うのが一般的な方法だと思っていたんだが
実際のところみんなはどうやっているんだ?
690:nobodyさん
14/06/13 11:00:42.12
>>689
俺はクッキーでログイン画面作って、セッション有る無しでview表示を少し変えてる。
ずっとこれでやってるけど。。。
ダメかな?
691:nobodyさん
14/06/13 12:20:32.10
一般利用者も管理者も同じaction通してるってことか。
全体的に管理者の機能が一般利用者とそんなに変わらなければそれでもいいのかもね。
プレフィクスを切っている場合でも
public function admin_search() {
$this->search();
}
なんてコードは実際に書かれるわけで。
692:nobodyさん
14/06/13 14:29:24.42
>>689
面白そうだったんで最初やってみたけど、
同じクラスにヤバいアクションが混在するのが気持ち悪い。
それ以降やったこと無いな。
>>690
表示だけならそれでいいんじゃない?
693:nobodyさん
14/06/13 17:20:45.32
俺は管理画面と一般画面のappは分けてるよ
管理画面だけ変えたい設定(キャッシュしないとかdebug2とか)があるし。
694:nobodyさん
14/06/14 17:11:30.81
みなさん、ホーム画面ってどのコントローラーでやってます?
ホーム用のコントローラーを作るか既存のコントローラーでやるか
695:nobodyさん
14/06/14 17:15:43.40
ホーム専用
696:nobodyさん
14/06/14 17:19:19.02
専用じゃないや
HomesControllerだけど他にもaboutとかシンプルなページと兼用
697:nobodyさん
14/06/14 17:26:13.81
>>696
その場合、コントローラー付きで直アクセスされた場合、
何かリダイレクト処理を入れてるんですか?
(/homes/indexとか/homes/aboutでアクセスされた場合)
698:nobodyさん
14/06/14 17:37:45.91
>>697
routes.php弄る
699:nobodyさん
14/06/14 17:42:44.81
あ、違うな
対策はしてない
最近やってないから忘れてる…
700:nobodyさん
14/06/14 18:59:09.94 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系を使用しています。
701:nobodyさん
14/06/14 21:50:21.39
>>700
できるよ
/* /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 は設定なしの標準でマッチ */
702:nobodyさん
14/06/14 21:54:32.07
あ、コメントミスった。正しくはこっち
/* (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 以外のアクションにも適用されることに注意して。
もしアクションを限定したいのなら別の書き方が必要。
703:700
14/06/15 00:45:45.76
>>701-702
ありがとうございます。大変参考になりました。
704:nobodyさん
14/06/15 14:07:12.52
フォームヘルパーのinput作成のname部分を
data[Model][name]→nameにする方法って無いでしょうか?
705:nobodyさん
14/06/15 16:51:00.51
>>704
FormHelper のパラメータでってことなら不可。
706:nobodyさん
14/06/15 17:42:36.89
>>705
やっぱり無理ですか。諦めます
707:336
14/06/15 18:33:33.91
>>706
オーバーライドして、アウトプットを置換するだけじゃん
708:nobodyさん
14/06/16 00:20:49.49
フォームヘルパー本当に使い辛い
散々ハマった挙げ句、自分でFormタグ書いてるわ
709:nobodyさん
14/06/16 12:40:04.49 2sVNmbqM
現在、cakeのAuth認証を使ってログインシステムを作っているのですが
一度登録済のパスワードをユーザ操作により変更した場合、
パスワードの認証対象の値はハッシュ値で自動でDBに登録されるのですが
それを再び登録し直すにはどうすれば良いのでしょうか?
例)
[入力パスワード] [ハッシュ値]
testpass ijierwaaasdfkjiewi32jasdfkj3
↓ ユーザがパスワードを変更した場合
testpass2 asdafasdfasjd・・・etc ←ハッシュ化する関数は何でしょうか?
710:nobodyさん
14/06/16 18:38:51.83
フィームヘルパーのselectで0の値が空欄になるのは仕様ですか?
711:nobodyさん
14/06/17 00:26:53.74
>>709
Security::hash($password, null, null)
ちなみに v2.4 までは
AuthComponent::password($password)
だったけど、2.5 からは非推奨。
712:nobodyさん
14/06/17 00:34:56.25
Security::hash() の第2と第3パラメータは要らないみたいだ
Security::hash($password)
でOK
713:nobodyさん
14/06/17 06:18:50.52
CakePHPてprimary idは必ずauto incrementのintでないと駄目なん?
INSERT時にidがnullであることを前提にしてるから、自前でid渡すと
バリデーション時にisUniqueやonCreateの指定がうまくいかなくなるね。
これはCakeではそういうもんなのか。自前でバリデーション書くしかないのか。
714:nobodyさん
14/06/17 11:33:53.22
>>713
Model::$primaryKey で設定
動的な変更も可
複数キーは不可。3から対応
715:nobodyさん
14/06/17 11:38:54.51
>>713
>バリデーション時にisUniqueやonCreateの指定がうまくいかなくなるね。
そうか?
716:nobodyさん
14/06/17 12:03:04.11
>>714
それはもちろん指定してる。
だが、isUniqueやonCreateはうまくいかなかった。
結局数字のidを追加して対応した。
717:nobodyさん
14/06/17 12:32:01.97
あぁ、そういうことか。なるほど。
onCreate は使ったこと無いんでよく分からんけど、
isUnique は、保存前に Model::$id をセットしてやってもダメなん?
718:nobodyさん
14/06/17 16:22:43.39
>>717
それは試してないな。primaryKeyの名前がidじゃなかったから、idは一切いじらなかった。
Model::isUniqueのソースあらためて見たら、$this->idにNULLを入れていたらうまくいったかもしれん。
719:nobodyさん
14/06/17 17:08:04.87
Model::$id は、primaryKey の値のことなので、
スキーマのフィールド名が id であるかどうかとは無関係。
720:nobodyさん
14/06/18 03:28:03.88
>>719
なるほど!
後で試してみよう
721:nobodyさん
14/06/18 12:55:32.95 1XJ5G0pn
すみません、今ドットインストールの講座が終わりまして、
自分でCakePHPのサイトを作ろうと思っているのですが、気になった点がありました。
今、作ろうとしているサイトは、ポートフォリオ系になるので、
自分が作ったゲームやWebサイトを置く予定であります。
CakePHPを使う必要性は薄いのですが、フレームワーク経験が必須なため、
経験を積むという意味で、CakePHPを使用しました。
そして、サイトには、大きく分類して、トップページ、ゲーム、Webサイト、リンクがあり、
それぞれ、topsテーブル、gamesテーブル、sitesテーブル、linksテーブルがあります。
そこで、気になったのが、
CakePHPでは、Controller、View、Model、データテーブルの名前を揃えなければならないと習ったのですが、
そうなると、出力するテーブルが違う場合は、GamesController、SiteControllerのように、
コントローラーとフォルダを用意すべきでしょうか。
それとも、1つのコントローラー、1つのViewフォルダにまとめられるでしょうか?
722:nobodyさん
14/06/18 13:01:47.43
好きなようにすれば良い
723:nobodyさん
14/06/18 13:23:44.25 1XJ5G0pn
つまり、Controller名、フォルダ名と異なるテーブルを使用することは可能で、
特に問題ないとのことでしょうか?
724:nobodyさん
14/06/18 14:07:44.93
>>721
topsってテーブルが気になるな。何があるテーブルか分からん。
sitesテーブルとlinksテーブルの違いとか。
お前さんの用途は「自作のゲームやWebサイトの情報を公開する」だろ?
じゃ、「products」テーブルだけか、分けても「links」「games」だけだと思うんだが。
あと、基本的なCakeの命名規則が分かってないよ。
Controller:GamesController
Model :GameModel
View :Games
テーブル:games
725:nobodyさん
14/06/18 14:20:51.04 lT0uB39l
>>711 >>712
ありがとうございます!!
726:nobodyさん
14/06/18 14:29:45.54 1XJ5G0pn
説明がたりませんでした、申し訳ありません。
Webサイトに載せるのは、ゲームと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
という風に分けた方が、使用するテーブル単位で分けた方が無難ということでしょうか
727:nobodyさん
14/06/18 15:13:40.83
だからtopsって何なんだよw
更新履歴ならnewsとかupdatesとかにしたらどうだ?
728:nobodyさん
14/06/18 15:41:33.35
1XJ5G0pnはもう少し勉強したほうがいいな。根本的なMVCが分かってない
729:nobodyさん
14/06/18 15:45:20.63
いや英語を勉強した方がいい
730:nobodyさん
14/06/18 16:30:07.27 1XJ5G0pn
すみません、画面名からテーブル名作ってしまいました。
最初は、更新履歴を表したテーブル名は、newsでつけていたのですが、
コントローラー名とフォルダ名を揃えなければならないということ思い出して、
それでトップ画面の名前を、更新履歴のテーブル名にしてしまいました。
(トップ画面に更新履歴を表示させるため)
それで、テーブル名とコントローラー名、フォルダ名がずれていても問題ないということでしょうか?
731:nobodyさん
14/06/18 16:39:06.81
モデルとコントローラはむしろずれてないとバグりやすくなるだろ。
1画面にニュースとリンクを両方表示したいときどうするつもりだ?
画面に名前をつけたのがView、データの集まりに名前をつけたのがModel。
Cakeでは便宜上Viewのフォルダ名とコントローラ名を合わせると幸せになれるというだけ。
732:nobodyさん
14/06/18 16:39:37.90
ずれるの意味が分からんが、MVCでバラバラなら問題あるだろ
733:nobodyさん
14/06/18 16:59:54.99 ma+gijMn
秒速で1億稼ぐ豚が・・・レイプ
URLリンク(www.tanteifile.com)
734:nobodyさん
14/06/18 17:34:03.35
上の方でも誰か書いてるけど、1XJ5G0pn はまず好きにすればいい。
つまり、いろいろ質問してるけど、とにかくやってみてから
問題を見つけて行ったほうがいい。
手を動かさない奴に何をいっても無駄だ。
>という風に分けた方が、使用するテーブル単位で分けた方が無難ということでしょうか
などという小賢しい質問をする前にまず作れ。
そして壊して作りなおせ。
735:nobodyさん
14/06/18 23:32:42.92
Cakeマスターの皆さんに質問
ViewからModelのvalidateを参照して、「名前は○文字までです」みたいな表示をしたい。
ベストプラクティスなやり方ありますかね?
もしくはViewからもModelからも見える所に数値のdefineを置くべきだろうか。
736:nobodyさん
14/06/19 00:35:54.86
>>735
文字数制限をViewでも管理したいってことか?
そう頻繁に変わるものじゃないから、
Viewに直接注意書きを書くのが一番だと思うが
737:nobodyさん
14/06/19 01:10:02.52
うちは最近設定値関係は Config に json で保存するパターンを試してる。
パーサのオーバーヘッドが多少気になるけど、まぁ悪くない。
738:nobodyさん
14/06/19 01:18:19.13
>>736
Viewから変更する必要はなく、注意書きを書きたいだけなんだよね
制限文字数なんかは後から変更される可能性があるので、ModelとViewの両方に直書きしたくない
やはり設定ファイル式にすべきか
739:nobodyさん
14/06/19 02:04:30.51
Configモデルに数値を保存してコントローラーから操作すればいいじゃん。
モデルキャッシュを使うと、重くならないぞ
740:nobodyさん
14/06/19 02:06:51.32
viewからmodelを参照するのは全く構わないと思う。俺はviewからいつでもmodelのインスタンスを参照できるように$getmodel('Foo')みたいなクロージャを用意してるので、バリデーションルールにもアクセスできる。
741:nobodyさん
14/06/19 16:22:55.58
Cakephp2で、core.phpのprefixesを有効にしています。
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回書くのが面倒です。
これは仕様として仕方ないのでしょうか?
742:nobodyさん
14/06/19 23:44:09.30
cakephpを2から3に上げる時とか、
業務でやってたら怖くない?
慣れなん?
サーバー移転ですら怖くてできん。。
743:nobodyさん
14/06/19 23:45:58.63
業務システムのフレームワークをベータ版にしようとするお前がこえーよw
744:nobodyさん
14/06/19 23:47:32.48
>>743
今はそうだけどさ
仮にstableになっても。
745:nobodyさん
14/06/20 00:11:16.79
2->3 はハードル高そうだな
746:nobodyさん
14/06/20 01:16:57.68
2であと3年は戦うつもり
747:nobodyさん
14/06/20 09:35:32.81
3に変えてまでCakeについていく気はないな
別のフレームワークに変えるだろう
でも今からだと何がいいんだろう
748:nobodyさん
14/06/20 10:09:05.76
>>747
ファルコンってどうなん?
速いみたいだけど。
749:nobodyさん
14/06/20 11:20:56.99
>>747
laravelじゃないか
phalconは業務でも使ってるけど
バグはそれなりにあって、Segmentation Faultで落ちると結構大変
速度は比較にならないほど速いし、フレームワークの仕組みも良いけどさ
750:nobodyさん
14/06/20 16:37:24.67 1CC0efjo
cakePHPを使ったシステムで
アップローダーを作ろうとしているのですがウィルスファイルをアップロードされると不味いので
アップロード可能なファイル種類を事前に jpg のみに制限しておいた方が無難でしょうか?
751:nobodyさん
14/06/20 17:18:38.33
>>750
どうやって制限するの?
752:nobodyさん
14/06/20 17:31:29.21
>>751
バリデーションに書く
753:nobodyさん
14/06/20 17:41:37.43
>>752
mimetypeで制限するってことか
jpeg画像のウィルスとかもあるからねぇ
754:nobodyさん
14/06/20 17:53:47.33
つーか、jpeg型ウィルスって実行するには
別のウィルスに感染させる必要があるんだろ?
単に画像を閲覧しただけで感染するなら、対策とか無理じゃないか?
twitterとかfacebookはウィルスだらけになるぞ
755:nobodyさん
14/06/20 18:27:17.32 I3iP4JeK
という事はつまり、jpgファイルであったとしても >>754のアドバイスを参考にすると
jpgのみアップロード可能にしておけば、ウィルスに感染していない人が
その画像を閲覧する分には何も影響がないと言う事でしょうか?
ウィルス感染している人自体が少ないと思うので被害は少ないですよね。
756:nobodyさん
14/06/20 18:38:27.21
>>755
と言うより、防ぎようがない気もする。
でも、画像アップロード出来るWebサービスは日々オープンしてるわけだし、
そこまで神経質になっても仕方ないよ。
757:336
14/06/20 18:41:21.97
再エンコード
758:nobodyさん
14/06/20 20:23:31.26
それいいね、目から鱗
759:nobodyさん
14/06/20 21:08:45.45 5NSL3HdG
>>757
詳しく
760:nobodyさん
14/06/20 22:04:51.68
>>759
画像を読んで再エンコードすれば
余計なバイナリが入ってたとしてもなくなる
761:nobodyさん
14/06/21 00:35:05.85
Wordpressが確か再エンコードしていた気がする
762:nobodyさん
14/06/21 00:48:00.43
それは再エンコードじゃなくてサムネイル作ってるだけでは。
まあサムネイル作って無効な画像かどうか(ライブラリによるがnullが返ったり真っ白画像になったり)を調べるという手はあるかも。
763:nobodyさん
14/06/21 01:03:27.67
今どき、JPEGだけのアップローダーにどんな役割があるのか興味あるな。
764:nobodyさん
14/06/21 03:26:03.92 f1vlSuIg
↑
jpgでいいやん。jpgでエロ画像みえるやん。jpgで072できるやん。
765:nobodyさん
14/06/22 12:51:34.63
以下のテーブル2つ(hasOne)で、profilesデータをsaveする際に
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つにまとめてしまえば話しは早いのですが
別の都合でそれができません。
766:nobodyさん
14/06/22 14:20:31.99
>>765
profileにuser_idを渡すはX
profileにidを渡さないと。
767:nobodyさん
14/06/22 15:16:50.54
>>766
ありがとうございます。
解決しました。
768:nobodyさん
14/06/22 22:23:19.92
Model::create()したらテーブルカラムのDEFAULT値が勝手にdataにセットされるの止めて欲しいわ。
おかげでUPDATE処理時に更新対象じゃないカラムが勝手にDEFAULT値に変わってえらい事になった。
なにしてくれるんじゃい。
769:nobodyさん
14/06/22 23:25:35.42
whitelistつかえ
770:nobodyさん
14/06/24 16:40:44.26
Cakeでシステム作って、Apache benchしたらRequests per secondが1.5ぐらいと激遅。
DBアクセスやめて固定のJSONを1行返すだけにしても大きく変わらず。
Core i7のWin8のXampp環境でもCentOSのVPS環境でもそんな感じ。
いくらCakeが遅いって言っても遅すぎると思うのだが、なにかおかしいです?
771:nobodyさん
14/06/24 17:44:24.00
キャッシュ使えや
772:nobodyさん
14/06/24 17:59:57.86
そういうレベルではない
根本何か間違えてるだけだろ
773:nobodyさん
14/06/24 21:11:44.93
ネットワークの問題かApache benchの使い方間違えてるに1ペリカ
774:nobodyさん
14/06/24 23:54:56.03 NjjfXiKQ
検索ボタンを押した際に
GETパラメータでcakeのコントローラにアクセスを掛けたいのですがどうすれば良いでしょうか?
本来は、検索ボタンを押した際に①でコントローラのメソッドにアクセスを
したいのですが、②になってしまいます。
①・・・期待しているGETアクセス
URLリンク(test.com)
②・・・想定外に生成されるURL
URLリンク(test.com)
コントローラ
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>
775:nobodyさん
14/06/25 00:05:21.21
javascript
776:nobodyさん
14/06/25 00:44:49.49
>>774
GETパラメータなら②で正しいだろ
777:nobodyさん
14/06/25 00:53:52.36
>>774
HTTPのお勉強からやり直しましょう
778:774
14/06/25 01:07:07.36 1IpoS71w
>>776 >>775
やはり通常のFormではCakePHP用のURLを生成する事は出来ないみたいですね。
仕方無いので検索ボタンをクリック時に動的にURLを組み替えてリダイレクトする事により実装する事にします。
779:nobodyさん
14/06/25 01:11:23.04
例に突っ込むのもアレだが
ID指定した時点で検索というよりただの詳細表示のような
780:nobodyさん
14/06/25 01:50:00.94
javascriptでやるのが無難だな。俺もそうしてるし。
781:nobodyさん
14/06/25 12:47:26.75
検索項目が増える時のことを考えると、
2の方がいいと思うんだが
782:nobodyさん
14/06/25 13:46:34.28 cgps1MKk
>2の方がいいと思うんだが
どういうこと?
783:nobodyさん
14/06/25 14:13:35.35
そのあたりはAPIの設計に関わることだからなんとも言えない
784:nobodyさん
14/06/25 14:21:54.78
検索項目が増えるのにGETでやりたいってのは、設計ミスじゃね?
それならPOSTにしろよ
785:nobodyさん
14/06/25 15:45:34.59
>>782
ルーティングや引数の設定が面倒。
ていうか大体の検索エンジンとかgetパラメータでやってね?
786:nobodyさん
14/06/25 20:30:38.80
冪等かつ安全な処理はGETが普通っすね
POSTだとキャッシュもされないし
787:nobodyさん
14/06/25 21:43:08.93
記事中の
hoge.com/app/webroot/media/tarot.jpg
が読まれた際、
hoge.com/media/tarot. jpg
が読まれるようにしいのですが、良い方法ないでしょうか?
nginxでやってます。
ちなみにhoge.comは自分のドメインです。
788:nobodyさん
14/06/25 21:50:26.46
>>787
意味わからん
789:nobodyさん
14/06/25 22:32:59.91
>>788
すいません。自己解決しました。
790:nobodyさん
14/06/26 02:12:49.47
せっかくだから張っておけよ
URLリンク(www.matomater.com)
791:nobodyさん
14/06/26 21:12:17.80 ceT3Qpnq
linux のシェルについての話しはどこですれば良いですか?
ここだとすれ違いですよね?
792:nobodyさん
14/06/26 21:39:46.70
php で日付の正規表現を行いたいのですが
以下の形式の日付型文字列であればOK、違っていればNGと厳密なバリデーションチェックを掛けたいのですが
どうすれば良いでしょうか?
2014-06-10
- で split してチェックを掛けるしかないのでしょうか?
793:nobodyさん
14/06/26 22:09:00.35
$check = '2014-06-10';
$isValid = date('Y-m-d', strtotime($check)) === $check;
794:nobodyさん
14/06/26 22:17:51.48 h6oXqOHu
>>793
サンクス!
ここまで短く判定出来るなんて、、、
驚きです。
795:nobodyさん
14/06/26 22:29:39.04
PHPって質問スレないのか?
796:nobodyさん
14/06/26 22:32:22.88
date関数って第二引数にfalse突っ込んでも0と同じ扱いで動くのか
きめえな
797:nobodyさん
14/06/26 22:57:46.67
>>796
大丈夫だよ。あなたの顔に比べれば断然綺麗なものですよ^^b
798:nobodyさん
14/06/26 23:04:09.80
これがPHPerです
799:nobodyさん
14/06/26 23:54:58.72
キモくても何でも動けばいいんだよ。形にこだわり過ぎるのはよくない
800:nobodyさん
14/06/27 11:40:50.24
デザインやHTMLコーディングもやっている人に聞きたいんだけど、
先にHTMLコーディングをしてある程度のファイルを作って、
その後にViewファイルを作る?それともいきなりViewから作る?
俺はトップページとか主要なページのHTMLコーディングを先にして
それからView化するだけど、後から変更する事が多くて二度手間になるのを感じる。
だから、先にデザインとかレイアウトとか全て完璧に決めて、
それからView化した方が良いのかな?とも思うんだけど、
すぐに動きを見たいから、Controllerと同時に作りたくなる。
結果、直してばかりで面倒になって投げ出したくなるw
そんなアプリばかり作ってるんだけど、何か良いやり方はないかな?
801:nobodyさん
14/06/27 12:27:28.48
手書きラフ
↓
Photoshop
↓
マークアップ
↓
CSS
802:nobodyさん
14/06/27 12:28:38.18
>>800
後からの変更を少なくする調整力があれば問題なし。
803:nobodyさん
14/06/27 13:16:39.40
>>801
俺も同じやり方なんだが、後からマークアップを変えたくなる。
>>802
Cakeの場合、レイアウトやエレメントに分けるだろ?
その後にマークアップの変更やデザインの追加・変更などが入ると、
何度もやり直したりして、投げ出したくなる
804:nobodyさん
14/06/27 16:32:32.36
たしかにビューは混沌とするからな
俺はややこしくなりそうな場合だけは
ビューには echo 以外は一切記述しないのを目標に、
専用のヘルパーを作って加工のロジックは隠ぺいするようにしてる。
それなりに扱い易くはなるが、万能ではない。
805:nobodyさん
14/06/29 22:38:39.46 qTkMeLPd
JavaScriptを用途ごとにファイルに分けると、本番環境にアップする最に圧縮する手間が凄くかかります。
そこで、1ファイルにゴリゴリ共通関数も纏めて書いてますが、皆さんはどうしてますか?
806:nobodyさん
14/06/29 22:52:42.19
>>805
gruntでまとめて処理
coffeescriptで用途ごとにファイル作成ってやってるよ
807:nobodyさん
14/06/30 08:44:32.98
僕はgulpちゃん!
808:nobodyさん
14/06/30 14:03:48.42
そもそも圧縮アップしない。ファイルサイズが少々減る程度で、大して変わらん
809:nobodyさん
14/06/30 16:21:21.70
phpstormで自動圧縮できるんじゃないだろうか。
810:nobodyさん
14/06/30 17:47:06.48 cdSjRfUN
>>808
圧縮しないとソースコード筒抜けじゃん。
難読化しないといけないんとちゃいまっか?
811:nobodyさん
14/06/30 20:09:23.46
>>810
Javascriptだろ?筒抜けで困ることなんて無いと思うが
812:nobodyさん
14/06/30 20:22:22.30 cdSjRfUN
>>811
我ながらコードセンスが良い
綺麗なコードなのでぱくられたくないなーとw
813:nobodyさん
14/07/01 19:58:59.95
Cakeでtwigを使いたいんだが
TwigView以外で使えるのない?
814:nobodyさん
14/07/02 17:32:38.36
Cake2系でhasManyの絞り込みってどうすれば良いのでしょうか?
$this->Model->hasMany['Hoge']['conditions'] = array('Hoge.type' => 1);
$data = $this->Model->find('all');
とすれば、hasMany先のテーブル内で絞り込みは出来るのですが、
絞り込みの結果、「一致するデータがない」場合でも、
Modelのデータは取得できてしまいます。
なにか良い書き方、方法は無いでしょうか?
815:nobodyさん
14/07/02 23:13:55.69
cakeのmodelのリレーションってみんな使ってるのかな。
俺的には使わないほうが後々面倒がないという考えなんだが。
816:nobodyさん
14/07/03 00:15:43.70
>>814
Hoge モデルを、hasMany とは別に存在チェック用に hasOne でアソシエーション張る
$hasOne = array('HogeOne' => array('className' => 'Hoge'));
で、検索条件に HogeOne.id != null を加える。
817:nobodyさん
14/07/03 00:16:37.86
>>815
何のためにCake使ってんのか意味不明すぎる
818:nobodyさん
14/07/03 00:28:54.40 Gi3lwfX6
仮に2chの様な規模の掲示板をcakeで構築しようとしたら
(寧ろ構築は出来るかもしれないけど)
パフォーマンス劣化が半端無い気がするのですが如何でしょうか?
2chがDBを使わずにログファイルで管理しているのは
やはりFW何かを使うと速度低下が否めないからでしょうね。
819:814
14/07/03 00:36:46.85
>>816
出来ました!!!こんな方法があったんですね。
大変勉強になりました。ありがとうございました。
820:nobodyさん
14/07/03 00:56:55.55
2chのread.cgiってmod_cgidso使っててC言語製じゃなかった?
どの程度の性能なのかしらんけどFW以前にPHP使ってる時点ですでにサーバの数増やさざるを得なさそうな気が
ORMやFW使うとさらに遅くなるってのは間違いない
821:nobodyさん
14/07/03 01:07:33.29
>>818
cakeが他のFWより極端に遅いってのがあるから
FW以前の話だな
822:nobodyさん
14/07/03 01:11:12.39
URLリンク(www.techempower.com)
FacebookみたいにHHVM使うなら話は別かもな
Cakeがまともに動くのかしらんが
823:nobodyさん
14/07/03 01:28:28.14
>>822
hhvmが早いといっても、php-raw(素のphp)の2倍しか速くない
cakeは遅すぎて計測不能
cakeよりちょっと速いといわれる
railsやsymfonyでphp-rawで書いたのの1/10の速さでしかない
cakeじゃ無理だな
fuelでphp-rawの半分、phalconでphp-rawと同じぐらいだからここら辺で書かないと
他はyafやphpixieな
824:nobodyさん
14/07/03 01:37:08.52
Cakeで頑張るならPHPの中間コードキャッシュ入れて
DBスレーブサーバ(ないしAmazon RDS)とロードバランサ使って
ユーザが増えた時はサーバ台数多めで対応
徐々にコードやキャッシュを調整して台数や一台あたりに要求される性能を減らしていくって感じか
速度もある程度はスケールアウトでカバーできるいい時代になった
まず新サービスに大勢の人が来る保証もないし
動作速度より開発速度や書きやすさを優先するからこそのFWっしょ
そんなに速度が気になるなら最初からPhalconやJavaやJVM系言語やC#でも使うよろし
825:nobodyさん
14/07/03 01:41:59.54
>>824
バランスじゃないのかな?
railsは突出して開発速度?が速いけど
cakeだとphalconと比べてもあまり大差ないみたいだしな
流石に10倍速度が違う≒アクセス10倍の差があるだからな
あくまで、速度が重要視される場合な。
cakeで捌ける人数しかこない前提なら問題ないし
元の話の2chなら話にならないよな
826:nobodyさん
14/07/03 01:56:21.45
URLリンク(www.techempower.com)
URLリンク(www.techempower.com)
CakePHPが遅すぎて計測不能なんじゃなくてフレームワークが増えすぎて中の人が徐々に手が回らなくなっているのでは?
過去のを見るとちゃんと結果が載ってる回もある
ところでDartの結果良いな
いつの間にこんなに
827:nobodyさん
14/07/03 02:01:52.84
>>826
githubでコード集めてるから
人気がなくなった(外部のコードを書く人がいなくなった)ってほうになるな
828:nobodyさん
14/07/03 02:04:48.87
>>826
r7でrailsぐらいか
829:nobodyさん
14/07/03 02:05:10.64
開発者がCakePHPから他に移ってるのもあるだろうし
Cakeでベンチ対決に参加しても悲しくなるだけだし
830:nobodyさん
14/07/03 02:09:04.71 JnE+cuIZ
>>820 >>821 >>822 >823
そもそも2ch位のトラフィックを捌けるFWとかなさそうですね。
831:nobodyさん
14/07/03 02:10:17.86 JnE+cuIZ
>>824
流石に2chクラスだとCakeじゃ無理でしょ。
832:nobodyさん
14/07/03 02:11:15.57 JnE+cuIZ
cakeで作られている大規模サイトで有名なのはどこですか?
833:nobodyさん
14/07/03 02:14:41.70
2chクラスの人が集まるコンテンツを作る方が大変なんですけど
834:nobodyさん
14/07/03 02:33:52.59
>>830
'捌ける'の前提がよく分からんが
RDBとORMありのFW使った上で2chと同じサーバスペック同じ台数で捌けるかどうかってことか?
Cakeには無理だろうが全FWが駄目と判断するのは早計でしょ
2chのWebサーバって未だにEvent MPMがまともに使えないVer.のApacheだし
書き込みのほうのbbs.cgiは所詮Perlだしガチガチに高速化されてるとも思えないな
URLリンク(www.techempower.com)
>>833
まったくだ
835:nobodyさん
14/07/03 02:34:55.37
>>832
nanapiとランサーズ
836:nobodyさん
14/07/03 02:56:35.42 JxPD7Z4w
>>834 >>835
ランサーズの重たさを見てやはりcakeの底が見えました。
ところでなんで ランサーズ がcake使ってるってわかったの?
837:nobodyさん
14/07/03 03:02:55.42
公式ブログで公表してるから。
838:nobodyさん
14/07/03 14:01:04.31
>>826
やっぱJVM系優秀だなぁ。