1 名前:nobodyさん [2014/03/01(土) 17:03:24.57 ID:8AJ9GD6E] CakePHPは、Ruby on Railsの概念の多くを取り入れた、Rails流の高速開発とPHPの機動性を兼ね備えたフレームワークです CakePHPから派生したLithium(li3)も専スレできるまではここでどうぞ 質問するときはCakePHPのバージョンを書きましょう ※他フレームワークとの比較等はスレ違いです ■本家 www.cakephp.org/ APIドキュメント api.cakephp.org/ github - cakephp github.com/cakephp the Bakery bakery.cakephp.org/ Issue cakephp.lighthouseapp.com/dashboard CheatSheet[1.2] (PDF) cakephp.org/files/Resources/CakePHP-1.2-Cheatsheet.pdf ■日本語公式 cakephp.jp/ フォーラム cakephp.jp/modules/newbb/ cookbook(マニュアル) [2.x] book.cakephp.org/2.0/ja/index.html [1.3] book.cakephp.org/ja ※前スレ kohada.2ch.net/test/read.cgi/php/1378659370/
143 名前:nobodyさん mailto:sage [2014/03/23(日) 15:38:47.72 ID:???] 自分も>>126 はヘンだと思ったので試してみたけど再現しなかった わざわざ>>129 みたいに第三引数を指定しなくても 第一引数のデータに含まれていないカラムは INSERTでもUPDATEでも勝手にNULLになったりはしないはず 第一引数に余計なカラムが含まれていると疑ったほうがいいんじゃないかい? あとjQueryとかAjaxとかはPHP側から見れば何の関係もないよ
144 名前:142 mailto:sage [2014/03/23(日) 17:13:40.00 ID:???] >>143 同意
145 名前:nobodyさん mailto:sage [2014/03/23(日) 20:23:17.81 ID:???] cake関係ないけど、左上のアイコンって動いてたっけ? jp2.php.net/
146 名前:nobodyさん mailto:sage [2014/03/24(月) 03:32:24.08 ID:???] >>143 あれ、そうだったっけ。 普通のformばかりで、たまにajaxでやると、何かであー・・・ってなった記憶があったから、 質問を読んで、それだと思っちゃった。 でも、逆に一部のカラムをNULLに戻すのはどうするんだったか・・・
147 名前:nobodyさん mailto:sage [2014/03/24(月) 08:45:17.91 ID:???] ajaxで空の(余計な)パラメータをクエリストリングにくっつけちゃってるんじゃね
148 名前:nobodyさん mailto:sage [2014/03/24(月) 10:59:37.56 ID:???] バリデーションで、inListの反対(配列に一致しないと成功) というルールって無いですよね? 予約語となる名前を使用したらエラーを出したいのですが
149 名前:nobodyさん mailto:sage [2014/03/24(月) 14:22:54.30 ID:???] バリデーションくらい自作しちゃいなよ ブール値返す関数だったらなんでも設定できるし
150 名前:nobodyさん mailto:sage [2014/03/24(月) 16:13:10.55 ID:???] HTML5でビューを作成しているのですが、 閉じタグを />じゃなくて > にしたいです。 何か設定項目があるのでしょうか?
151 名前:nobodyさん mailto:sage [2014/03/24(月) 17:24:59.51 ID:???] 何がやねん?
152 名前:nobodyさん mailto:sage [2014/03/24(月) 17:31:22.12 ID:???] コアのHTMLヘルパー開いてソースいじれば?
153 名前:nobodyさん mailto:sage [2014/03/24(月) 21:44:26.29 ID:???] >>148 欲しいバリデーションルールがなければ簡単に自作できるよ ライブラリのValidation.phpにルール名そのままの関数があるので 同じような形で関数を作ればいい 作った関数はモデルかビヘイビアで実装すれば 元々あるルールと同じように使えるようになる 詳細は以下のページを参考にどうぞ ttp://book.cakephp.org/1.3/ja/The-Manual/Common-Tasks-With-CakePHP/Data-Validation.html ttp://book.cakephp.org/2.0/en/models/data-validation.html ※2.x系は日本語訳されてるページが少ない・・・1.3の情報でも問題ないはず
154 名前:nobodyさん mailto:sage [2014/03/25(火) 00:00:22.77 ID:???] >>153 自作できるのは知ってるのですが、 inListの逆はあるのかな?と思い、質問しました。 conditionsのNOT INみたいな感じであると思ったのですが
155 名前:nobodyさん mailto:sage [2014/03/25(火) 00:47:37.46 ID:???] >>150 自分もHTML式の記述にも切り替えられたらいいなと思うけど残念ながらなさそう 実現方法は下記ページの「HtmlHelper が出力するタグの変更」に載ってた ttp://book.cakephp.org/2.0/ja/core-libraries/helpers/html.html#id1 このマニュアルだとloadConfigを各ビューで呼ぶみたいだけど、 コントローラのヘルパー設定で var $helpers = array('Session', 'Html'=>array('configFile'=>'html5_tags')); みたいに設定すればloadConfigを自動的に呼ぶようになるみたい
156 名前:nobodyさん mailto:sage [2014/03/25(火) 09:37:47.58 ID:???] >>155 ありがとうございます!出来ました! コントローラーから指定できるのが便利ですね。勉強になります。
157 名前:nobodyさん mailto:sage [2014/03/25(火) 10:10:21.88 ID:???] CakeにTwigView組み込んで使ってる人いる? フィルタの追加方法を知りたいんだが
158 名前:nobodyさん mailto:sage [2014/03/25(火) 11:56:36.78 ID:???] 1:フォームにて画像を登録する 2:以下のようにsetFlashにて成功メッセージを表示 $this->Session->setFlash('編集しました'); $this->redirect(array('action'=> 'edit')); 処理は実行されるものの、ブラウザキャッシュが残った状態になります。 ビューにCache-Controlのmetaタグを入れたり、 コントローラーに$this->response->disableCache()をしても変わりません。 なにかよい方法はないでしょうか? ちなみにIE11やchromeでなり、firefoxではなりません。
159 名前:nobodyさん mailto:sage [2014/03/25(火) 18:59:45.10 ID:???] >>158 ブラウザキャッシュが残っている状態を、 もっと具体的に書いて欲しい。
160 名前:nobodyさん mailto:sage [2014/03/25(火) 19:50:57.49 ID:???] >>159 2でリダイレクトしているのに、1の画像が表示されます。 更新ボタンを押すと新しい画像に変わっているので、 ブラウザキャッシュが効いていると思われます。
161 名前:nobodyさん mailto:sage [2014/03/25(火) 20:26:46.16 ID:???] >>160 それなら、その場しのぎ的だけど、画像へのURLに ?t=23193123 みたくUNIXタイムスタンプつけたらいいんじゃね。 別URLになるからキャッシュされててもとりにくるはず。
162 名前:nobodyさん mailto:sage [2014/03/26(水) 03:05:43.85 ID:???] >>161 その機能あるけど。。。
163 名前:nobodyさん mailto:sage [2014/03/26(水) 17:31:59.85 ID:???] Treeビヘイビアを使う以外で、簡単に表示順番を変える方法ってないですかね? カテゴリではなく、単なる一覧の表示順番を変えたいだけなので、 Threeビヘイビアで必要なカラム(parent_id、lft、rght)を追加するのは無駄に思いまして。
164 名前:nobodyさん [2014/03/26(水) 18:54:27.87 ID:BNu4KpVt] OrderableBehavior, SortableBehavior, PriorityBehavior とかあったと思う 今は自作で賄ってる
165 名前:nobodyさん mailto:sage [2014/03/27(木) 01:08:52.80 ID:???] >>164 OrderedBehaviorが一番有名みたいですね。 こちらを試してみます。ありがとうございました。
166 名前:nobodyさん mailto:sage [2014/03/27(木) 01:40:31.88 ID:???] >>162 あるけど?
167 名前:nobodyさん mailto:sage [2014/03/27(木) 02:30:47.64 ID:???] bakeで生成されるコードのエンコードを デフォルトでUTF-8、LFにすることってできますか? windows環境の話です
168 名前:nobodyさん [2014/03/27(木) 05:28:16.61 ID:GNd/C0+Y] ひんがら目気色悪すぎこっち見んな死ね。ひんがら目気色悪すぎこっち見んな死ね。ひんがら目気色悪すぎこっち見んな死ね。 ひんがら目気色悪すぎこっち見んな死ね。ひんがら目気色悪すぎこっち見んな死ね。ひんがら目気色悪すぎこっち見んな死ね。 ひんがら目気色悪すぎこっち見んな死ね。ひんがら目気色悪すぎこっち見んな死ね。ひんがら目気色悪すぎこっち見んな死ね。 ひんがら目気色悪すぎこっち見んな死ね。ひんがら目気色悪すぎこっち見んな死ね。ひんがら目気色悪すぎこっち見んな死ね。 ひんがら目気色悪すぎこっち見んな死ね。ひんがら目気色悪すぎこっち見んな死ね。ひんがら目気色悪すぎこっち見んな死ね。 ひんがら目気色悪すぎこっち見んな死ね。ひんがら目気色悪すぎこっち見んな死ね。ひんがら目気色悪すぎこっち見んな死ね。
169 名前:nobodyさん mailto:sage [2014/03/28(金) 17:36:04.92 ID:???] ルーティングを以下のようにしているとします。 Router::connect('/', array('controller' => 'pages', 'action' => 'display', 'home')); アクセスしたページがトップページ(ホーム)か否かを調べるのって $this->params['pass']の中にhomeがあるかどうか調べる方法以外ありますでしょうか?
170 名前:nobodyさん mailto:sage [2014/03/29(土) 07:45:47.19 ID:???] 何かスレ止まってると思ったら、板移転してたのか
171 名前:nobodyさん mailto:sage [2014/03/29(土) 12:11:30.75 ID:???] 2chて何となく一人よがりでカッコ悪い
172 名前:nobodyさん mailto:sage [2014/03/31(月) 18:12:43.27 ID:???] お問い合わせ(inquiries)の返信テーブルを inquiry_repliesかinquiry_messagesかで小一時間悩んでるんですが どっちがいいと思いますか?
173 名前:nobodyさん mailto:sage [2014/03/31(月) 18:48:56.48 ID:???] >>172 返信用と分かってるならinquiry_repliesでいいんじゃねーの。 用途に合った明確な名前をつけるのは分かりやすくていいよ。 ただ、あとから返信以外の用途にも使うみたいなことになって、 名前と用途が合わなくなるというのも、ありがちな話。 これに1時間悩むんだったら、 リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック とか 読んでみたらいいんじゃね? 命名の良し悪しは場合によりけりで、いくら考えてつけても裏目に出ることはあるし、 読んだからといって悩まなくなるわけじゃないけど。
174 名前:nobodyさん mailto:sage [2014/03/31(月) 19:49:24.29 ID:???] >>173 その本に命名規則について書いてあるんでしょうか? 正直、プログラミングよりも命名や設計で物凄く時間がかかっています。 後からやり直したくなることも何度かあるし。 やっぱり同じコード・同じ設計を何度も書くというのは避けたいので、 汎用性の高い、カスタマイズ性のある設計を考えるのですが、 そうすると時間ばかりかかって先に進めません
175 名前:nobodyさん mailto:sage [2014/03/31(月) 21:19:58.42 ID:???] 汎用性はあまり考え過ぎない方がいい事のが多いけどね。 クラス名やメソッド名をBusinessLogicとかexecuteとかにしてあとあと泣くのは自分。
176 名前:nobodyさん mailto:sage [2014/03/31(月) 21:29:42.21 ID:???] >>174 規則については書いてないかな。 もっといえば、命名についてだけ書いてあるわけじゃない。 けど、読みやすいコードに、よく考えられた変数名は重要だし、 4部のうちの1部は命名に関してだよ。 kadoppe.com/archives/2013/01/book-readable-code.html 自分は読み途中だからてきとうに見つけた感想文でもはっとく。 自分が読んだとこまでの感想としては、 読んだところで悩まずに書けるようにはならないかな。 けど、納期に追われておざなりになるところだし、 読めばちょっと自分で気を使っただけだと、 気を配りきれない要素を拾えるんじゃないかなと思っている。 あくまでリーダブルコード。設計については書いてないよ。
177 名前:nobodyさん mailto:sage [2014/03/31(月) 23:45:02.75 ID:???] ストアドプロシージャとか実行するにはどうすれば良いの?
178 名前:nobodyさん mailto:sage [2014/04/01(火) 00:05:45.77 ID:???] >>175-176 Cakeの場合、ある程度の決まり事があるのでだいぶ楽なのですが、 やはり、自分で納得行かないコードのまま進むことがあります。 かといって、他人のコード見ても分かりやすいとは思わないし。 (有名所のOSSのソースしか見てませんが とりあえず質問した件は、inquiry_repliesにしてみます。
179 名前:nobodyさん mailto:sage [2014/04/01(火) 00:36:15.98 ID:???] >>177 ベタ書きして Model::query() すまん、本当は俺もよく分からん
180 名前:nobodyさん [2014/04/01(火) 00:50:20.63 ID:lnxBtai1] うんごぶりぶりんこ!!!!ドビュビュビュビュドバババババブッ!!! ドリュルリュルウリュリィブブブブブブッッ!!!!あへあへうんこまん!!!ぶりっちょ!!! ケツの穴からドババババババババッバwwwwwwwwwwwwWWWW wwwwwwwwwwww WWWwwwwwwwwwww??? ? ? ? ? ? ? ????? ????????wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww なお、まにあわんもよう
181 名前:nobodyさん mailto:sage [2014/04/01(火) 07:10:33.33 ID:???] 只働きだろうと持ち出しだろうと、働かなきゃ空白期間だよ それをちゃんと理解しているなら浪人生活なり語学留学なり存分に楽しんだらいい
182 名前:nobodyさん mailto:sage [2014/04/01(火) 09:58:54.32 ID:???] なぜこのスレなんだw
183 名前:nobodyさん mailto:sage [2014/04/02(水) 05:14:01.71 ID:???] ↓の方法で、ControllerからModelにアクセスすると public function hoge() { $this->loadModel('Hoge'); $Users = $this->Hoge->find('all'); } このようなエラーが表示されてしまいます。 Missing Datasource Error: Datasource class Mysql could not be found. Datasource is not found in Model/Datasource package. ↓の中には"empty"というファイルしか入っていないのですが、 cakephp\app\Model\Datasource やはり何かファイルが足りないのでしょうか?
184 名前:nobodyさん mailto:sage [2014/04/02(水) 06:25:25.12 ID:???] >>183 cakephp/lib/Cake/Model/Datasourceにあるっしょ。 Missing Datasourceになる理由は、情報不足でよくわからんけど。
185 名前:nobodyさん mailto:sage [2014/04/02(水) 11:09:44.80 ID:???] フォームヘルパーのnameが data[Post][test1] のラジオボタンがあるとします。 idが、PostTest10、PostTest11、PostTest12となってしまうのですが、 これをPostTest1_0、PostTest1_1、PostTest1_2 みたいにする事って出来ないのでしょうか?
186 名前:nobodyさん mailto:sage [2014/04/02(水) 13:11:18.07 ID:???] 2、3人での小規模開発では使う必要無いですよね?自分でライブラリ作った方が
187 名前:nobodyさん mailto:sage [2014/04/02(水) 13:32:26.95 ID:???] 1人だけどCake使ってるよ。 自分でも作れるけど、車輪の再発明みたいな感じで面倒だし。
188 名前:nobodyさん mailto:sage [2014/04/02(水) 13:53:48.92 ID:???] 必要かと聞かれればその人次第だけど、 1人でも3人でもCakePHP使うよ。 3人のうち2人がほかのフレームワークに慣れてるなら、それに合わせるけど。
189 名前:nobodyさん mailto:sage [2014/04/02(水) 15:43:50.23 ID:???] >>187 色んなもの開発して行くうちにそれなりにライブラリは出来て行くから再発明にはならないでしょ 自分で同コストで出来ることをフレームワーク習得にさらに時間費やすならその理由が無いと 少人数小規模すぎると効率化のメリットよりも、処理の重さや習得の手間、細かい所に手を入れ出すと途端にコストが増す、無駄にシステムが大きくなるとかのデメリットのが目立つよね
190 名前:nobodyさん mailto:sage [2014/04/02(水) 16:12:41.55 ID:???] >>185 自動で振られるIDは制御不可能です。 FormHelper をオーバーライドしてカスタマイズするしか無い。 個別に指定するなら第二引数のidキーで指定できます。
191 名前:nobodyさん mailto:sage [2014/04/02(水) 16:16:36.30 ID:???] >>189 Zendみたいなライブラリの寄せ集め的なFWだと 他のプロダクトでも流用できたりするけど、 CakePHPとかはFWに拘束されてしまうからな。 もっと結合度の低い構成にしてほしいとは思う。
192 名前:nobodyさん mailto:sage [2014/04/02(水) 16:21:34.23 ID:???] >>186 人数は関係ないと思うよ 理解程度と何を作るかによる 一部分しか使わないときにはCakeは使わないな
193 名前:nobodyさん mailto:sage [2014/04/02(水) 17:26:18.77 ID:???] >>189 後半2行はCakeだろうとオレオレだろうと一緒じゃね? 開発人数や規模が変われば冗長化するのは当然じゃん。 なら、みんなで共有・共通事項で合わせられる、 Cakeのような既存のFW使うほうが、よっぽど効率がいい
194 名前:nobodyさん mailto:sage [2014/04/02(水) 17:33:22.17 ID:???] ファイル数個で済むようなちょっとしたアプリなのにcake使ったら、久々にソース読んだ時とかに絶対無駄に分かりづらくなる
195 名前:nobodyさん mailto:sage [2014/04/02(水) 18:00:04.95 ID:???] 全くのPHP初心者がCakeはじめるならそうなるだろうけど、 経験者ならFW使う前に自作ライブラリ作ってるだろうし、 ファイル数個で済む程度のアプリなら、それ使えば良いと思うが。
196 名前:nobodyさん mailto:sage [2014/04/02(水) 21:01:45.37 ID:???] 少人数だからとオレオレでやってたとこに途中参加する人のことを考えてあげてください。 CakePHPは完璧でもないし、すこし合わないプロジェクトな事もあるけど、 CakePHPであると言うだけで、それに慣れてる人を探すことができるよ。 オレオレに慣れてる人は、今いるメンバーだけだよ。 本当にちょっとしたものなら、自作ライブラリでもいいけど、 今ならComposerでライブラリとってきて、必要なとこだけ自分で書くのがいいと思うよ。
197 名前:nobodyさん mailto:sage [2014/04/02(水) 21:31:51.71 ID:???] cake使っててテーブルの値勝手に全部消去された事あるんだけど あれなんなの仕様?
198 名前:nobodyさん mailto:sage [2014/04/02(水) 21:37:35.82 ID:???] cakeは遅いからな。下手なものには使えない
199 名前:nobodyさん mailto:sage [2014/04/02(水) 22:21:06.03 ID:???] >>184 あ、そっちにおいてあるんですね。 Datasource class Mysql could not be found. って書いてあるから、てっきりファイルが何か足りないのでは?と思っていました。 もう少しソースを見なおしてみます。 >>186 1人だけど使ってます。MVCを楽にやりたかったから。
200 名前:nobodyさん mailto:sage [2014/04/02(水) 22:34:26.36 ID:???] >>197 それだけじゃ分からん 多対多のリレーションテーブルの属性値が消されたとか?
201 名前:nobodyさん mailto:sage [2014/04/03(木) 00:25:42.94 ID:???] >>198 これよく分かんない。 CakePHPがボトルネックになって要求満たせなかったことが無いんだよねぇ。
202 名前:nobodyさん mailto:sage [2014/04/03(木) 00:46:56.03 ID:???] >>201 お前の会社がオーバースペックのサーバ納品してボッてるだけだろ
203 名前:nobodyさん mailto:sage [2014/04/03(木) 02:21:11.20 ID:???] >>202 サーバー安いしねぇ。 運用コストも含めて、要求以内だよ。 チューニングの余地は、アプリケーションのコードにもインフラ構成にも、普通に残ってると思うけど。 サーバー代が1割2割減ったところでたいした額じゃない。 それより、開発・保守開発が効率よくできるほうが、開発費がかからなくてありがたいね。
204 名前:nobodyさん mailto:sage [2014/04/03(木) 08:59:09.29 ID:???] cakeは開発工数の少なさ、技術者の安さはトップクラスだから開発費は安いんだよな。 前も上がってたけど、ソーシャル系は厳しいな。用途次第ってことだ。 ボトルネックの経験がないところには発注するのは怖いな。ネックになった時に投げ出される可能性が高いってことだろ?
205 名前:nobodyさん mailto:sage [2014/04/03(木) 10:11:20.11 ID:???] なのに、市場ではボトルネックを一切無視して、価格競争してるからな
206 名前:nobodyさん mailto:sage [2014/04/03(木) 14:48:37.49 ID:???] それでいいんじゃね。 パフォーマンスとかうるさく言うんなら、FWやORMはおろか動的言語使うこと自体が要件に合ってないだろ。
207 名前:nobodyさん mailto:sage [2014/04/03(木) 15:13:32.96 ID:???] >>203 インフラ代がいくらのレンジの話よ?
208 名前:nobodyさん mailto:sage [2014/04/03(木) 15:28:38.04 ID:???] 1000円以下
209 名前:nobodyさん mailto:sage [2014/04/03(木) 16:46:48.77 ID:???] >>204 ボトルネックの経験って?
210 名前:nobodyさん mailto:sage [2014/04/03(木) 19:56:07.66 ID:???] >>197 俺も前なった 1.3のいくつかの時までのバグだったから 今はもう起きないんじゃないか?
211 名前:nobodyさん mailto:sage [2014/04/03(木) 20:11:13.79 ID:???] 関係ない話で申し訳ないが、 2ch乗っとられたってマジらしいな 2chドットsc に移行するらしいが、 '2ch' . '.sc' ってのをNGワードにしているらしい
212 名前:nobodyさん mailto:sage [2014/04/03(木) 23:37:19.01 ID:???] >>207 数万〜数十万/月 ってところだね。
213 名前:nobodyさん mailto:sage [2014/04/03(木) 23:41:04.71 ID:???] どれどれと思ってやってみたら ERROR:さくらが咲いてますよ。 ってなって書き込みできんかった。 どうでもよかったけど、サーバー側でNGワードとかされると引くわ・・・
214 名前:nobodyさん mailto:sage [2014/04/04(金) 15:29:28.73 ID:???] >>212 人件費込み?
215 名前:nobodyさん mailto:sage [2014/04/04(金) 19:02:20.90 ID:???] そうだよ
216 名前:nobodyさん mailto:sage [2014/04/05(土) 00:43:47.97 ID:???] >>214 人件費は入ってないよ。 インフラが得意でインフラ方面のタスクをよくやってる人はいるけど、 インフラだけやってるって人はいないからね。 ただ、自分たちで何でもやらないとなものもあれば、 ある程度は作業を依頼できるインフラ屋さんに頼んでるのもあったから、 そういう場合は一部入ってると言えるかもしれない。
217 名前:nobodyさん mailto:sage [2014/04/05(土) 16:20:54.14 ID:???] >>214 数万で込とかw
218 名前:nobodyさん mailto:sage [2014/04/05(土) 23:26:04.89 ID:???] 開発費は人件費だから 込みじゃないと比較できんな
219 名前:nobodyさん [2014/04/06(日) 01:43:29.71 ID:Iec7CVL5] Cake3 触った人いる? さっきちょっと見てみたんだけどさ、Model の扱いがぜんぜん違うんだな。 これ Cake2 から移行するのって最初から作るのと同じぐらい大変かもしれないな。 というか、それ以上に苦労するかもしれないな。
220 名前:nobodyさん mailto:sage [2014/04/06(日) 03:31:19.46 ID:???] >>218 ?
221 名前:nobodyさん mailto:sage [2014/04/06(日) 04:05:49.26 ID:???] >>219 > さっきちょっと見てみたんだけどさ、Model の扱いがぜんぜん違うんだな。 やっとあるべき姿になったという感じだよね 元々Railsにインスパイアされてできたはずなのに、配列で返ってくるところは絶対変だったよな まぁ、PHP4に引きずられたんだろうけど…
222 名前:nobodyさん mailto:sage [2014/04/06(日) 10:13:55.10 ID:???] 人件費込みのインフラ費が 一人月超えてくると 開発費との比較が必要になってくるな それまではcakephpで悩まんな
223 名前:nobodyさん mailto:sage [2014/04/06(日) 20:45:00.75 ID:???] 今日は寒いな まだストーブが要るとは思わんかった、灯油がもうないよ…
224 名前:nobodyさん mailto:sage [2014/04/07(月) 10:47:00.11 ID:???] フォームのidを手動でCake式に変換する方法(関数)ってありますか? test_hogeというnameならTestHogeにするみたいな
225 名前:nobodyさん [2014/04/07(月) 18:57:19.67 ID:LGjnvRjr] >>224 FormHelper::domId()
226 名前:nobodyさん mailto:sage [2014/04/07(月) 19:46:25.07 ID:???] >>225 思い通り出来ました!ありがとうございました。
227 名前:nobodyさん mailto:sage [2014/04/08(火) 11:37:39.61 ID:???] チェックボックスを使ったバリデーションで質問です。 ルールを以下のようにしているのですが、 'rule' => array('multiple') チェックボックの値に0がある場合、1つ選択しただけではfalseになります。 0という値を許可するには、独自バリデーションを作る必要があるのでしょうか?
228 名前:nobodyさん [2014/04/08(火) 14:29:13.60 ID:DFrq8Phr] >>227 Validation::multiple() を見たら、 $check = array_filter((array)$check); if (empty($check)) { return false; } ってなってるから、ここで弾かれちゃうんだね。 フィールドの値を変更するか、自作するしか無いね。 コールバック渡せるように作ってくれれば良いのになぁ。 Cakeは、この辺の中途半端な不自由さが結構あるんだよな。
229 名前:nobodyさん mailto:sage [2014/04/08(火) 14:55:21.04 ID:???] >>228 わかりました。自作します。 半角英数字のチェックを配列対応してなかったり、 確かに不自由さは多いですね。
230 名前:nobodyさん mailto:sage [2014/04/08(火) 22:23:04.86 ID:???] >>229 checkboxは他のtypeと違って1個もチェックしないと、空文字列すら送らないんだよね。 なのでFormHelperでチェックボックスを生成した場合、hidden value="0"がチェックボックスと一緒に用意される。 だからバリデーションもそれにあわせて、0は真偽でいうと偽の値になってるんだ。 オレオレフレームワークからCakePHPに乗り換えたときは、そういうところに押し付けがましさを感じていたけど、 慣れてしまえばまぁ合理的かなと思うよ。 チェックボックスをDBにあるマスターテーブルから生成するような場合(割とよくあると思う)、 valueはそのテーブルのidにするのが自然だし、idは1から始まるのが基本的だからね。 なので、CakePHPで開発していくなら、バリデーションを自作するより、 チェックボックスのvalue="0"は未選択とするように、変更するのをお勧めするよ。
231 名前:nobodyさん mailto:sage [2014/04/09(水) 10:48:16.40 ID:???] バリデーションで便乗質問ですが、 名前の姓・名のように、1つの項目で2つの入力箇所がある場合、 バリデーションはどうすればいいのでしょうか? フォームのnameが 姓:data[User][name][sei] 名:data[User][name][,mei] として、これ自体のバリデーションは独自関数を作れば出来ますが、 個別にエラーを出力することって出来ませんよね? 例えば「姓が未入力です」「名を日本語で入力してください」 とか出力したいのですが、validateのルール指定では 名前(name)に対する指定で、その下の連想配列に対する 姓(sei)や名(mei)には指定できないです。
232 名前:nobodyさん mailto:sage [2014/04/09(水) 11:56:22.61 ID:???] cakeでも2.4.7でauthコンポーネント利用して認証入れてますが、 f5連打でセッション切れ起こしませんか? ググって調べてでてきた情報で Config/core.php最下部に Configure::write('Security.cookie', 'cakephpfdebackend'); Configure::write('Session.checkAgent', false); Configure::write('Security.level', 'low'); を追記してますが効果無し。 IE、FireFox、Chrome全てでセッション切れます。 2.3時代からcomposerでアップデートして現在最新ですが 2.3時代でも起きていたように思います。 開発途上段階でaclを入れようと、 alaxos/aclプラグインを導入しましたが、 設定画面で全てのアクションに対するRoleごとの権限をajaxで取りにいく部分があって、 既存のアクションが50はあるので、Role3つ*50で150回のajaxリクエストが走りますが この途中で確実にセッション切れを起こしてしまい、困ってます。 セッション切れが起こるタイミングはまちまちで、リクエスト回数によるものではなさそうです。 $this->Auth->allow()を置いて認証を使わないようにしないと設定できない状況です。 何か手がかりになりそうな情報はないでしょうか?
233 名前:nobodyさん mailto:sage [2014/04/09(水) 12:49:01.33 ID:???] >>231 バリデーションもだけど、その構造だとsave()できなくないか? 姓:data[User][sei] 名:data[User][mei] どういうテーブルスキーマか知らんけど、普通にこれでいいんじゃないの?
234 名前:nobodyさん mailto:sage [2014/04/09(水) 13:22:45.53 ID:???] >>233 beforeSaveで1つのnameにするので大丈夫かと思います。 単純にsei、meiを分ける方法が一番簡単だと思うのですが、 日付のフォームとか、Cakeは連想配列で管理しているので 同じように[name][sei]と出来れば良いなと思っています。
235 名前:nobodyさん mailto:sage [2014/04/09(水) 21:52:21.95 ID:???] >>232 どう? www.matomater.com/9769/
236 名前:nobodyさん mailto:sage [2014/04/10(木) 06:44:41.50 ID:???] >>234 でも日付って、年月日で別個にバリデーションできたっけ? 日付としてひとまとまりだったような気がしたけど。 日付はそのままsave()出来るような気がしたけど、これって特殊だよね。 日付で出来る事だからといっても、その辺CakePHP内であまり汎化されてないような気がする。 まぁdata[User][name][sei] でポストするのはうまくいくとしたとしても、 バリデーションはすっきりとは行かないんじゃないか?
237 名前:nobodyさん mailto:sage [2014/04/10(木) 09:24:25.58 ID:???] >>236 確かにそうですね。 それに年月日の場合、個別にバリデーションする必要無い気もします。 単に「日付が正しくありません」というメッセージを出せば 年が抜けてるのか月が抜けているのか関係無いような。 でも、この辺がもう少し柔軟性あればいいですよね やっぱりフォーム側を[name_sei]のように変えるしか無いんですかね・・・
238 名前:nobodyさん [2014/04/10(木) 10:57:39.51 ID:ekNccxsF] >>237 バリデーションしてから beforeSave 出来るわけだから、 スキーマを name にして、ルールを sei, mei の2つにする。 んで、 beforeSave で値を結合すれば良いんじゃない? ただ、バーチャルフィールドを使わない理由は? name を1フィールドにしなくてはならない要件があるの?
239 名前:nobodyさん [2014/04/10(木) 11:10:48.64 ID:ekNccxsF] え、dateフィールド見たいにフォームで name の下に作ってるのか! >>236 の言うように date や datetime は Model で各要素を個別に扱えるようには作られてない。
240 名前:nobodyさん mailto:sage [2014/04/10(木) 11:12:27.99 ID:???] あ、 何も考えずに age てた。sage にした方が良かったんかな
241 名前:nobodyさん mailto:sage [2014/04/10(木) 12:41:05.32 ID:???] >>235 情報ありがとうございます。 if(!isset($_SESSION)) session_start(); を試したところ、セッションは切れないのですが CAKEのセッション機構の設定が全部死んでしまいました。 これで解決させるとまずそうです。 最初からやっとけという話ですが、 CakeSessionを追ってみたところ、Session.autoRegenerateがtrueの場合 ある一定数のリクエストがあるごとにセッションIDを変更しており、 その変更のタイミングで同時リクエストが走ると そこからセッション切れが発生する事がわかり、 autoRegenerateをfalseにして解決しました。
242 名前:nobodyさん mailto:sage [2014/04/10(木) 14:11:17.70 ID:???] Cakeのセッション周りは昔から謎の挙動をするよな 詳細は忘れてしまったけど、要注意だ
243 名前:nobodyさん mailto:sage [2014/04/10(木) 14:21:07.20 ID:???] そういうのがあるからフレームワークは怖い Strutsみたいのだとまた違うけれど
244 名前:nobodyさん mailto:sage [2014/04/10(木) 14:33:01.94 ID:???] >>237 FormHelperのコードを見るとわかるけど、バリデーションのエラーメッセージの表示は、 Modelname.fieldname という構成を想定してるよ。 バリデートルールはModelに書くから、Controllerが保持する$validationErrorsも、 [Modelname][fieldname]という2次元配列で格納されている。 $this->Form->input('Modelname.fieldname') で、その$validationErrorsの中身と対になるようになってる。 例外でモデル名を省略できるケースはいくつかある。 $this->Form->create('Modelname'); $this->Form->input('fieldname'); Controllerのusesが1個の場合と、複数ある場合1個目のモデル、usesを書かずコントローラー名からモデル名がわかる場合は、 $this->Form->create(); $this->Form->input('fieldname'); でもいけたような気がする。たぶん
245 名前:nobodyさん mailto:sage [2014/04/10(木) 14:37:55.60 ID:???] Cakeで一番困ったのは>>197 のバグでテーブル全部消されたこと
246 名前:nobodyさん mailto:sage [2014/04/10(木) 15:58:45.85 ID:???] てか、そんなこと1回もなったことないけど、 ほんとにそんなバグあるの?
247 名前:nobodyさん mailto:sage [2014/04/10(木) 16:11:15.52 ID:???] bakeしてんだけどviewだけが何故か生成されない Cake2.3.5で、Windowsのコマンドプロンプトからbakeしてます cake bake view テーブル名 を実行しても Welcome to CakePHP v2.3.5 Console --------------------------------------------------------------- App : app Path: appのパス --------------------------------------------------------------- と出るだけで終了して何も起きない インタラクティブでやると Would you like to create the views for admin routing? (y/n) [n] > の後で終了して、何も起きない
248 名前:nobodyさん mailto:sage [2014/04/10(木) 16:11:16.67 ID:???] 本当なら使用しているバージョン、どんなコードで再現したかなど 詳細を書いてほしいものだ レスがなければ嘘だと判断していいと思う
249 名前:nobodyさん mailto:sage [2014/04/10(木) 16:13:07.05 ID:???] >>246 WHERE 1=1 でDELETE発行するバグが1.3.4まであった web.archive.org/web/20110803234417/http://cakephp.lighthouseapp.com/projects/42648/tickets/250-model-delete-bug ググれば過去スレも出てくるよ、12ホール目
250 名前:nobodyさん mailto:sage [2014/04/10(木) 18:03:59.14 ID:???] 興味あったんで本当にテーブル削除されることがあるのか試してみた 以下のコードをコントローラのアクションに入れて実行 $this->テーブル->delete(); バージョン 1.3.2 1.2.8 1.2.0 のいずれも発生しなかった >>249 の提示した記事は英語なのであまり深くは読めていないが ライブラリのmodel.phpを修正して$model->exists()をコメントアウトしてみたところ、 一応再現はできた まとめると @モデルのexistsメソッドをidが指定されていなくてもtrueを返すように上書き Aモデルのdeleteメソッドを引数なしで実行 したときに DELETE FROM `テーブル` WHERE 1 = 1 が実行される(もちろん全テーブルじゃなくて1テーブルだけだが) まあほとんどの人には縁のない現象といえるかな もっと単純に再現できるコードがあるのなら提示してほしい
251 名前:nobodyさん mailto:sage [2014/04/10(木) 18:47:46.61 ID:???] beforeDeleteはどこいった
252 名前:nobodyさん mailto:sage [2014/04/10(木) 19:06:10.92 ID:???] 普通に使ってるだけで起きたんだよなあ。 古いことなので今更調べる気にはなれない。
253 名前:nobodyさん mailto:sage [2014/04/10(木) 20:45:55.49 ID:???] なるほどね、よくわかった オラクルとかのトリガーでも自テーブルへの処理は参照すらできないから 記事のbeforeDeleteのような実装は単なるコーディングミスと判断していたよ 普通の処理とみなす人もいるってことね
254 名前:nobodyさん mailto:sage [2014/04/10(木) 20:58:33.13 ID:???] Cakeに限らずだが、FMって問題が起きた時に その原因を突き止めるのに苦慮することが多いよね
255 名前:nobodyさん mailto:sage [2014/04/10(木) 21:09:13.27 ID:???] そんなことよりbakeできなくて困ってるんですが
256 名前:nobodyさん mailto:sage [2014/04/10(木) 21:58:13.10 ID:???] FMってなんだ
257 名前:nobodyさん mailto:sage [2014/04/11(金) 21:38:10.95 ID:???] フォームヘルパーの月(month)とday(day)って どうして「01」と「1」に分かれているんですかね? 値はどちらも0が入っているのに
258 名前:nobodyさん [2014/04/15(火) 08:59:05.93 ID:eAedbEAo] バリデーションルールで「url」を使うと、日本語が通らない? そういうもんなの?使えねーじゃん
259 名前:nobodyさん mailto:sage [2014/04/15(火) 12:13:57.73 ID:???] ちょっとハマったので情報投稿します。 2系(たぶん2.3〜)でCookieコンポーネントを使って ユーザーデータ等を保存する場合、 $this->Cookie->write('Auth.User', $this->request->data['User']); みたいにすると、 $this->Cookie->delete('Auth.User'); で削除できません。ログアウトの時にこれを入れても削除されません。 $this->Cookie->write('AuthUser'); で保存して $this->Cookie->delete('AuthUser'); で削除はOKでした。 どうやらドット記法が原因のようです。 ログインフォームの自動ログインで上記のような書き方を 推奨しているサイトがちらほらあったので、注意してください。 ログインフォーム以外も何かしらCookieコンポーネントを 使うケースがあるかと思いますが、 出来るだけCookie名にドットを入れないほうが良いみたいです。
260 名前:nobodyさん mailto:sage [2014/04/15(火) 14:27:17.30 ID:???] >>258 そもそもURL中のマルチバイトはURLエンコードしないとRFC的にだめなんじゃない? 違ったっけ?
261 名前:nobodyさん mailto:sage [2014/04/15(火) 15:56:03.67 ID:???] >>258 ためしてみたけど普通に使えたよ 使ったバージョンは2.4.6 App::uses('Validation', 'Utility'); debug(Validation::url('http://ほげ.com/漢字.htm')); 結果はtrue
262 名前:nobodyさん [2014/04/15(火) 17:25:40.94 ID:eAedbEAo] まじ?こっちは2.3.8でダメだった バージョン上げてみようかな
263 名前:nobodyさん mailto:sage [2014/04/15(火) 18:29:39.18 ID:???] $this->User->id = $id; $user = $this->User->read(); みたいな書き方って、あんまりやらない方が良いみたいだね。 この後にsave(更新)したら、request->dataに無いカラムも更新しようとして 空更新されて焦ったわ
264 名前:nobodyさん mailto:sage [2014/04/15(火) 23:31:53.92 ID:???] >>263 readなんて使ったことないなー。
265 名前:nobodyさん mailto:sage [2014/04/16(水) 13:37:09.77 ID:???] Shellファイルをブラウザ上から確認する方法って無いですかね? いちいちサーバにアップしてSSHからコマンド実行して〜 というのが面倒に感じまして。簡単に実行確認出来る方法があれば教えて下さい。
266 名前:nobodyさん mailto:sage [2014/04/16(水) 15:23:58.68 ID:???] >>265 できるけど、結構大変だろうなと予測。 というかそもそも設計がおかしんじゃない? Shellでもブラウザでも呼び出せるタスクを切り離すべきだと思う。
267 名前:nobodyさん mailto:sage [2014/04/16(水) 15:28:42.31 ID:???] >>266 Shell内でコントローラを読み込んでアクションを実行できるんですね。 それならブラウザ上でも確認できるので問題なさそうです。
268 名前:nobodyさん mailto:sage [2014/04/16(水) 16:33:30.72 ID:???] >>267 え、何でそういう方向に行くの? まぁ、好きにすればいいけど
269 名前:nobodyさん mailto:sage [2014/04/16(水) 18:28:16.11 ID:???] >>268 すまん。何が言いたいか分からん
270 名前:nobodyさん mailto:sage [2014/04/16(水) 19:41:36.54 ID:???] >>266 は設計がおかしいんじゃないかとか質問内容からは読み取れないことを 書いているうえに肝心の実現方法を書いていないので不適切な回答だと思うが >>267 の結論はもっと意味不明で全く>>266 と噛み合っていないので >>268 で呆れられてしまったということだろう たぶん>>266 が「できる」と書いたのは execやpopenでcake.shやcake.batを呼び出すことじゃないかと予想してみる OS依存なので個人的にはお勧めできないが Shellとコントローラの両方から「標準で」使えるものはモデルだけだと思うよ コントローラやコンポーネントやヘルパーなどをnewして使うようなやり方は 動作はするかもしれないが正しいやり方とは思えないな
271 名前:nobodyさん mailto:sage [2014/04/16(水) 20:07:27.22 ID:???] 横だけど、正しい・正しくないは関係ないと思うけどな。 「正しい書き方ではないけど動作する」なら、それでいいんじゃないか? こんな事言うといつも「複数で開発する場合は迷惑だ」とか言う奴いるけど、 目的は「動作する」事であり、綺麗なソースを書くことじゃない。 それに複数人で開発するなら 「良い書き方がわからなかったから、この方法にした」 って説明すればいいだけだろ。情報共有しろよ。
272 名前:nobodyさん mailto:sage [2014/04/16(水) 20:14:11.37 ID:???] 小難しい話は置いといて、 >>265 は Shell で呼び出す処理を別の Model だか Lib のクラスに移して、 ShellからもControllerからも実行できるようにすれば良い
273 名前:nobodyさん mailto:sage [2014/04/16(水) 20:39:15.00 ID:???] Shell使う処理で、Modelだけで済む事って無いと思うんだけどなぁ よくあるメール一斉送信とかShellで作るけど、 その時の条件分岐やらModelに対する指示なんかはControllerに書くわけで。 メールの送信自体はライブラリ化しても良いと思うけど。
274 名前:nobodyさん mailto:sage [2014/04/16(水) 22:05:21.32 ID:???] テストのためにそういうのが出来ないかって話なんだから正しい必要はないだろ それができるとテストが便利で実装が楽でバグが減るんだっていうんだから 設計だとか綺麗かどうかとか関係ないだろ
275 名前:nobodyさん mailto:sage [2014/04/16(水) 23:00:28.05 ID:???] いつからテストの話になったんだ
276 名前:nobodyさん mailto:sage [2014/04/17(木) 00:07:52.39 ID:???] テスト機能の事じゃなくて、「試す」って意味の「テスト」じゃないか?
277 名前:nobodyさん [2014/04/17(木) 00:13:59.42 ID:SXCfNI/g] 大規模なシステムになった場合、PHPデバッガー等を使って 1行ずつステップデバッグ実行をした方が効率が良いものなのでしょうか? cakePHPとかみたいなFWを使っている場合には デバッガーがそこまで追い切れるのか若干気になります。 皆さんは、PHPで業務システムを作る時にはデバッガーを使っていますか? それとも dumpで開発していますか?
278 名前:nobodyさん mailto:sage [2014/04/17(木) 00:19:14.66 ID:???] >>277 人海戦術に頼る。クラウドソーシングとかで安く依頼できるしな。 やっぱ、システムだけで対応しようとすると、何かと抜けが出るよ。
279 名前:nobodyさん mailto:sage [2014/04/17(木) 00:26:59.39 ID:???] 自分はeclipseとXdebugを使ってステップ実行できる環境を使ってるよ ステップ実行といってもすべての行を1行ずつ実行する必要はなくて 処理を追いたいところにブレークポイントをつけておけばいいだけ ステップ実行するまでもない場合はdebug関数で変数の中身を画面で確認してる >>261 2.3.8で試してみたらfalseになったんでバージョンが原因みたいだね >>263 自分もreadは使ったことなかったんで試してみたところ、再現を確認 なかなか嫌な動きだわ
280 名前:nobodyさん mailto:sage [2014/04/17(木) 02:16:53.26 ID:???] スレチだが、新しい方に移動した方がいいの?
281 名前:nobodyさん [2014/04/17(木) 06:59:31.54 ID:+GQ/cWTu] CakePHPで複合主キーで構成されるテーブル同士の結合は どのように実現すればよいのでしょうか? [テーブル左] 列A*、列B*、列D*、列E* [テーブル右] 列A*、列B*、列C (*は主キー) のような構成で、 [テーブル左] に [テーブル右] を 列A、列Bをキーとして 列C を外部結合したいと考えています。 $virtualFields で1つにまとめて、$primaryKeyで定義しなす?
282 名前:nobodyさん mailto:sage [2014/04/17(木) 09:07:56.95 ID:???] >>277 デバッカ使ってる エクステンションでなければ中まで追えるので、cakeも追えるよ
283 名前:nobodyさん mailto:sage [2014/04/17(木) 12:22:28.87 ID:???] 特性スープやでぇ
284 名前:nobodyさん mailto:sage [2014/04/17(木) 12:35:55.72 ID:???] 特性スープやでぇ
285 名前:nobodyさん mailto:sage [2014/04/17(木) 14:12:21.40 ID:???] >>281 'joins' キーでちまちま作りこんだほうが良い。 というか、以前調べたときはそれしか無理だった。 他に方法あれば教えて欲しい。 Cake3 から複合キー対応らしいけどね。
286 名前:nobodyさん mailto:sage [2014/04/17(木) 23:16:01.90 ID:???] ツリービヘイビアを使ったカテゴリで、 親カテゴリから子カテゴリまで何階層あるか調べる方法って無いですかね? 無限にカテゴリを作れるのではなく、ある程度階層指定したいと思います。 簡単に表示する方法があるなら、エラー判定しやすいのですが
287 名前:nobodyさん mailto:sage [2014/04/17(木) 23:45:58.91 ID:???] 親要素の条件は、子エンティティと比較して lft がより小さく且つrghtがより大きいので 子エンティティを $child、モデルのエイリアスを Foo 、階層を $depth とする場合 こんな風にしたら取れるはず $childLft = $child['Foo']['lft']; $childRght = $child['Foo']['rght']; $conditions = array('Foo.lft <' => $childLft, 'Foo.rght >' => $childRght); $depth = $Foo->find('count', compact('conditions')); // 親の階層数
288 名前:nobodyさん mailto:sage [2014/04/18(金) 05:19:37.24 ID:???] >>285 ありがとうございます Cake3で対応ですか!期待して待ってます
289 名前:286 mailto:sage [2014/04/18(金) 10:55:29.76 ID:???] >>287 以下の様な階層だとして テスト→子テスト→孫カテゴリ 287さんの方法では、「子テスト」を選ぶと1と表示され、 「孫テスト」を選ぶと2が表示されるなど、1つ上の階層番号しか表示されません。
290 名前:286 mailto:sage [2014/04/18(金) 10:56:34.64 ID:???] すみません。2行目を書き間違えました。 テスト→子テスト→孫カテゴリ ではなく テスト→子テスト→孫テスト でした。
291 名前:nobodyさん [2014/04/18(金) 13:04:19.06 ID:N7yuefiZ] Cakeをインストールすると最初の画面でSecurity.saltとcipherSeedを変更する様に言われるけど、これは何桁でもいいの?
292 名前:nobodyさん mailto:sage [2014/04/18(金) 13:22:10.90 ID:???] いいよ
293 名前:nobodyさん [2014/04/18(金) 13:39:34.12 ID:N7yuefiZ] そうか、ありがとう
294 名前:nobodyさん mailto:sage [2014/04/18(金) 13:45:58.83 ID:???] >>290 じゃぁ1足せよw 「親の階層数」って書いてるじゃん
295 名前:nobodyさん [2014/04/19(土) 16:38:03.71 ID:2kVxcvEH] Cake人気ないな… とうとうCakePHP bake なんたら でぐぐると食べ物のケーキの記事ばかり出てくるようになってしまった
296 名前:nobodyさん mailto:sage [2014/04/19(土) 17:11:08.54 ID:???] ねぇよ
297 名前:nobodyさん mailto:sage [2014/04/19(土) 20:27:05.90 ID:???] Cakeは海外で特に人気ないからな
298 名前:nobodyさん mailto:sage [2014/04/19(土) 20:37:49.07 ID:???] え、国内の方がないと思ってた
299 名前:nobodyさん mailto:sage [2014/04/19(土) 20:39:03.09 ID:???] PHPは日本で特に人気ないけどな
300 名前:nobodyさん [2014/04/19(土) 20:57:23.19 ID:2kVxcvEH] そうか?PHPの仕事しか来たことないわ。Rubyとかどこで使ってるの?って感じ
301 名前:nobodyさん mailto:sage [2014/04/19(土) 21:42:49.70 ID:???] >とうとうCakePHP bake なんたら でぐぐると食べ物のケーキの記事ばかり出てくるようになってしまった どこの検索エンジンだよそれw
302 名前:nobodyさん mailto:sage [2014/04/20(日) 01:46:02.06 ID:???] 人気っていうか、すごい使われるけど評価は低いよね。 よく叩かれてる
303 名前:nobodyさん mailto:sage [2014/04/20(日) 09:30:13.88 ID:???] PHPは日本でも使われてるんだが やっぱり、Ruby、Perlの使われ方度合いに比べると 全然使われてないことになる
304 名前:nobodyさん mailto:sage [2014/04/20(日) 09:57:55.62 ID:???] ruby使ったことないけど、phpとさほど変わらんのでしょ? 最終的には好みの問題みたい。
305 名前:nobodyさん mailto:sage [2014/04/20(日) 10:42:30.47 ID:???] どこが変わらないって言ってるかはわからんが RailsとCakeの今が、いい意味でも悪い意味でもRubyとPHPの差の一つ
306 名前:nobodyさん mailto:sage [2014/04/20(日) 11:18:10.27 ID:???] 利用者が増えるに従ってアンチが増加するのは何でも一緒。 FWは型を提供するものだから、その型が気に入らなければ別のを使うしか無い。 無ければ作るか自分を合わせるしか無い。 明確な問題点があるんだったら、コミュニティに参加して改善を提案してみたことはあるのかな? 他を調査してより良い解決策があるんなら、具体的にその利点をここの読者に教えてあげようとしないのかな? まぁ、自分一人で決めることも出来ないから、愚痴を言いたくなる気持ちもわかる。
307 名前:nobodyさん mailto:sage [2014/04/20(日) 11:24:53.22 ID:???] >>303 え? Perlは人口減って、昔から使ってた一部の会社が使ってるばかりだし、 Rubyは最近ようやく増えてきたかなって程度だろ。
308 名前:nobodyさん mailto:sage [2014/04/20(日) 11:30:03.25 ID:???] >>307 海外での人気に比べるとな
309 名前:nobodyさん mailto:sage [2014/04/20(日) 12:34:02.33 ID:???] 正直サーバーサイドはFWが何でもいいわ
310 名前:nobodyさん mailto:sage [2014/04/20(日) 12:38:12.89 ID:???] ガラパゴス言語 Perl,Ruby ガラパゴスFW CakePHP って言いたいのか 実際そうだけどな
311 名前:nobodyさん mailto:sage [2014/04/20(日) 14:23:15.37 ID:???] 世界的なシェアだと最近はLaravelが一番なんだっけ? (シェアじゃなくてGitHubの人気だったか?) あと、YiiとかCIもCakePHPよりは上なんだよな確か。 でもオープンソースだからといってもシェアに関してはプロプライエタリと同じで、 必ずしも良い物が普及するとは限らないよな。 たとえばWordPressみたいに、酷いシロモノでも マーケティングが勝利するオープンソースもあるし。
312 名前:nobodyさん mailto:sage [2014/04/20(日) 15:51:49.84 ID:???] rubyはネットでは見るけど、現場では全然見ない
313 名前:nobodyさん mailto:sage [2014/04/20(日) 17:08:13.64 ID:???] Yiiは共産圏で人気らしいね
314 名前:nobodyさん mailto:sage [2014/04/20(日) 18:32:52.08 ID:???] >>312 織田裕二みたいですね
315 名前:nobodyさん mailto:sage [2014/04/21(月) 09:50:09.63 ID:???] Rubyって単に取り上げてるブログが目につく(ブクマなどで)だけで 多いと錯覚しているだけだろ? そら、PHPみたいに成熟された言語より Rubyのような比較的新しくてそれほど一般化していない 技術のほうが注目を浴びるに決まってるわw それと混同して「PHPは人気なくなった」とか目論見が甘すぎ
316 名前:nobodyさん mailto:sage [2014/04/21(月) 15:57:26.42 ID:???] RubyもPHPと同時期に出来た言語なんだが
317 名前:nobodyさん mailto:sage [2014/04/21(月) 18:53:01.40 ID:???] ScalaとGoが注目浴びてるな
318 名前:nobodyさん mailto:sage [2014/04/25(金) 10:49:57.10 ID:???] リファラをコントローラーとアクションに分解する機能ってありませんよね? $this->referer()だと普通にリファラが表示されるだkです。
319 名前:nobodyさん [2014/04/25(金) 13:39:29.24 ID:s6GwqSqm] CakeRequest にそれっぽい機能あった気がする
320 名前:nobodyさん mailto:sage [2014/04/25(金) 15:10:13.57 ID:???] Routerクラスがそれを担当している気がする 何を作ろうとしてるのか知らないけど、 リファラを使って何かをする機能ってだけで、ちょっと不穏な空気を感じてしまう。
321 名前:318 mailto:sage [2014/04/25(金) 16:51:30.47 ID:???] >>320 管理画面なのですが、例えば削除(delete)する場所って 一覧(index)と詳細(detail)で出来るとします。 削除した後に全部一覧に戻せば良いだけかもしれませんが、 改ページした後に削除した場合、リファラで前の画面に戻したいのです。 つまり、要件として ・一覧から削除 → 前のページにリダイレクト ・詳細から削除 → 一覧にリダイレクト となります。これをするために、リファラを分析して 「どこのページからのアクセスか?」がわかれば簡単と思い、質問しました。
322 名前:nobodyさん mailto:sage [2014/04/25(金) 17:39:22.10 ID:???] 削除なら GET じゃなくて FormHelper::postLink() を使うのが今の標準だと思うんだけど、 その場合なら引数にリダイレクト変数をセットできる。 コントローラ側で汎用的な処理をしたいんならやっぱりリファラでやったほうが良いのかも。 URLの解析は >>320 の言ってる通りRouter::parse()メソッドがある。 ただ、リファラをそのまま渡してもダメで、 アプリケーションのルートからのパスにする必要があったかもしれない。
323 名前:nobodyさん mailto:sage [2014/04/27(日) 13:54:25.75 ID:???] 海外の求人ちょっと見たらRailsが多くて驚いた PHPばっかりの日本はガラパゴスなんかな
324 名前:nobodyさん mailto:sage [2014/04/27(日) 15:43:07.45 ID:???] rails多いといっても phpのほうがrubyよりは一応多いでしょ rubyの9割以上の求人がrailsってのがすごいよな railsだとpostgresql求人増えてるし cakephp+mysqlのスペックだとガラパゴスになりそうだな
325 名前:nobodyさん mailto:sage [2014/04/27(日) 16:13:12.62 ID:???] せやかて駆動
326 名前:nobodyさん mailto:sage [2014/04/27(日) 17:19:21.88 ID:???] ん? Cakeスレかここ。 phpの安直さは最高! fuelphp使ってる。 確かにCakeはオワコンだな。
327 名前:nobodyさん mailto:sage [2014/04/27(日) 18:49:35.25 ID:???] どこまでいっても、所詮Railsのパチもんだしな。 Djangoとはえらい違いだ。
328 名前:nobodyさん mailto:sage [2014/04/27(日) 20:59:13.46 ID:???] >>326 fuelphpって既に終わってるやん
329 名前:nobodyさん mailto:sage [2014/04/27(日) 21:32:10.25 ID:???] fuelは結局始まらなかったなぁ
330 名前:nobodyさん mailto:sage [2014/04/27(日) 21:46:02.47 ID:???] >>324 herokuのおかげかrailsはPostgreSQL対応が盛んだからな
331 名前:nobodyさん [2014/04/27(日) 23:09:38.66 ID:9dL9KMPJ] 少し変化あったけど 結局またMySQLだよな
332 名前:nobodyさん mailto:sage [2014/04/28(月) 00:46:19.25 ID:???] 日本は逆にRailsかCakeのどっちかになってる気がする ま、CakeもRailsのパクリなんであれだが
333 名前:nobodyさん [2014/04/29(火) 10:06:00.47 ID:uHAmZpKN] 脆弱性の緊急パッチが出てるんで 業務で使っている人は早めに当てておけよー。 1.3.x と 2.4.x 両方。
334 名前:nobodyさん mailto:sage [2014/04/29(火) 10:12:45.43 ID:???] まじか、と思って見に行ったら 公式からしてやられてしまったのか?w cakephp.org/ 502 Bad Gateway
335 名前:nobodyさん [2014/04/29(火) 10:46:44.84 ID:uHAmZpKN] 公式復旧したっぽいね。 ちなみにこの脆弱性報告したのは実は俺。
336 名前:nobodyさん mailto:sage [2014/04/29(火) 11:06:47.62 ID:???] 前から気付いてたので、フォーム改ざん検知使ってなかった。
337 名前:nobodyさん mailto:sage [2014/04/29(火) 11:19:04.21 ID:???] 英語読めないんだけど、今回は何が問題なの?
338 名前:336 mailto:sage [2014/04/29(火) 11:26:35.82 ID:???] 家出ちゃったんで確認できないんだけど、今回の修正、別アクションにpostするときでも大丈夫?
339 名前:nobodyさん mailto:sage [2014/04/29(火) 11:32:28.27 ID:???] >>335 クリタタカシさんありがとうございます
340 名前:nobodyさん [2014/04/29(火) 11:35:24.45 ID:uHAmZpKN] >>337 SecurityComponent のフォーム改竄防止機能に穴があった。 作りにもよるけど hidden で受け取る id とかを改竄されると、任意のレコードを更新可能。 Model::save() を呼ぶ時に第一引数の $data に更新したいデータだけを渡すか 第三引数の $fieldList を明示的に指定するかしてれば平気。 >>338 別のアクションでも平気。 FormHelper が作る action をセキュリティトークンに入れてるから。 ただ、JavaScript で動的に action を変更している場合はブラックホールに飲まれるかと。
341 名前:nobodyさん [2014/04/29(火) 11:38:39.55 ID:uHAmZpKN] >>339 どういたしまして
342 名前:nobodyさん mailto:sage [2014/04/29(火) 11:44:15.83 ID:???] CakeのSecurityComponentっていっぱい穴ありそう 俺が触ってたのは1.3の頃だけど使いたくないと思った
343 名前:nobodyさん mailto:sage [2014/04/29(火) 11:46:59.01 ID:???] すげえ
344 名前:336 mailto:sage [2014/04/29(火) 11:48:47.49 ID:???] >>340 ありがとう。これで自作form改竄対策から離れられる。
345 名前:nobodyさん mailto:sage [2014/04/29(火) 16:06:25.97 ID:???] セキュリティトークンどころかformまで今まで自作してたけど Cake純正のもの使った方が楽なんかな
346 名前:nobodyさん mailto:sage [2014/04/29(火) 17:12:05.84 ID:???] おまえなんでCakePHP使ってんの?
347 名前:nobodyさん mailto:sage [2014/04/29(火) 19:09:18.76 ID:???] 昔はもうちょっと使ってる人多かったんだよ それでメジャーなのかなぁと思って、手を出した 結構色々これで作っちゃったから、以後ずるずる
348 名前:nobodyさん mailto:sage [2014/04/29(火) 20:08:51.90 ID:???] 確実に昔よりは使っている人が多いと思うよ
349 名前:nobodyさん mailto:sage [2014/04/29(火) 22:33:23.36 ID:???] 少なくとも俺の観測範囲では減っているな
350 名前:nobodyさん mailto:sage [2014/04/30(水) 08:44:08.14 ID:???] ワンオフ型が減り、量産型が増えたから 環境によっては増えたと思い、環境によっては減ったと思う
351 名前:nobodyさん mailto:sage [2014/04/30(水) 13:45:58.87 ID:???] また、アップデートかw
352 名前:nobodyさん mailto:sage [2014/04/30(水) 15:08:14.56 ID:???] う、本当だ
353 名前:nobodyさん mailto:sage [2014/05/01(木) 00:53:29.70 ID:???] なんでもかんでもhappy to announce ってバカみたいだな
354 名前:nobodyさん mailto:sage [2014/05/01(木) 02:19:18.51 ID:???] まぁ、決まり文句だからしゃーないけど、 文言考えるの面倒くさいんだろうな
355 名前:nobodyさん mailto:sage [2014/05/02(金) 00:08:32.26 ID:???] >> 340 これ本当?diffをちょっとみただけだけど、post先のURLを改竄されても通ってたのが、通らなくなってよりセキュアだねってだけで、hiddenの改ざん検知とか関係なくない?
356 名前:nobodyさん mailto:sage [2014/05/02(金) 00:25:59.26 ID:???] 嘘だったらこめん。明日よくみてみる。
357 名前:340 mailto:sage [2014/05/02(金) 00:35:18.90 ID:???] >>355 本当だよ。 俺が Mark Story 氏に実際の攻撃手順を書いて送ったのが26日。 アップデートが 2.5.0-RC2 に脆弱性のアナウンスなしで反映されたのが27日。 1.3.18 と 2.4.8 にアナウンスありで反映されたのが29日。 かなり深刻な脆弱性だったからこういう日程になったんだけど、 結果的にはミスがあって 2.4.9 が出ることになった。 必ず攻撃が成功するかはサイトの作り次第だけれど、 仕事で使ってるならアップデートした方がいいよ。
358 名前:nobodyさん mailto:sage [2014/05/02(金) 00:43:14.81 ID:???] >>356 今回の問題は、field改ざん検知のハッシュ値が、別のurlでも使えてしまう問題。 例えばForm->textでfield1,filed2を生成しPOSTされた値を保存するaction1、 Form->textでfield1のみ生成しPOSTされた値を保存するaction2があるとする。 action2でform改ざんを行って手動でfield2を追加しPOSTする場合を考える。 一緒にPOSTされるhash値の不一致でエラーとなるのが本来の仕様。 ただし以前のバージョンだと、form改ざんと併せてhash値をaction1のものを引用すると、 エラーにならずにfiled2を上書きできてしまう。 今回の修正で他のアクションのhash値を引用することができなくなり、本来の仕様を 回避する穴がふさがった。 ちなみにhiddenの改ざんの話は、どういう意図で言ったのか俺もよく関連はわからん。
359 名前:nobodyさん mailto:sage [2014/05/02(金) 00:55:27.39 ID:???] >>355 だけど、すまん。意味分かったかも。リリースノート読飛ばしてコミットログしかみてなかった。actionを改ざんすることでSecurtyComponentが丸ごと迂回されるのでhiddenも改ざんできるのね。いや、ソースみてないんでこれも嘘かもしれないけどw
360 名前:340 mailto:sage [2014/05/02(金) 00:58:57.58 ID:???] >>359 そういうこと。
361 名前:nobodyさん mailto:sage [2014/05/02(金) 15:48:57.61 ID:???] パンくずリストを作成するHTMLヘルパーって扱いが難しいよね 階層が増えるとビューに余計なコードを書く機会が増える だからコントローラと独自ヘルパーで何とかしているけど、 手間がかかって仕方がない。
362 名前:nobodyさん mailto:sage [2014/05/02(金) 18:24:19.36 ID:???] cookbookの例にあるようにTreeビヘイビアを使ってLI リストを表示したいのですが、 ビューで表示するときはヘルパーか何か作らないといけないのでしょうか? 以下のようにしたいのですが、generateTreeListでは無理です。 ・My Categories ・Fun ・Sport ・Surfing
363 名前:nobodyさん mailto:sage [2014/05/02(金) 19:10:49.13 ID:???] >>362 Treeビヘイビアは不要 Model::find('threaded'); か、 Model::find('all'); したでーたを Hash::nest() で入れ子にする。
364 名前:nobodyさん mailto:sage [2014/05/02(金) 20:12:03.57 ID:???] >>363 すみません、そういう事ではなくて、ビューでの表示です。 ビューで>>362 みたいなリスト化して出力するには、 独自のヘルパーを作らなければいけないのか? 他に方法があれば教えてくださいっと言った質問になります。
365 名前:nobodyさん mailto:sage [2014/05/02(金) 20:40:21.50 ID:???] 無いよ。 なんでかって言うと、再帰処理したら簡単に表現できるからなぁ。 で、再帰処理するためには入れ子構造に組み直す必要があって、 そのためには >>363 に書いた通りって意味なんだが?
366 名前:nobodyさん mailto:sage [2014/05/02(金) 20:42:16.77 ID:???] とりあえず $Hoge->find('threaded'); で取得したデータをダンプするなりして よく考えてみ。
367 名前:nobodyさん mailto:sage [2014/05/02(金) 21:05:59.69 ID:???] HtmlHelper::nestedList() ではだめなの?
368 名前:367 mailto:sage [2014/05/02(金) 21:46:37.32 ID:???] ごめん。 HtmlHelper::nestedList() に渡すには TreeBehavior だと自力で整形しないと駄目なんだね。 CakeDC の Utils プラグインにある TreeHelper::generate() なら >>362 の要求を満たせる。
369 名前:nobodyさん mailto:sage [2014/05/02(金) 21:48:33.85 ID:???] >>367 HtmlHelper::nestedList() に渡すには 単純な入れ子構造にしておかないとだめ。 Model::find('threaded'); で取得したのはそのまま使えないと思う。 いったん Model::find('all'); で取得したデータを Hash::extract() で階層を浅くして、それを Hash::nest(); を使って組み直すなどの手間を掛けないと使えないんじゃないかな。
370 名前:nobodyさん mailto:sage [2014/05/02(金) 21:49:26.87 ID:???] あ、かぶった。すまん。 TreeHelper なんてあるの知らなかった。 一度見てみるわ。
371 名前:nobodyさん mailto:sage [2014/05/02(金) 22:02:34.68 ID:???] いえいえ。 実は俺もわりと最近知った。
372 名前:362 mailto:sage [2014/05/02(金) 22:29:38.32 ID:???] >>365-371 皆さんありがとうございます。素直に自作ヘルパー作って 配列を再帰して表示することにします。
373 名前:nobodyさん mailto:sage [2014/05/08(木) 16:22:29.68 ID:???] フィールド名がemail以外の時ってemailバリデーション効かなくない? サンプルコード漁ったらさらっと書いてあるけど動かない…
374 名前:nobodyさん mailto:sage [2014/05/08(木) 17:05:11.16 ID:???] >>373 $validateの配列の書き方間違ってない?
375 名前:373 mailto:sage [2014/05/08(木) 17:40:55.81 ID:???] すまんちゃんと効いてた。これsave時にfalse返すんだな。 他のバリデーションと同様にPOST前にポップアップで教えてくれるかと思ってた。
376 名前:nobodyさん mailto:sage [2014/05/08(木) 21:14:06.37 ID:???] え?そんな機能あったか?
377 名前:373 mailto:sage [2014/05/08(木) 22:24:36.95 ID:???] POST前ポップアップってこれのことね。 cdn-ak.f.st-hatena.com/images/fotolife/c/cakephper/20130211/20130211223324.png もしかして俺何か勘違いしてるかな…
378 名前:nobodyさん mailto:sage [2014/05/08(木) 22:33:24.56 ID:???] ブラウザさん
379 名前:nobodyさん mailto:sage [2014/05/09(金) 00:28:49.07 ID:???] ブラウザが出してるやつかな
380 名前:nobodyさん mailto:sage [2014/05/09(金) 00:37:04.59 ID:???] >>378-379 マジかwwChromeww本当にありがとうw
381 名前:nobodyさん mailto:sage [2014/05/09(金) 04:21:32.04 ID:???] HTML5の話題でひとくくりにされてる最近のブラウザの機能やね。 CakePHPもFormHelperがそのための属性を出すようになったりはしてるけど。
382 名前:nobodyさん mailto:sage [2014/05/09(金) 10:16:45.79 ID:???] クライアントバリデーションに任せっきりになってしまって、 悲惨なサイトが続出するような悪寒。 楽だし負荷軽減できるしで、いいことずくめなんだけど。
383 名前:nobodyさん mailto:sage [2014/05/09(金) 10:59:15.63 ID:???] そうだね。悪い奴がいないと助かるんだけどね。
384 名前:nobodyさん mailto:sage [2014/05/09(金) 11:01:33.24 ID:???] Controllerでバリデーションしなくて Modelに移動するいい傾向になるだけでないかな?
385 名前:nobodyさん mailto:sage [2014/05/09(金) 13:43:36.22 ID:???] いい傾向ってなんだ?
386 名前:nobodyさん mailto:sage [2014/05/09(金) 13:51:32.25 ID:???] Fat Modelのことかと思われ
387 名前:nobodyさん mailto:sage [2014/05/09(金) 14:56:57.61 ID:???] サーバーサイドのバリデーションをしなくていいわけじゃないから、負荷軽減にならなくね? ちゃんと機能するようにつくれば、無通信でユーザーに間違い見せれて、 使いやすくいフォームにはなると思うけど。
388 名前:nobodyさん mailto:sage [2014/05/09(金) 15:49:02.85 ID:???] ブラウザで弾いておいたらサーバー側での試行回数は減るだろ。 正常系の負荷はもちろん変わらんけど。
389 名前:nobodyさん mailto:sage [2014/05/09(金) 18:26:07.60 ID:???] 初心者なんすけど モデルの使い道がよくわかんないっす。 何から何までコントローラーで処理しちゃってモデルはスッカラカンです。 どなたかモデルの使い道というか便利さを三行で説明しなさい。
390 名前:nobodyさん mailto:sage [2014/05/09(金) 18:27:49.70 ID:???] >>387 HTTPの勉強をもっとしましょう。
391 名前:nobodyさん mailto:sage [2014/05/09(金) 18:46:15.86 ID:???] >>389 俺も初心者だからよく分かってないが、 コントローラはモデルに作ったメソッドを呼ぶだけで、 ざっくりした条件分岐のみにとどめておくと後から非常に見やすい気がする。
392 名前:nobodyさん mailto:sage [2014/05/09(金) 20:58:13.09 ID:???] やりすぎると Very Fat Model になってそれはそれで見難い バランスというかセンスが問われる部分
393 名前:nobodyさん mailto:sage [2014/05/09(金) 21:01:03.07 ID:???] >>389 単に好みの問題だから好きにすればいいんじゃないかな モデルはどこからでも使える上にシングルトンっぽくインスタンスが1つだけなので 共通っぽいメソッドやクラスを実装するのにも使える
394 名前:nobodyさん mailto:sage [2014/05/09(金) 21:32:58.38 ID:???] ああそうか、モデルはなんとなくテーブルに紐付くものみたいに思ってたが ロジック処理だけのモデルがあっても良いよな
395 名前:nobodyさん mailto:sage [2014/05/10(土) 01:47:38.21 ID:???] >モデルはなんとなくテーブルに紐付く これは常にRORと、その派生のCakePHPに対する批判として挙げられてるね。 本来のModelとは全然違うって、激怒しているブログがあちこちにある。 なお、CakePHP3では大幅に改善されるみたいです。
396 名前:nobodyさん mailto:sage [2014/05/10(土) 07:20:47.11 ID:???] >>388 ああ、まぁそりゃそうか。 といっても、負荷対策が必要な状況では、効果的な対策になるほどは減らないとは思うけど。
397 名前:nobodyさん mailto:sage [2014/05/10(土) 10:46:10.10 ID:???] Cakeはエンティティを入れるのが遅すぎた
398 名前:nobodyさん mailto:sage [2014/05/10(土) 10:53:41.99 ID:???] tech.itandi.co.jp/2014/04/cakephp%E3%81%8B%E3%82%89rubyonrails%E3%81%AB%E4%B9%97%E3%82%8A%E6%8F%9B%E3%81%88%E3%81%9F%E4%B8%89%E3%81%A4%E3%81%AE%E7%90%86%E7%94%B1/ 1,3は同意できるところだが 2は会社のエンジニアレベルが低いとでも言いたいのか
399 名前:nobodyさん mailto:sage [2014/05/10(土) 11:01:56.24 ID:???] 周りがCakePHPはRailsのパクリだっつーから使ってみたら ActiveRecordの超絶劣化っぷりにびびった Railsも似非MVC2になりがちだけどCakeはそれ以前に オブジェクト指向設計に真っ向から喧嘩売ってるレベル
400 名前:nobodyさん mailto:sage [2014/05/10(土) 12:53:17.49 ID:???] そうやって批判する奴って何も具体的な事言えない奴ばかりだよな 実際どのくらいのスキルある奴なんだろう
401 名前:nobodyさん mailto:sage [2014/05/10(土) 14:23:07.62 ID:???] Composerは確かにほかの言語のと比べて使いにくい印象はあるけど、 git submoduleしないとパッケージのバージョンを管理できないなんて、 なに言ってるかわからないレベルなんだが。 そんなことあるんかね?
402 名前:nobodyさん mailto:sage [2014/05/10(土) 15:56:06.47 ID:???] お前らのMVCは間違ってる!ってRails式を散々disるスライドがあったが ものがちゃんと作れれば別にいいわけで、正しいからどうだってのがよくわからん
403 名前:nobodyさん mailto:sage [2014/05/10(土) 17:17:38.04 ID:???] >>400 DBから取ってきたデータがarrayになってる部分だと思われ Cake3でようやくオブジェクトになるようだが
404 名前:nobodyさん mailto:sage [2014/05/10(土) 17:24:14.35 ID:???] それよく聞くけど、オブジェクトの方が便利なん? 書き方が変わるだけのような気がするけど
405 名前:nobodyさん mailto:sage [2014/05/10(土) 17:30:12.91 ID:???] Cake3を少し試してみたがEntity使えるだけでも結構変わるね 特にViewがスッキリするのはもちろんだけど今までHelperやControllerに溢れがちだったロジックもEntityクラスに置けるのが結構あるしテストも楽 array+Hash・Setに比べたら開発効率やコードの読みやすさは段違いに上がる でも2から3への移行は大変そう
406 名前:nobodyさん mailto:sage [2014/05/10(土) 17:30:20.29 ID:???] >>404 Modelのメソッドはすべてstaticです、なんて言ったらJavaやRubyなどのオブジェクト指向に 慣れ親しんだ人たちから見れば、なにそのふざけた設計は?とキレられるレベル
407 名前:nobodyさん mailto:sage [2014/05/10(土) 17:37:51.74 ID:???] オブジェクトじゃないとActiveRecordパターンとは言えないからなぁ
408 名前:nobodyさん mailto:sage [2014/05/10(土) 20:22:57.11 ID:???] arrayになった理由はCake1がPHP4をサポートしていたからだろうな さすがにPHP4でオブジェクト指向にはできなかった、と
409 名前:nobodyさん mailto:sage [2014/05/10(土) 23:47:42.75 ID:???] PHP4懐かしいな 修飾子やら例外やらオートローダーが無いとか 参照渡ししないとクローンになるとかいろいろあるが ActiveRecordの足かせになりそうな制約はないな
410 名前:nobodyさん mailto:sage [2014/05/11(日) 13:33:38.34 ID:???] 最近、嫌static厨が多くて困る
411 名前:nobodyさん mailto:sage [2014/05/11(日) 13:37:57.50 ID:???] static に出来るものはそのほうが良いのにね。 見極めができないんかもな。
412 名前:nobodyさん mailto:sage [2014/05/11(日) 15:03:25.90 ID:???] 「全部static」はさすがに嫌われて当然
413 名前:nobodyさん mailto:sage [2014/05/11(日) 15:07:39.63 ID:???] さすがにそんなヤツはおらんやろ
414 名前:nobodyさん mailto:sage [2014/05/11(日) 15:08:05.37 ID:???] staticとかpublicとか分別するとどんなメリットがあるの?もうおっさんだから、今だにわからない。 function hoge を _hogeにする時はあるけど。 どなたかご親切な人 わかりやすく教えてくれませんか?
415 名前:nobodyさん mailto:sage [2014/05/11(日) 15:18:12.11 ID:???] >>413 CakeのModelはまさに「全部static」なんだが…
416 名前:nobodyさん mailto:sage [2014/05/11(日) 15:37:28.00 ID:???] >>415 え どこを言ってるんだろう
417 名前:nobodyさん mailto:sage [2014/05/11(日) 15:40:10.91 ID:???] ん、Model.phpを「static」で検索してみたけどひとつもヒットしないよ 調べたverは2.4.6 cake3ではstaticになっているってこと?言葉の使い方がヘンなだけ?
418 名前:nobodyさん mailto:sage [2014/05/11(日) 18:47:27.75 ID:???] >>398 > つまり結局はタイミングの問題でしかなくて、言語の優劣がどうとか、フレームワークの優劣がどうとか、といった観点は殆ど無く選びました。 つまり結局は、他に行ったから、とりあえず元鞘を叩いておくかっていう3流エンジニアの日常か
419 名前:nobodyさん mailto:sage [2014/05/12(月) 01:19:34.02 ID:???] >>414 それマジで質問してるならこんなところにいないで 基本的なオブジェクト指向の勉強したほうが良いよ。
420 名前:nobodyさん mailto:sage [2014/05/12(月) 01:30:03.56 ID:???] >>414 static のメリットをひとことで言うと、状態を持たない(状態が変化しない) 振る舞いを提供することにより、インスタンス化した場合に本来であれば考慮するべき 状態変化の副作用から開放されることではないかと。 まず間違いなく、テストは超簡単になる。 一方、アクセス修飾子のメリットはひとことで言うと 安全な設計が簡単にできるってことではないかと。 その点 CakePHP はメンバー変数の修飾子に public を使いまくってて恐ろしいほどではある。
421 名前:nobodyさん mailto:sage [2014/05/12(月) 01:35:05.49 ID:???] 俺もstaticって使いどころがいまいちわからん。 特にphpはランタイムが短すぎて、1回しか使わないオブジェクトが多く、 staticを変に意識すると、むしろなんでもstaticでいいんじゃないかと思えてきてしまってこわい。 逆にstaticにしないと困るような事も、あんまないから、よくわからないままで結局staticは使わないという >>414 たとえばモデルに、とある機能を作ってたら100行を超える長いメソッドになってしまい、一部を切り出したけど、 コントローラーから直接切り出したメソッドを呼ばれるのは想定外って場合に、 protectedかprivateにしておけば、呼ばれることがない。 protectedとprivateは、コントローラーやモデルを触ってるくらいなら、 正直使い分けが活きることがほとんどない気がする。 強いて例を出すと、AppController内の処理で切り出したメソッドが、ほかのコントローラーから呼ばれるのが想定外なら、 privateにしておくと呼ばれなくなる。
422 名前:nobodyさん mailto:sage [2014/05/12(月) 01:45:18.99 ID:???] >>421 >なんでもstaticでいいんじゃないかと だけどオブジェクトの状態に依存しないメソッドなんて そうそう作る機会はないと思うんだが、 もし可能なら作って問題無いと思うんだけど? というか、むしろ作るべき。
423 名前:nobodyさん mailto:sage [2014/05/12(月) 02:01:04.78 ID:???] >>422 もちろん、思えてきてしまうだけで、よく考えるとダメな事がほとんどなんだけどね。 クラスやメソッドを書き始めるときに、まずこれはstaticにできるか? と考えると、問題ないような気がしてしまうんよ。 そういえば、かなり昔だけどCakePHPを使い始める前のオレオレフレームワークでは、 データベースアクセスするとこ全部staticメソッドにしちゃってたなぁ。 いわゆるCRUDに対応したメソッドがあるだけだったし、データはオブジェクトじゃなくて連想配列だったから、 インスタンスいらないなぁと思って。 あとバリデーターもstaticメソッドだったなぁ。 バリデーションはコントローラーでやってたから、CakePHPでいうバリデーションルールの配列みたいなのは、 コントローラーに書いて、AppController的な親にvalidateメソッドを作ってた。
424 名前:nobodyさん mailto:sage [2014/05/12(月) 02:19:15.31 ID:???] このスレにはガチのstaticおじさんが居る気がする
425 名前:nobodyさん mailto:sage [2014/05/12(月) 04:23:13.01 ID:???] cakeってfindがstaticでないのが不思議でしょうがない
426 名前:nobodyさん mailto:sage [2014/05/12(月) 10:30:47.47 ID:???] >CakePHPのModelはまさに「全部static」 言いたいことは何となく分かる 他のフレームワークだとModelのstaticメソッドがテーブル(Repository)の操作 インスタンスメソッドがレコード(Entity)ごとの操作に対応してるのが多い CakePHP2まではEntityがないので そういう他のFWから入ってModelのインスタンスはEntityだろと決めつけてかかると ModelにRepositoryの要素しかなくてfindもインスタンスメソッドという点に違和感をおぼえる CakePHP3だとEntityクラスとTableクラスがそれぞれ用意されるからギャップが減る クラスが分かれるからfindがインスタンスメソッドなのは変わらないけど DDDを意識した設計で個人的には好感触 というか他のFWのstaticなfindも RepositoryないしQueryに相当するオブジェクトのインスタンスメソッドに処理放り投げてるだけだろうし ただ単に使い勝手とどこまでFWが暗黙的に処理するかってだけの問題な気がする
427 名前:nobodyさん mailto:sage [2014/05/12(月) 10:33:48.09 ID:???] >>425 状態依存しないメソッドなら問題ないけど CakePHP の Model のオブジェクトって状態を持ってるから無理だよ。 たとえば同じPostクラスのオブジェクトが2個あったとして $Post1->id = 1; $Post2->id = 2; ってした場合にメソッドが static なら破綻する。
428 名前:nobodyさん mailto:sage [2014/05/12(月) 10:36:05.68 ID:???] >>426 なるほど
429 名前:nobodyさん mailto:sage [2014/05/12(月) 10:47:42.76 ID:???] >>427 findと何か関係あるのそれ?
430 名前:nobodyさん mailto:sage [2014/05/12(月) 11:14:24.54 ID:???] cakeってTable Data Gatewayパターンだと考えれば普通なんだけどな
431 名前:427 mailto:sage [2014/05/12(月) 11:59:05.87 ID:???] >>429 例えを簡単にするつもりだったが $id は関係無かったか。 要するに find が参照するプロパティのうち 状態依存のものが沢山あるってこと。 例えば $Post1->primaryKey = sid; $Post2->primaryKey = cid; とか
432 名前:nobodyさん [2014/05/12(月) 12:02:34.37 ID:U9jrOtar] TreeBehaviorsについて質問なのですが、 moveUpやmoveDownがfalseを返してきてまったく動作しません。 発行したSQLを見ると、SELECT文ばっかりでUPDATEをやっていないように見えます。 どうやったら動かすことができるのでしょうか。
433 名前:nobodyさん mailto:sage [2014/05/12(月) 12:18:35.60 ID:???] >>432 スキーマ、レコード、moveUp moveDown のコード、クエリ この辺を貼り付けてみて
434 名前:nobodyさん mailto:sage [2014/05/12(月) 12:38:18.89 ID:???] CakePHPって3でActiveRecordを採用するんだったよな
435 名前:nobodyさん mailto:sage [2014/05/12(月) 13:15:30.27 ID:???] >>433 DBやレコードはお客のやつなんでまずいんです。ごめんなさい。 スキーマにはちゃんと parent_id, lft, righ の定義はしてあって、moveUp, moveDown以外のツリー動作は 問題なく動作しています。 public function moveup($id = null) { $this->Category->id = $id; $res = $this->Category->moveUp($this->Category->id, abs(1)) ; debug($res); }
436 名前:nobodyさん mailto:sage [2014/05/12(月) 13:24:21.16 ID:???] >>431 CakePHPのモデルが状態を持ってることが、むしろ混乱の元になってる気がするけどな。 ループ内でsaveするならcreateしろ、とか。 結局find()したら連想配列を返すし、save()だってモデルにデータ持たせたりせずsave()に引数渡すことばかりじゃない? よく使うfindとsaveで違和感を感じるだけで、インスタンスである必要な機能もあるけど。 まぁ言いたい事はたぶん >>426 と似たようなことなんだろうけど、 ほかのフレームワークをあまり触ってないから、違和感レベルでしか語れない。
437 名前:nobodyさん mailto:sage [2014/05/12(月) 13:36:54.55 ID:???] >>435 じゃぁ、verify() した結果を見たらヒントがあるかも debug($this->Category->verify()); どこかで整合性が崩れてると実行されない可能性有り。
438 名前:nobodyさん mailto:sage [2014/05/12(月) 13:49:48.47 ID:???] >>437 ありがとうございます。試してみました。 verify()でしばらくかかりましたが、真っ白な画面がリターンされました。 これはツリーに不整合などの異常がなかったということですよね。
439 名前:nobodyさん mailto:sage [2014/05/12(月) 14:00:55.26 ID:???] >>438 時間かかってなおかつ白い画面ってことはタイムアウトですね。 かなり大きいんですね。 成功すれば bool(true) が返る。 Shell でやってログに書き込んで確認してみたらいいかも。
440 名前:nobodyさん mailto:sage [2014/05/12(月) 14:03:28.70 ID:???] タイムアウトで白い画面って・・・もしかして本番環境・・・?
441 名前:nobodyさん mailto:sage [2014/05/12(月) 14:04:31.37 ID:???] TreeBehavior 適用してるテーブルに他のモデルから更新したら 整合性グチャグチャになるから注意
442 名前:nobodyさん mailto:sage [2014/05/12(月) 14:10:08.15 ID:???] >>439 ありがとうございます。お察しの通りノードが3万以上あるツリーなのです。 白画面はタイムアウトですか。勉強になりました。 TeraTermからサーバにログインし curl コマンドでverifyのURLにアクセスしましたが、 ブラウザから呼んだ時とは違い、瞬時にプロンプトが返ってきてしまいます。 シェルでverifyを実行とは、具体的にはどうすればいいのでしょうか?
443 名前:nobodyさん mailto:sage [2014/05/12(月) 14:11:10.17 ID:???] >>440 いいえ、本番のデータをまるまるコピーしてきましたが、デバッグ環境です。
444 名前:nobodyさん mailto:sage [2014/05/12(月) 14:12:13.34 ID:???] >>441 他のモデルからTreeを適応しているテーブルには書き込みしに行っておりません。
445 名前:nobodyさん mailto:sage [2014/05/12(月) 14:13:55.11 ID:???] debug=2でタイムアウトしたら Fatal error: Maximum execution time of 30 seconds exceeded in ってでないっけ?
446 名前:nobodyさん mailto:sage [2014/05/12(月) 14:15:27.41 ID:???] >>445 Configure::write('debug', 2); でやりましたが、白画面でした。
447 名前:nobodyさん mailto:sage [2014/05/12(月) 14:27:56.28 ID:???] Console/commant/VerifyHogeShell.php classVerifyHogeShell extends AppShell { protected function result() { $Hoge = ClassRegistry::init('Hoge'); return $Hoge->verify(); } public function show() { debug($this->result()); } public function dump() { //!TODO ログに書き込むロジックを記述 } } こんなファイルを作って $Console/cake VerifyHoge show とか $Console/cake VerifyHoge dump とか Shell の作り方・使い方はぐぐれば幾らでも出てくる
448 名前:nobodyさん mailto:sage [2014/05/12(月) 14:31:07.10 ID:???] >>442 cURLからアクセスしても最大実行時間は一緒だ。 コンソールからPHPプロセスを利用しなきゃ。 php のユーザーが誰かってことが抜け落ちてる。
449 名前:447 mailto:sage [2014/05/12(月) 14:32:38.76 ID:???] 1行目ミスった >Console/commant/VerifyHogeShell.php Console/Command/VerifyHogeShell.php
450 名前:nobodyさん mailto:sage [2014/05/12(月) 14:37:04.67 ID:???] >>447 >>448 ありがとうございます! AppShellなるクラスが用意されていたのですね。知りませんでした。 さっそく試してみます。
451 名前:447 mailto:sage [2014/05/12(月) 14:41:43.59 ID:???] TeraTerm ってことは Windows か。 わかってるだろうけどコマンドのディレクトリセパレータは / じゃなくて \ な。
452 名前:nobodyさん mailto:sage [2014/05/12(月) 15:16:40.76 ID:???] >>447 >>448 verify()をShellから実行した結果、180超のエラーが出力されました。 特に多いのは index missingというやつです。 recover() で回復できますでしょうか?
453 名前:nobodyさん mailto:sage [2014/05/12(月) 15:22:02.02 ID:???] >>452 以前自分も同じようになったときは、 recover()で上手く言った場合とそうでない場合とがあった。 上手く行かなかったときは時間もなかったんで、 独自でスクリプト書いてで lft と rght を振り直した。 すまんが深く探ってないんで、それ以上詳しいことはよく分からん。 一度やってみろとしか言えない。
454 名前:nobodyさん mailto:sage [2014/05/12(月) 15:24:38.22 ID:???] あと、verify() でエラーが出たってことは これからも同じ問題が発生するおそれがあるんで、 更新処理を全て点検したほうがいいな。 テストを良く書けているかどうかで、こういうときに大きく差が出る。
455 名前:nobodyさん mailto:sage [2014/05/12(月) 15:27:51.20 ID:???] Treeビヘイビアを使ってカテゴリ管理って難しいよね。 不特定多数のカテゴリを扱うとかなったら、 今回のような問題が起きてしまう可能性があるし
456 名前:nobodyさん mailto:sage [2014/05/12(月) 15:28:47.24 ID:???] 連投すまんが、今の状態だと recover 走らせる時もめちゃくちゃ時間かかるはずだから、 必ず Shell から実行すること。 更新中にタイムアウトなんかしたら(特にMySQLのMyISAMなどは)やっかいなことになる。
457 名前:nobodyさん mailto:sage [2014/05/12(月) 15:35:37.85 ID:???] >>455 入れ子集合モデルは更新コストが激高だからな。 場合に応じて使い分けるしか無いと思われ。
458 名前:nobodyさん mailto:sage [2014/05/12(月) 15:38:35.35 ID:???] >>453-456 アドバイスありがとうございます。 >これからも同じ問題が発生するおそれがあるんで、 お客が不正に行ったデータのInsertなどが原因だった可能性もありますが、 プログラムのほうも確認しておきます。 recover()もShellから実行しました。案外完了が早かったように思います。 今2度目のverify()です。
459 名前:nobodyさん mailto:sage [2014/05/12(月) 16:13:23.60 ID:???] >>453 verify()でtrueが返りました! moveUp()をあるノードで実行して結果をdebug文で出すとtrueが返りました。 しかし、treeには何の変化もなし!ノードの位置は一切変わっていません。 なぜなのでしょうか・・・。
460 名前:459 mailto:sage [2014/05/12(月) 16:28:51.15 ID:???] 連投で申し訳ありませんが、moveUp(), moveDonw()の仕様を根本的に勘違いしていました。 bookを読むと 同じ枝の中で順番を上に上げるのがmoveUp()なのですね。 僕はそもそもmoveUp()したノードは「一つ階層を上がって、今までの親ノードと同じ階層に来る」 ということを実現するものなのかと勘違いしておりました。 申し訳ありませんでした。しかしverify, recoverをshellから実行するなどの貴重な情報が得られて 感謝です。
461 名前:nobodyさん mailto:sage [2014/05/12(月) 16:30:16.90 ID:???] 階層を変えるなら parent_id を変更する
462 名前:nobodyさん mailto:sage [2014/05/12(月) 16:31:48.27 ID:???] >>461 そうですよね。 しかしparent_idを手でいじって、lft, rghtがそのままで良いのかというのが気になる点です。
463 名前:nobodyさん mailto:sage [2014/05/12(月) 16:32:41.62 ID:???] >>460 ちょっと興味あるんだが、レコード何件あんの?
464 名前:nobodyさん mailto:sage [2014/05/12(月) 16:33:45.39 ID:???] >>462 >parent_idを手でいじって ちがーーーう! TreeBehaviorが効いてるモデルでやるんだよ!!
465 名前:nobodyさん mailto:sage [2014/05/12(月) 16:38:21.01 ID:???] >>463 3万件超あります。 >>464 もちろん、DBから直接parent_idを変えたりしませんよ。 CakephpのEdit画面(もちろんTreeのモデルのもの)から変えます。
466 名前:nobodyさん mailto:sage [2014/05/12(月) 17:32:11.61 ID:???] >>463 んん、3万件オーバーでTreeBehaviorか。。。 ブラウザからの更新はちょっとキツイかもな。
467 名前:nobodyさん mailto:sage [2014/05/12(月) 17:34:01.92 ID:???] >>465 >CakephpのEdit画面(もちろんTreeのモデルのもの)から変えます。 なら問題なく lft, rght 変更してくれる。 っつーか、それがTreeBehaviorの仕事だからな。
468 名前:nobodyさん mailto:sage [2014/05/12(月) 17:45:37.30 ID:???] 改めて思うけど、カテゴリの設計って難しすぎるな
469 名前:nobodyさん mailto:sage [2014/05/12(月) 17:54:12.62 ID:???] >>466-468 ありがとうございます。 parent_idを変更すると、思っていた階層の移動が完了できました。ご迷惑をおかけしました。 カテゴリはこれからも増えていく可能性があるので、 このままTreeBehaviorを実装していて安全なのかちょっと心配しています。 親子関係を実現するには普通にHABTMでもいいのではないかな、と思いましたが、 設計段階でTreeの採用が決まっていたので、これで作ってしまっています。 データ件数がでかくなった今、非常にデリケートなデータ構造なんだな、と改めて認識しております。
470 名前:nobodyさん mailto:sage [2014/05/12(月) 18:14:56.49 ID:???] >>468 さらにそれを管理してくのが苦痛。
471 名前:nobodyさん mailto:sage [2014/05/12(月) 18:30:07.53 ID:???] >>469 親子関係でHABTMってどうやるんだ
472 名前:nobodyさん mailto:sage [2014/05/12(月) 19:01:06.74 ID:???] >>471 ・categories ・articles ・category_articles(中間テーブル) みたいなテーブルを作る
473 名前:nobodyさん mailto:sage [2014/05/12(月) 19:02:02.02 ID:???] ごめん。中間テーブルの名前を間違えた。 categories_articlesだったかな。
474 名前:nobodyさん mailto:sage [2014/05/12(月) 19:42:05.93 ID:???] >>471 Categoryモデルの中に public $belongsTo = array('Parent' => array('className' => 'Category',)); public $hasMany = array('Children' => array('className' => 'Category')); と二つ記述するやりかたですかね。 それを最初に思いついたのです。 しかしTreeのほうが上ではないかという意見が出たため、そっちを採用しました。
475 名前:nobodyさん mailto:sage [2014/05/12(月) 19:50:22.00 ID:???] >>471 だからHABTMじゃないですね。ごめんなさい。 言うならばHas Many and Belongs to Oneでしょうか。
476 名前:nobodyさん mailto:sage [2014/05/13(火) 16:37:41.63 ID:???] ありゃ、もう2.5.0出たのか。 なんか最近CakePHPのバージョンあがるの早い気がするけど、気のせいか?
477 名前:nobodyさん mailto:sage [2014/05/13(火) 16:39:47.73 ID:???] >>476 年取っただけだと思う。 時代の流れが早く感じるよな。
478 名前:nobodyさん mailto:sage [2014/05/13(火) 16:44:46.95 ID:???] 2.6も予定されてるのかよ。 さっさと3出して、2は打ち止めでいいだろ。
479 名前:nobodyさん mailto:sage [2014/05/13(火) 17:43:09.45 ID:???] 今のCakeって$usesに書いてあるモデルは実際使われるまで読まれないんだよね? ということは存在する全モデルを常に書いてもいいってこと?
480 名前:nobodyさん mailto:sage [2014/05/13(火) 18:12:50.09 ID:???] ぜんぜん良くはねーと思うが、負荷にはならんだろうな
481 名前:nobodyさん mailto:sage [2014/05/13(火) 22:34:11.52 ID:???] >>479 「今の」ってバージョンいくつからそうなったの?
482 名前:nobodyさん mailto:sage [2014/05/13(火) 22:43:15.01 ID:???] 2.x
483 名前:nobodyさん mailto:sage [2014/05/14(水) 00:35:48.56 ID:???] サンクス。普段は2系使ってるから特に問題ないな
484 名前:nobodyさん mailto:sage [2014/05/14(水) 02:38:22.28 ID:???] プログラミングするとき3行毎に動作確認しないと 不安で死ぬやつって俺だけ?
485 名前:nobodyさん mailto:sage [2014/05/14(水) 04:51:26.28 ID:???] 3行は短すぎるが、ちゃんと小さい処理単位でメソッドを分けておけば、 まとめて動作確認してもデバッグしやすいよ。 あとはテストを書け
486 名前:nobodyさん mailto:sage [2014/05/14(水) 07:02:10.89 ID:???] そんなあなたにテストファースト
487 名前:nobodyさん mailto:sage [2014/05/14(水) 10:05:36.21 ID:???] ぶっちゃけ、テストの利点が分からないの俺だけ?
488 名前:nobodyさん mailto:sage [2014/05/14(水) 10:09:17.84 ID:???] さすがに君だけじゃない?
489 名前:nobodyさん mailto:sage [2014/05/14(水) 11:29:01.43 ID:???] 最初のうちは、いまいちわからんかもね。 インターフェースのテストで、mockの使い方がわかってくるようになると、考え方が変わるかも。
490 名前:nobodyさん mailto:sage [2014/05/14(水) 12:33:17.82 ID:???] >>489 俺も教えて欲しいんだけど テスト書くのが面倒 テスト自体信用できない 書いてもやっぱり最初から書きたくなる って思ってしまうんだけどそれでも書いた方がいいと思う? できるプログラマーの人はみんな書いてるよね。
491 名前:nobodyさん mailto:sage [2014/05/14(水) 12:42:45.04 ID:???] >>490 結論としては書くべきでFA そのことがわかるには経験が必要 てことだと思う
492 名前:nobodyさん mailto:sage [2014/05/14(水) 12:51:30.16 ID:???] サービスが稼動を始めてから、数ヶ月経った後くらいに、 誰かのひどいコードを見つけた時、 テストを書いてあれば・・・と思うよ。
493 名前:nobodyさん mailto:sage [2014/05/14(水) 13:38:02.11 ID:???] view (.ctp) ファイルのテストってどうやってやるんだろう。
494 名前:nobodyさん mailto:sage [2014/05/14(水) 14:02:28.89 ID:???] そこまでテストする必要があるのかはよく考えたほうが良いように思えるけど、 やるならSelenium使うんじゃない?
495 名前:nobodyさん mailto:sage [2014/05/14(水) 14:08:25.34 ID:???] テスト=コードが正しく動作するか確かめる ではないんだよね?これはブラウザで確認すればいいだけだし、 大体はコード書いた後に実行して確かめているだろ。 具体的にどういう場面でテストが必要になるの?
496 名前:nobodyさん mailto:sage [2014/05/14(水) 17:09:00.17 ID:???] ユニットテストとユーザテストごっちゃにしている時点でなんだかな。
497 名前:nobodyさん mailto:sage [2014/05/14(水) 17:52:25.48 ID:???] >>495 > 大体はコード書いた後に実行して確かめているだろ。 一度書き捨てて終わらせられるなら誰も書く訳がない 改修は何度も発生する=確認も同じだけ発生する=クッソ面倒 だから面倒な確認を自動化するためにテストを作るんだ
498 名前:nobodyさん mailto:sage [2014/05/14(水) 20:45:44.91 ID:???] というよりさ! まずテストコードってなんなの? console.log()とは違うの?
499 名前:nobodyさん mailto:sage [2014/05/14(水) 21:02:32.76 ID:???] お前のテスト(むしろconsoleデバッグ?) → 逐一人の手で実行して人間がブラウザやconsoleに表示された値やを見て想定したものかどうか確認する 自動化できてない 複数の関数やメソッドが絡むとバグの原因の特定がしづらい 他の皆の意図するテスト(単体テスト) → それぞれの関数やメソッドが複数の引数のパターンに対し適切な返り値を返したり 例外やエラーを吐いたりなど仕様通りの挙動をするかを確かめるコードを書く 検証する対象が小さいので比較的簡単に書けるし自動化も容易い プログラムの小さい単位の動作をあらかじめ保証しておくことで 後の複数の関数やメソッドが絡むテストの際にもバグの原因の特定がしやすくなる 面倒だから単体テストでググれ
500 名前:nobodyさん mailto:sage [2014/05/14(水) 21:19:27.30 ID:???] さっぱり意味が分からん
501 名前:nobodyさん mailto:sage [2014/05/14(水) 21:51:05.96 ID:???] 例えば「足し算」ていうメソッドを作成したとする。 これは引数に例えば「1と2を入れると3が返る」というもの。 1「テストを書かないやりかた」 こんな簡単なメソッド、どうやってもミスるわけない。 とりあえず作る。最初に動くか確認する。 動いた・・・終わり 2「テストを書くやりかた」 「1と2を入力すると3が返る」というテストを書く。 開発しながらテストを走らせて正常か確認する。 テストが異常なら、異常がなくなるまでプログラムを修正する。 これをずっと繰り返す。 3「テストを先に書くやり方」 2のテストを先に書く。メソッドは空からスタート。 テストが通るまで開発を行う。
502 名前:nobodyさん mailto:sage [2014/05/14(水) 21:56:32.40 ID:???] console.logは、phpでいえばvar_dumpとかになるなんだろうが、 使うときにコメントイン/アウトしなきゃいけないし、消し忘れるとそれがそのまま出力されて大変なことになる(センシティブな情報だったら・・・)。
503 名前:nobodyさん mailto:sage [2014/05/14(水) 22:52:25.27 ID:???] 上司がテストケース書いて、部下にそれに合うようなコードを書かせるってのなら良いと思う。 ただcakephp1が2になったりするとテストも書き直しだよね。 結局テスト書いてもそれ以上にプログラムの進歩が速いような気もするんだよね。 ちなみにヤフーとかって10年前くらいにcgiをphpに書き直したみたいなこと聞いたけど、あれ以来書き換えてないのかな。 それとも地道に書き換えまくってるのかな?
504 名前:nobodyさん mailto:sage [2014/05/14(水) 23:08:58.07 ID:???] >ただcakephp1が2になったりするとテストも書き直しだよね。 いきなりスパン長い話になってね? ビジネスロジックまで全部変わるわけじゃないんだからテストコードも一部はそのまま使えるでしょ テストコードまったくなしに書きなおすよりはいくらか書きやすいと思う
505 名前:nobodyさん mailto:sage [2014/05/14(水) 23:36:50.08 ID:???] >>499 の説明で合ってるんだが、何がわからないのかわからない
506 名前:nobodyさん mailto:sage [2014/05/14(水) 23:52:50.14 ID:???] >>504 ありがとう。そういうメリットもあるんですね。 >>505 わからない人にとっては全くわからないんだよね。テストケースのメリット。 俺、gitもテストケースも使ったことないというか使えないので勉強します。
507 名前:nobodyさん mailto:sage [2014/05/15(木) 00:48:57.49 ID:???] なんだかんだ言って教えるのなw
508 名前:nobodyさん mailto:sage [2014/05/15(木) 01:04:25.59 ID:???] 経験ないとわからないかもしれんね 愚者は経験に学ぶと言うけど人間なんて全員愚者だから、がんばって経験を積もう
509 名前:nobodyさん mailto:sage [2014/05/15(木) 02:16:19.81 ID:???] >>495 こういう >>492 時に必要になるんだよ。 例えば1日の区切りが0時じゃなく4時なサービスがあるとしよう。 DateTimeオブジェクトや日時の文字列を受けて、何日かを返すメソッドがあるんだけど、 中身を見たらこりゃひどい実装だなという時、 テストがあれば、中身を書き換えても同じ結果を返す実装にできたとわかりやすい。
510 名前:nobodyさん mailto:sage [2014/05/15(木) 03:48:38.98 ID:???] お前ら俺が以前テストの質問した時はスルーしたくせに テストの話題で盛り上がりやがって
511 名前:nobodyさん mailto:sage [2014/05/15(木) 04:08:36.66 ID:???] >>510 たぶんそれから必死で勉強したんだよ
512 名前:nobodyさん mailto:sage [2014/05/15(木) 10:33:38.61 ID:???] >>509 >中身を見たらこりゃひどい実装だなという時、 >テストがあれば、中身を書き換えても同じ結果を返す実装にできたとわかりやすい。 ここが想像できないんだよ。中身(モデル?)が酷い実装っていうけど、 前は動いてたんだよな?それを変更する時に「酷い」が分かるんだろ? なら、テストも書き直しだと思うんだよ。俺も>>503 と同じ疑問を持ってる。 Cakeのバージョンアップではなくとも、仕様が変わればテストも変わるでしょ。
513 名前:nobodyさん mailto:sage [2014/05/15(木) 10:45:22.44 ID:???] 0か1で考えてんな 少なくとも単体テストしやすいように設計してれば 仕様を変えた部分の他に影響がないことを保証しやすいんじゃないか テストが書いてない誰かが作ったソフトウェアを改修する時に あっち変えたらこっち動かなくなったよみたいな経験ない?
514 名前:nobodyさん mailto:sage [2014/05/15(木) 10:52:06.00 ID:???] んじゃあ次はgitってなんなのよ?
515 名前:nobodyさん mailto:sage [2014/05/15(木) 11:08:32.04 ID:???] >>514 俺も思うな。 一人で開発したことしかないからか、 前に戻したくなることなんてまず無い。 毎回、add、commitする手間の方が面倒な気がするけど。 ただ、いつでも何処にでも戻せる安心感ってのは大きいのかもしれない。 dropboxでも戻せるけどどこに戻せば良いのかすらわからない。
516 名前:nobodyさん mailto:sage [2014/05/15(木) 11:14:00.56 ID:???] >>512 別人だけど、中身ってコードのこと言ってるんだろ。 テストが完璧な仕様を表したものだと仮定すると、 テスト通りに動く限りは、実装コードはいくら変えても構わない、という理屈。 テストコードの方も変える必要がない(というか、変えたら同一の保証ができなくなる)。 もっとも、リファクタリングの過程で、新しいクラスやインターフェースを追加、とかなることが多いから、 その場合は、テストも変えていく必要はあるけど。
517 名前:nobodyさん mailto:sage [2014/05/15(木) 11:25:10.47 ID:???] バージョン管理してないとかマジか まあ趣味で小規模のものならそれでもいいのかな…
518 名前:nobodyさん mailto:sage [2014/05/15(木) 11:31:50.75 ID:???] >>515 一人で開発を数年やってるが仕事でも個人サービスでもgitは重宝してる 過去ログとして何をやったかが残ること。 複数同時に機能開発ができること。 gitなしにはもう生きられない。 テストはControllerのテストは書かない。 それより下位層は書いてる。 自分が書いたコードを忘れたころに重宝してる。 他の機能実装のために、さらに下位層を変更したときに重宝してる。 デプロイツールもなしには生きられんな。
519 名前:nobodyさん mailto:sage [2014/05/15(木) 11:48:03.50 ID:???] >>517 残念ながら商用で10以上の製品を扱ってるんだ・・。 gitの前にSubversionを勉強したこともあったけど、 バージョン管理の利点があまり思いつかないんだよな。バックアップ以外で。 マイナーアップデートしてそれをgitで管理する程度ならいいだろうけど、 開発してたら頻繁に更新するわけだろ?コード間違えも多々ある。 なのに、どのタイミングでadd、commitするか分からんし、 毎回してたら515が言うように面倒だ。
520 名前:nobodyさん mailto:sage [2014/05/15(木) 11:52:50.01 ID:???] >>513 例えばこの2ちゃんの掲示板。 名前とメールアドレスと本文入れて投稿すれば掲載される。 この一連の処理が正しく行われるかのテストを書くわけだろ? で、そこに「画像を追加できる」という機能が加わったとする。 コントローラーとモデルとビューにコードを追加し、テストも書き直すよな? なら、またテストのやり直しだ。
521 名前:nobodyさん mailto:sage [2014/05/15(木) 12:25:34.42 ID:???] >>520 テストにもいろいろ種類があるが、ここで書け書け言われてるのは、 単体テストと呼ばれるやつな。 で、単体テストの場合、一連の処理をテストするんじゃなくて、 機能単位でテストする。 俺も理解は甘いから、機能単位と言い切って良いのかわからないけど。 なので >>509 のようなメソッドは、戻り値だけに着目すればよくて、テストが書きやすいんだけど、 コントローラーのテストはちょっと書きにくい。 コントローラーのメソッドはアクションで、実行されたあとの結果がいろいろあるからな。
522 名前:nobodyさん mailto:sage [2014/05/15(木) 12:37:38.37 ID:???] >>520 あえて掲示板ということで、CommentsControllerのaddメソッドのテストで考えてみると 1 必須項目を省いてPOSTしたら、書けてない事 2 書き込み成功していいPOSTなら、書けてる事 3 名前を省略したら「nobodyさん」になる事 もっとあるとは思うけど、addメソッドのテストとして、こんなのを確認するテストを書いたとする。 「画像を追加できる」機能が必須項目じゃなければ、「画像を追加できる」を実装した後も、 このテストは3つの部分は期待通りに動いてることを確認できると思う。 で、画像を追加する投稿についてのテストをいくつか追記して、機能追加が完成できる。 この場合あくまでテストは追記だから、テストは書き直しとは言わないと思う。 画像が必須項目だったとしたら、1と2は書き直しになっちゃうだろうけど、これも微修正って範疇じゃないかと。
523 名前:nobodyさん mailto:sage [2014/05/15(木) 13:17:55.24 ID:???] gitって、dropboxと違い commitやマージが便利そうだな。
524 名前:nobodyさん mailto:sage [2014/05/15(木) 13:33:34.19 ID:???] >>522 物凄く分かりやすい!参考になった。 つまり、その1〜3をこれまではブラウザでいちいち実行してたのを テストコードさえ用意しておけば、自動で成否を出してくれるって事だよね? それならテストを追加する意味もあるし、すごく便利だと思う。
525 名前:nobodyさん mailto:sage [2014/05/15(木) 16:23:27.92 ID:???] >>524 伝わったようで何よりだけど、あげておとすようで悪いが、 質問してた人が言ってたようなデメリットもやっぱりあるよ。 実装が大きく変われば、さすがにテストも修正というより書き直しになるし、 あとさっきも書いたけどコントローラーはテスト書きにくい。 仕様変更で実装が大きく変わりやすい箇所でもある。 あと >>522 この例でいうと、「画像を追加できる」機能を追加した際、 ぶっちゃけテストなんてなくても1〜3は壊れないような実装になりそうな気がすごいする。 俺としては >>509 のような、ユーティリティ的なライブラリが、テストも書きやすいし恩恵も多いと思う。 実際困ったから書いたんだけど、時間というテストがめんどくさいデータで、 結局動作確認するには、4時丁度とその前後や、逆に0時丁度やその前後を引数に、呼んでみるしかないから、それってテストコードだしな。 で、ユーティリティだからサービスのいろんな箇所で呼ばれてて、ミスったときの影響範囲も広い。 なので、テストコードがないと、修正に及び腰になってしまう。
526 名前:nobodyさん mailto:sage [2014/05/15(木) 16:45:41.71 ID:???] >>525 なんかよく分からなくなってきたな・・・。 コード書いて「こういうイメージ?」って聞こうとしたんだけど、 どう聞けばいいからすら分からず、固まってしまったよw
527 名前:nobodyさん mailto:sage [2014/05/15(木) 19:50:47.49 ID:???] ここはなんのスレですか?
528 名前:nobodyさん mailto:sage [2014/05/15(木) 19:53:03.77 ID:???] スレタイ読めないの?CakePHPのスレですよ? ちなみにCakePHPにテストという機能がちゃんと用意されてますよ? だからその事について話し合っているんですよ?
529 名前:nobodyさん mailto:sage [2014/05/15(木) 20:27:14.89 ID:???] >>528 くわしく
530 名前:nobodyさん mailto:sage [2014/05/15(木) 20:53:28.94 ID:???] >>529 book.cakephp.org/2.0/ja/development/testing.html
531 名前:nobodyさん mailto:sage [2014/05/15(木) 23:34:57.49 ID:???] >>525 テストコードがないと及び腰ってのすごくわかる。 自分が作ったコードですら触りたくないもん。
532 名前:nobodyさん mailto:sage [2014/05/16(金) 13:54:12.18 ID:???] では、先生方次は最近よく聞く composerについて教えて下さい。
533 名前:nobodyさん mailto:sage [2014/05/16(金) 14:02:22.96 ID:???] あとで知ったかで話すから、ちょっと勉強する時間をくれ
534 名前:nobodyさん mailto:sage [2014/05/16(金) 14:26:46.96 ID:???] composerは依存する外部のライブラリ等を管理して autoload処理までしてくれるもの packgistに登録されているものの他に gitやsvnとかで管理されているもの zip等で落としてくるもの、PEARとかも管理できる 依存関係の解決や、バージョンアップの追従とかが簡単にできるのがいいね 更新時にスクリプト動かしたりもできるから、さらにいろいろ使えるよ
535 名前:nobodyさん mailto:sage [2014/05/16(金) 14:41:38.71 ID:???] cakeはcomposer対応がめちゃくちゃ遅かったよな。
536 名前:nobodyさん mailto:sage [2014/05/16(金) 21:57:48.54 ID:???] composerってRubyでいうとこのgem?
537 名前:nobodyさん mailto:sage [2014/05/16(金) 22:04:02.91 ID:???] bundlerかな
538 名前:nobodyさん mailto:sage [2014/05/16(金) 22:12:07.93 ID:???] >>537 なるほど、さんきゅー
539 名前:nobodyさん mailto:sage [2014/05/17(土) 02:35:10.07 ID:???] routes.phpで指定できるURLのパターンに、DBから取得した値を設定することってできる? 例えば、 /domain/DB値 みたいな感じで ちなみに、1.3系
540 名前:nobodyさん mailto:sage [2014/05/17(土) 03:35:24.78 ID:???] >>539 2系では無理。routes.php のタイミングでは ClassRegistry がロードされていない。 1.3系は分からんが、やってみて確かめてみれば?
541 名前:nobodyさん mailto:sage [2014/05/17(土) 03:39:32.10 ID:???] Model使わずに直接SQL叩けば宜し
542 名前:nobodyさん mailto:sage [2014/05/17(土) 05:32:08.69 ID:???] >>539 うーん、たぶんできるんじゃね? book.cakephp.org/2.0/en/development/routing.html#custom-route-classes まず、カスタムルートクラスを使う。 Cookbookは英語しかないが、これ。 App::uses('CakeRoute', 'Routing/Route'); App::uses('ClassRegistry', 'Utility'); SlugRoute extends CakeRoute{ public function parse($url){ $parse = parent::parse($url); $hoge = ClassRegistry::init('Hoge'); return $parse; } } こういうカスタムルートクラス書いてみたら、$hogeにHogeのインスタンスがあることまでは確認した。 なお、phpがあるPCと、これ書いてるPHP別なので、上のコードにtypoがあるかもしれない。 カスタムルートクラスでApp::uses('ClassRegistry', 'Utility');することによる弊害があるかどうかは知らない。
543 名前:nobodyさん mailto:sage [2014/05/17(土) 11:47:50.48 ID:???] >>542 それは単にルータのクラスをRouteから変更するだけじゃん。 ルーティングのタイミング(routes.php の読み込み)は一緒だから Model のインスタンス取得できないんじゃないかってことなんだけど。
544 名前:nobodyさん mailto:sage [2014/05/17(土) 11:54:40.61 ID:???] すまん、言葉足らずだった。 ルータのクラスを変更することは ここでは問題になってないってことを言いたかっただけ。 で、今 routes.php で App::uses('ClassRegistry', 'Utility'); して Model のインスタンス取得したら問題なく動いたわ。 副作用は知らん。 1.3系は ClassRegistry ってないんだっけ? 途中から出来た? その辺はよく分からん。
545 名前:nobodyさん mailto:sage [2014/05/17(土) 12:16:13.55 ID:???] WordPressが記事URLのルーティングを管理画面から変えられるけど、 あんな感じにできれば便利だなとは思う
546 名前:nobodyさん mailto:sage [2014/05/17(土) 12:21:13.08 ID:???] 確かにそうだよな。 もっと初期段階でモデルにアクセスできる仕組みのほうがいい気がする。 他のFWとかのプロセスってこの辺りどうなってんのかな。 俺はCakeしか知らないから。
547 名前:nobodyさん mailto:sage [2014/05/17(土) 12:58:47.14 ID:???] >>546 全体のローダーとルーティングで制限がかかるローダーはタイミングが別なものが多いよ 前者でモデルの読み出しができれば使える感じ
548 名前:nobodyさん mailto:sage [2014/05/17(土) 13:17:23.08 ID:???] で、結局何が問題なの? App::uses('ClassRegistry', 'Utility'); で初期段階でモデルにアクセスも出来たし、 あとはカスタムルートクラスで好きなようにパースして返せば、 良い書き方かはおいといて、動きそうな感じはしてるんだけど。
549 名前:nobodyさん mailto:sage [2014/05/17(土) 13:46:47.18 ID:???] うん、行ける気がする で、>>548 こそ何が問題なの?
550 名前:nobodyさん mailto:sage [2014/05/18(日) 01:51:53.74 ID:???] >>549 質問に対してこれでできんじゃね?って方法を書いただけだから、 こっちに問題はないけど。
551 名前:nobodyさん mailto:sage [2014/05/18(日) 02:42:01.29 ID:???] この板、IDでないから誰が何喋ってんのか全く分からんw
552 名前:nobodyさん mailto:sage [2014/05/18(日) 04:33:21.19 ID:???] ところで、ClassRegistryが出てきたからついでに聞きたいんだけど、 new Hoge()じゃなくてClassRegistry::init('Hoge')が推奨されるのってなんで? 昔コントローラーじゃないところでモデル使うことがある時、 new Hoge()してるって言ったら、だめって言われたことあるんだけど、 まだ初心者だったら理由までは教えてもらえなかったんだよね。 よくわからないまま、ClassRegistry::init()を使うようにだけしてるんだけど、 理由知りたい。
553 名前:nobodyさん mailto:sage [2014/05/18(日) 11:39:16.13 ID:???] newしたら初期化されるじゃん
554 名前:nobodyさん mailto:sage [2014/05/18(日) 12:23:32.63 ID:???] phpunitのテスト駆動開発について。 テストを先に書くということですが、 メソッドを先に書く場合もありますか?
555 名前:nobodyさん mailto:sage [2014/05/18(日) 12:34:06.68 ID:???] また、掲示板サイトを作る場合、 記事を書く 記事を見る 記事を削除 の3つのケースを先に書いてテストし実装する もしくは一つの機能ごとにテストを書く実装する、のどちらが良いのでしょうか。
556 名前:nobodyさん mailto:sage [2014/05/18(日) 18:19:05.82 ID:???] >>554 テストを先に書くことがテスト駆動開発の必須条件の一つだと思うんだけど、 別に原理原則にこたわることもないと思われ。 ただ、教科書的にはまずテストを書いて赤色から発進するのが通則。 >>555 テスト駆動開発は、一般的にはアジャイル開発の一部とされている (たぶん、そうじゃない場合もあるはずなんだけどあまり記憶に無い)ので 単純なテストからだんだん複雑にして行くことを前提に、 最初は簡単な「記事を書く」テストを書いて実装して 簡単な「記事を見る」テストを書いて実装して、 簡単な「記事を削除」テストを書いて実装して・・・ってことなんじゃないかな? だけどそれも程度によるだろうから、最初はざっくりアウトライン的に 全体を作って、作りこむに従って単体テストを増やしていったりテスト自体を 詳細にコーディングするってことでいいんじゃないかな?
557 名前:nobodyさん mailto:sage [2014/05/18(日) 18:27:15.17 ID:???] >>556 ありがとうございます! 勉強になります。
558 名前:nobodyさん mailto:sage [2014/05/18(日) 23:31:40.02 ID:???] まぁ自分で書いておいてこんなこと言うのもあれだけど、 TDDに限らず、ここで聞くより専門の書籍を一冊買って それを読んで体系から身につけたほうがいい。
559 名前:nobodyさん mailto:sage [2014/05/19(月) 16:50:44.06 ID:???] 画像のバリデーションで、画像をアップロードしていない場合は バリデーション自体を中止したいのですが、良い方法はないでしょうか? 以下のようなルールをモデルに書いています。 'image' => array( array( 'rule' => array('extension', array('jpg', 'jpeg', 'gif', 'png')), 'message' => '拡張子が違います', 'allowEmpty' => true, ) )
560 名前:nobodyさん [2014/05/20(火) 15:39:04.32 ID:RIYxfxGy] hasManyとfindについて質問です。 営業 1−多 顧客 というリレーションがあったとします。 営業 hasMany 顧客 と営業モデルに書いています。 そこで営業コントローラから 「顧客を一件ももっていない営業」をfindする方法がどうしても 思い浮かびません。 どうかヒントをいただけませんでしょうか。
561 名前:nobodyさん mailto:sage [2014/05/20(火) 15:56:13.36 ID:???] 営業 hasOne 顧客 というアソシエーションを一時的に張って、 検索条件を '顧客.id' => null とすれば行ける気がするのだがどうだろう。 あと、カウンターキャッシュという裏ワザもあるが、 アプリケーション依存になるんで一長一短。
562 名前:nobodyさん mailto:sage [2014/05/20(火) 16:02:52.95 ID:???] >>561 なるほど!試してみます。ありがとうございます。
563 名前:nobodyさん mailto:sage [2014/05/21(水) 16:47:46.18 ID:???] クックパッドってCake使ってるのかな? なんかURLのルールが似てる気がする
564 名前:nobodyさん mailto:sage [2014/05/21(水) 18:35:00.58 ID:???] >>563 Railsじゃなかった?今は知らんけど
565 名前:nobodyさん mailto:sage [2014/05/21(水) 19:54:17.38 ID:???] ああ、Railsだから似てると感じるのか
566 名前:nobodyさん mailto:sage [2014/05/25(日) 12:26:20.21 ID:???] cakeとciのActiveRecordって PofEAAのActiveRecordと違うと思うんだけど。何を元にしてるの?
567 名前:nobodyさん mailto:sage [2014/05/25(日) 13:21:00.24 ID:???] CakePHPにActiveRecordは実装されていない
568 名前:nobodyさん mailto:sage [2014/05/25(日) 14:22:54.54 ID:???] AppControllerを継承したクラスを継承したコントローラで AppControllerに書かれた$uses、$componentsが使えない(マージされない)問題は Cake2では直ってるんだっけ? 今確認できないのでどなたか教えてください
569 名前:nobodyさん mailto:sage [2014/05/25(日) 16:32:17.75 ID:???] >>568 Dispatcher でリフレクション呼び出してあれこれゴニョゴニョしてるんで、 多分大丈夫。 正式なアナウンスは知らん。
570 名前:nobodyさん mailto:sage [2014/05/26(月) 20:03:50.85 ID:???] >>568 その問題、今初めて知ったわ。
571 名前:nobodyさん mailto:sage [2014/05/26(月) 21:17:51.86 ID:???] 久しぶりに自分が作った1.3のソース触ったけど、糞すぎて情けなくなる・・・
572 名前:nobodyさん mailto:sage [2014/05/26(月) 21:34:55.75 ID:???] オレの1.2のコードをやるから、その汚い糞を拭き取れ。
573 名前:nobodyさん mailto:sage [2014/05/28(水) 12:20:55.53 ID:???] カテゴリの状態を維持したまま別のコントローラーを実行するための ルーティングってどう書けばいいですかね? /hoge/ →Categoryモデルのname「hoge」 /hoge/news/ →Newsモデルのcategory_nameが「hoge」 /hoge/news/detail/1 →Newsモデルのidが1でcategory_nameが「hoge」 こういう場合、hogeの箇所(カテゴリ名)が不特定文字列なので どういう書き方をすればいいか悩んでいます。cake2系です。
574 名前:nobodyさん mailto:sage [2014/05/28(水) 12:29:00.97 ID:???] Router::routes(array('/:category/'), array('controller' => 'categories')); Router::routes(array('/:category/:controller/')); Router::routes(array('/:category/:controller/detail/:id')); でどう?
575 名前:nobodyさん mailto:sage [2014/05/28(水) 12:33:07.08 ID:???] あと、第三パラメータで正規表現でのフィルタリングができるんで、 3つ目のURLパターンにおいてIDは数値と決まっているなら Router::routes(array('/:category/:controller/:id'), array(), array('id' => '[0-9]+')); とすることで /hoge/news/1 をマッチさせることが出来ると思う。
576 名前:573 mailto:sage [2014/05/28(水) 13:36:48.07 ID:???] >>574-575 ありがとうございます。この方法ですが、 他のコントローラーと共存させたい場合はどうなるのでしょうか? /contacts/ お問い合せ用のコントローラー /faqs/ FAQ用のコントローラー などがサイトに存在する場合、おかしくなるような気が・・。 そういう場合は、固定のコントローラーを ルーティングに書いていけばいいんですかね? Router::routes(array('/contacts/:action'), array('controller' => 'contacts'));
577 名前:nobodyさん mailto:sage [2014/05/28(水) 13:55:25.16 ID:???] 問題ない。 ルーティングは単純な正規表現を先頭からマッチさせていくだけ。 で、最後の最後に通常のマッチングがコアの方に用意されている。
578 名前:nobodyさん mailto:sage [2014/05/28(水) 13:56:01.83 ID:???] あ、問題あるわ。すまんw
579 名前:nobodyさん mailto:sage [2014/05/28(水) 13:56:49.69 ID:???] >そういう場合は、固定のコントローラーを >ルーティングに書いていけばいいんですかね? >Router::routes(array('/contacts/:action'), array('controller' => 'contacts')); そうですね。
580 名前:573 mailto:sage [2014/05/28(水) 15:29:39.46 ID:???] >>579 ということは、固定のコントローラーは全てルーティングに書く必要があるんですね。 そうなるとあまり利便性が良くないですね。
581 名前:nobodyさん mailto:sage [2014/05/28(水) 17:12:42.77 ID:???] TreeBehaviorのleftとrightってなんなん…これ見ると存在しないid指定してるみたいでわけが分かんないよ… book.cakephp.org/2.0/en/core-libraries/behaviors/tree.html
582 名前:nobodyさん mailto:sage [2014/05/28(水) 20:12:28.98 ID:???] >>580 カテゴリ名を自由にするってことは、特定の文字を禁止にするんだろうから、 それを表現できるパターンを第3パラメータに書けば良いと思うよ。 たとえば ["member", "user"] というコントローラを作るんなら $route = '/:controller/:action/*'; $default = array(); $options = array('controller' => '(member|user)'); Router::connect(compact('route', 'default', 'options')); あと、アクションを設定しない場合に index を適用させるなら $route = '/:controller'; $default = array('action' => 'index'); Router::connect(compact('route', 'default')); を最初に加えておく。 あとすまん、 上で Router::routes() っていうのは Router::connect() の間違いだった。すまん。
583 名前:nobodyさん mailto:sage [2014/05/28(水) 20:13:54.99 ID:???] >>581 lft, rght はIDじゃないよ。 TreeBehavior のアルゴリズムを理解するのにとっておきの記事 blog.xao.jp/blog/cakephp/understanding-of-nested-sets-model-for-treebehavior-of-cakeph/
584 名前:573 mailto:sage [2014/05/28(水) 20:20:05.04 ID:???] >>582 ありがとうございます。色々工夫してやってみます。
585 名前:nobodyさん mailto:sage [2014/05/28(水) 22:03:01.32 ID:???] >>583 ありがとうマジで助かった!
586 名前:nobodyさん mailto:sage [2014/05/29(木) 01:00:35.02 ID:???] RailsとCakeでMVCを覚えたせいで見事に騙され、モデルはテーブルに紐付くもんと思ってたわ テーブル関係ないビジネスロジックをどこに書くか迷って、コンポーネントに書いてたけど モデルに書いた方がいいんだろうか?
587 名前:nobodyさん mailto:sage [2014/05/29(木) 01:27:10.16 ID:???] >>586 ビジネスロジックをモデルに書くのは常識だ。 コンポーネントに書いたほうが良いなんて聞いたこと無い。 Rails も Cake もその点においては何も騙してねーと思うよ?
588 名前:nobodyさん mailto:sage [2014/05/29(木) 08:11:31.86 ID:???] テーブルをまたがる共通処理や、似て非なるテーブルに同じ処理をしたい場合に、ロジックを置く場所がないて話だと思うけど。 そういう場合にRailsの1モデル-1テーブル形式は破綻してるのは確か。
589 名前:nobodyさん mailto:sage [2014/05/29(木) 08:25:24.09 ID:???] 「具体的に言うと、モデルはデータベースのテーブルを表しますが」 book.cakephp.org/2.0/ja/models.html とあるせいで、モデル=テーブルに紐付く(原則として)と思ってたよ 市販の解説書も同じような感じで書いてる
590 名前:nobodyさん mailto:sage [2014/05/29(木) 08:44:24.60 ID:???] >>587 モデルの中で他のモデルをClassRegistry::initとかやりたくないんだよ コントローラに書きたくなければコンポーネントになる
591 名前:nobodyさん [2014/05/29(木) 10:03:02.00 ID:veg5U4SW] じゃあLibに作れよ Modelじゃだめって理由でComponentに置く発想がおかしい
592 名前:nobodyさん mailto:sage [2014/05/29(木) 10:04:39.91 ID:???] は?LibよりComponentの方が使いやすいじゃん Controllerの冒頭で配列に入れるだけで$thisで使えるんだから
593 名前:nobodyさん mailto:sage [2014/05/29(木) 10:18:58.89 ID:???] RailsにしてもCakeにしてもActive RecordないしTable Data Gatewayパターンを利用するクラスをModelと命名して データベーステーブルと(さらにはコントローラとも)1対1対応しなきゃいけないように見えるから勘違いしやすいんだよな Railsは1つのモデルに関するロジックは"モデル"クラスに書けるけど Table Data GatewayのCakeはこれすらコントローラやヘルパーに溢れ出やすい印象 複数"モデル"が絡むときに簡易サービス層として利用されやすいのがコンポーネントなのかな コントローラから呼びやすいしファットコントローラの一番楽な回避策だろうし 初心者でも(本来の広い意味での)モデルの中にサービス層を作りやすい実装や解説にしておいてくれるとありがたいんだけど
594 名前:nobodyさん [2014/05/29(木) 10:27:52.09 ID:veg5U4SW] >>592 なんだその理由ww
595 名前:nobodyさん mailto:sage [2014/05/29(木) 11:21:59.06 ID:???] >>594 何がおかしいんだ?
596 名前:nobodyさん [2014/05/29(木) 11:35:25.87 ID:Kdl2SKiZ] >>588 >似て非なるテーブルに同じ処理をしたい場合 これはビヘイビアがいい気がする。
597 名前:nobodyさん mailto:sage [2014/05/29(木) 13:26:17.97 ID:???] 前もこの話題出たよな 結論は出なかった
598 名前:nobodyさん mailto:sage [2014/05/29(木) 13:48:42.54 ID:???] 作るものの規模とかで最適な構成は変わるしね。 >>593 のいうサービス層が必要になる規模は、CakePHPではちょっと対象外なんじゃないかと思ってる。 CakePHPの中の人がどう思って作ってるかはしらんけど。
599 名前:nobodyさん mailto:sage [2014/05/29(木) 15:11:21.10 ID:???] 複数モデルにまたがる処理をコンポーネントに書いている人は $useTable = false の別のモデルを作った方がずっと楽だと思うんだが。 コントローラから直接参照できる点は一緒。 データのセット、バリデーション、フォーム値の復元。 使うモデルを $hasOne とか入れとけば ClassRegisry::init も呼ぶ必要ない。
600 名前:nobodyさん mailto:sage [2014/05/29(木) 15:24:59.72 ID:???] 俺はコンポーネントでやる方が楽だけどな
601 名前:nobodyさん mailto:sage [2014/05/29(木) 15:34:31.80 ID:???] おれも >>599 と同じだな。 Modelの下にサブディレクトリ切ってAppでパス通すのもありだと思う。 Lib は他で作ったライブラリを置く場所にしてる。 コンポーネントはコントローラの処理を助けることが限定されている場合しか書く意味ない。 もちろん、そういうロジックだけならコンポーネントはすれば良い。
602 名前:nobodyさん mailto:sage [2014/05/29(木) 16:13:20.58 ID:???] 複数ページにまつわる処理といえば、削除はどうしてる? 会員制サイトだと、以下のような構成がよくあるが、 会員 └日記 └お気に入り └掲示板の作成や投稿 会員を削除すると、その下の投稿内容も削除しないとおかしい(と俺は思う) だから俺は、管理画面で会員を削除したら、user_idがあるモデルは全て削除している。 削除はコントローラーに書いてる。
603 名前:nobodyさん mailto:sage [2014/05/29(木) 16:24:33.64 ID:???] >>602 会員モデルの削除を呼んだら消えるようにする
604 名前:nobodyさん mailto:sage [2014/05/29(木) 16:37:36.60 ID:???] >>603 hasManyでdependentをtrueだな。 俺も基本はそうしてるんだけど、>>602 のに「画像」がある場合は困る。 各テーブルを参照して画像情報を取得し、削除していく必要がある。
605 名前:nobodyさん mailto:sage [2014/05/29(木) 16:50:52.43 ID:???] beforeDelete,afterDeleteでいいんじゃない
606 名前:nobodyさん mailto:sage [2014/05/29(木) 18:18:39.64 ID:???] そうすると、Userモデル内で他のモデルも呼ぶことになるぞ?
607 名前:nobodyさん mailto:sage [2014/05/29(木) 18:23:19.16 ID:???] >>606 画像に関して言ったんだけど dependentで消せないものに関して、Userモデル内から他のモデル呼んでも問題ないと思うけどな
608 名前:nobodyさん mailto:sage [2014/05/29(木) 20:03:02.45 ID:???] deleteAll のコールバックって無いんだよね? あれば Image モデルの afterDelete に アセットを削除する処理を書いておけば良いのだろうけど。 saveMany や saveAll はコールバック効くのに deleteAll は効かないってのもおかしな設計ではあるな。
609 名前:nobodyさん mailto:sage [2014/05/29(木) 23:57:26.91 ID:???] deleteAll はコールバックあるよ。 ないのは updateAll
610 名前:nobodyさん mailto:sage [2014/05/30(金) 01:36:47.29 ID:???] >>609 あ、そうなのか! deleteAll の第3パラメータを true にするんだな。 今初めて気づいたわ。 じゃぁ、アセットの削除をそこに書けば良いわけか。
611 名前:nobodyさん mailto:sage [2014/05/30(金) 10:22:00.45 ID:???] つまり、どういう設計になるの?
612 名前:nobodyさん mailto:sage [2014/05/31(土) 17:06:44.83 ID:???] gitでcakephp管理する時、丸ごと全ファイルを管理するの? それともビヘイビアとかプラグインとかだけ? 教えてください。お願いします!
613 名前:nobodyさん mailto:sage [2014/05/31(土) 18:14:11.40 ID:???] 全部
614 名前:nobodyさん mailto:sage [2014/05/31(土) 18:28:27.72 ID:???] cakephpってまだcomposerに対応しきれてない? cakephp2でcakephp/appみたいなの探してるんだけどないかな?
615 名前:nobodyさん mailto:sage [2014/05/31(土) 18:39:11.86 ID:???] >>614 composer 使ってるけど、対応しきれてないと思ったのはどの辺り?
616 名前:nobodyさん mailto:sage [2014/05/31(土) 18:49:51.57 ID:???] >>615 bakeでプロジェクト作らないといけないのに ハードコーディングを直さなきゃいけないところとかかな
617 名前:nobodyさん mailto:sage [2014/05/31(土) 19:51:01.39 ID:???] それは composer というか bake project の仕様だなー。 include_path 通しておけばハードコーディングされなくなるけど。
618 名前:nobodyさん mailto:sage [2014/05/31(土) 20:57:15.14 ID:???] >>613 ありがとうございます!
619 名前:nobodyさん mailto:sage [2014/05/31(土) 23:23:49.38 ID:???] 今日俺がセルフHABTM方式というのを発明したんだが 何のことだかわかる?正式な名前とかある?
620 名前:nobodyさん mailto:sage [2014/06/01(日) 12:20:08.01 ID:???] そういうプラグインがあった気がする
621 名前:nobodyさん mailto:sage [2014/06/02(月) 00:43:40.92 ID:???] >>619 class Entity extends Model { public $hasAndBelongsToMany = array( 'RelatedEntity' => array( 'className' => 'Entity', 'foreignKey' => 'relational_id', ), ); } こういうこと?
622 名前:nobodyさん [2014/06/05(木) 11:57:49.53 ID:+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('hogehoge@aaaaaaa.jp' => 'ほげほげ')); $Email->to('hogehoge@aaaaaaa.jp'); $Email->subject('お願い'); $Email->send(); } }
623 名前:nobodyさん mailto:sage [2014/06/05(木) 14:05:40.48 ID:???] >>622 Windowsで開発するのやめれたらいいと思うよ。 よく知らんけど、Cakeのエラーメッセージは英語。 てことは、おそらくコマンドプロンプトか、代わりに使ってるターミナル系アプリの出してるエラー。 エラーメッセージから、cakeコマンドへのファイルパスや引数も含め、 実行しようとしたコマンドの文字数が多すぎた。 てことが予想出来る。
624 名前:nobodyさん [2014/06/05(木) 16:25:42.75 ID:+YUe8hGX] >>623 ありがとうございます。 おっしゃるとおりかもしれません。
625 名前:nobodyさん mailto:sage [2014/06/05(木) 19:12:08.87 ID:???] 自分はローカル用のアプリをCakePHPで作ってコマンドライン多用してるけど 「コマンド ラインが長すぎます」 なんてエラーは出たこと無いな。 原文はなんて書いてんの?
626 名前:nobodyさん mailto:sage [2014/06/05(木) 19:12:52.47 ID:???] あ、もちろん Windows のクライアントね。
627 名前:nobodyさん mailto:sage [2014/06/05(木) 20:29:33.26 ID:???] みんなwindowsじゃないん?
628 名前:nobodyさん mailto:sage [2014/06/05(木) 22:14:09.51 ID:???] 本番機はレンタルサーバでlinux系だけど社内にあるマシンは全部windowsなんで 普段はwindowsで開発、最終的なテストだけ本番機で行っているわ PHPはわりと環境依存大きいけどcake使ってると依存度がかなり軽減されると思う
629 名前:nobodyさん mailto:sage [2014/06/05(木) 22:23:36.19 ID:???] 俺はVM立てるな その方がお手軽だし
630 名前:nobodyさん mailto:sage [2014/06/05(木) 22:26:03.50 ID:???] windowsで開発してるけど phpとかmysqlはwindows上で動かすのは無駄だからやってない vagrantで簡単に作れるしさ
631 名前:nobodyさん [2014/06/05(木) 22:29:27.33 ID:d26v3tZW] >>628 開発用のサクラ鯖に直結して開発してるぞ。 リモートプロジェクト
632 名前:622 [2014/06/05(木) 23:27:51.32 ID:+YUe8hGX] 解決しました。 おさわがせしました。 PHPのメール設定がおかしかったみたいです。
633 名前:nobodyさん mailto:sage [2014/06/06(金) 00:56:33.55 ID:???] そうやってなんでもWindowsのせいにすればいいニダ…
634 名前:nobodyさん mailto:sage [2014/06/06(金) 01:07:28.95 ID:???] XAMPP使ってるのは俺だけのようだな
635 名前:nobodyさん mailto:sage [2014/06/06(金) 01:37:12.74 ID:???] だって、Windowsで開発してなければ起こらないトラブルや、 しなくていい苦労って多いもの。
636 名前:nobodyさん mailto:sage [2014/06/06(金) 02:32:32.38 ID:???] windowsだと実行が困難なのってcronぐらいじゃね? 画面系で動作が変わるとしたらソース自体に問題がありそう
637 名前:nobodyさん mailto:sage [2014/06/06(金) 03:44:03.22 ID:???] システムコールとかメール送信とかOSの絶対パスみなきゃいけない時とか
638 名前:nobodyさん mailto:sage [2014/06/06(金) 06:32:05.95 ID:???] 開発マシンで実行しないとbakeした時面倒なんだよ
639 名前:nobodyさん mailto:sage [2014/06/06(金) 11:48:12.37 ID:???] >>637 はわかるけど、>>638 は何で? Windows と Mac 混在して bake してて問題ないんだが、 気づいてないだけかな
640 名前:nobodyさん mailto:sage [2014/06/06(金) 12:18:51.00 ID:???] 知らないだけだろ
641 名前:nobodyさん mailto:sage [2014/06/06(金) 13:35:54.13 ID:???] >>640 今試しに同じデータベースを元にして Mac と Windows で bake したのを git で比較したけど差分なかったぞ?
642 名前:nobodyさん mailto:sage [2014/06/06(金) 13:45:08.57 ID:???] >>641 バージョンは? CAKE_CORE_INCLUDE_PATHって何定義してる?
643 名前:nobodyさん mailto:sage [2014/06/06(金) 15:39:44.51 ID:???] >>642 2.5.1 CAKE_CORE_INCLUDE_PATH はコアの Cake ディレクトリを格納している ディレクトリのパス。
644 名前:nobodyさん mailto:sage [2014/06/06(金) 15:59:39.81 ID:???] >>643 CAKE_CORE_INCLUDE_PATHに差があるんじゃない?
645 名前:nobodyさん mailto:sage [2014/06/06(金) 17:22:45.98 ID:???] >>644 そりゃ絶対パスだから違うわけだけど、 bake して生成された結果には影響ないよ? ちなみに今の論点はあくまでも >bakeした時面倒なんだよ に対する疑問ね。
646 名前:nobodyさん mailto:sage [2014/06/07(土) 13:17:32.00 ID:???] composerについて これは、phpファイルのみしか管理できないのですか? 例えばjqueryとか、画像も管理できるのでしょうか? 教えてください。 よろしくお願いします。
647 名前:nobodyさん mailto:sage [2014/06/07(土) 14:18:28.71 ID:???] >>646 composerは基本、外部のライブラリを管理したり プロジェクトの作成に利用したりするもの jqueryは component/jquery を使えば管理できる 画像は外部のものなのかい?
648 名前:nobodyさん mailto:sage [2014/06/07(土) 14:22:04.06 ID:???] >>647 ありがとうございます。 画像やjqueryはプラグインに入れようと思って、それをbitbucketで管理します。 全てのサイトでそのプラグインをcomposerで管理できるのかなとおもいまして。
649 名前:nobodyさん mailto:sage [2014/06/07(土) 14:26:11.05 ID:???] >>648 bitbucketで 各々サイトと、jqueryのプラグインを別に管理したとして >全てのサイトでそのプラグインをcomposerで管理できる ってのは可能だよ
650 名前:nobodyさん mailto:sage [2014/06/07(土) 16:46:31.63 ID:???] >>649 ありがとうございます! 早速やってみます。
651 名前:nobodyさん mailto:sage [2014/06/10(火) 09:20:20.15 ID:???] cakephp.jp/modules/newbb/viewtopic.php?topic_id=1119&forum=8 これと同じ問題でハマってます どうすればいい? users/123 等の時は users/index/123にしたくて users/read users/edit などアクション名を指定した時は、そのアクション実行したいのですが
652 名前:nobodyさん mailto:sage [2014/06/10(火) 10:48:00.76 ID:???] >>651 正規表現で絞れば良いだけじゃないの? Cakeは最近使ってないからわからんが
653 名前:nobodyさん mailto:sage [2014/06/10(火) 11:13:53.54 ID:???] おお、性器表現も使えるのか どこかにサンプルはないでしょうか?
654 名前:nobodyさん mailto:sage [2014/06/10(火) 13:57:21.11 ID:???] >>653 api.cakephp.org/2.5/class-Router.html#_connect book.cakephp.org/2.0/en/development/routing.html#route-elements
655 名前:nobodyさん mailto:sage [2014/06/10(火) 17:33:53.47 ID:???] >>654 d 結局正規表現使わなかったけど、解決しました
656 名前:nobodyさん mailto:sage [2014/06/11(水) 00:44:51.34 ID:???] twitterのように自分自身のユーザ情報のみ 編集可能にする方法を教えて下さい。 (他人のユーザ情報は編集不可、表示のみ)
657 名前:nobodyさん mailto:sage [2014/06/11(水) 00:46:47.80 ID:???] ログインユーザと編集する対象のユーザが同じかどうか確かめればいいだけじゃん
658 名前:nobodyさん mailto:sage [2014/06/11(水) 00:51:45.60 ID:???] >>657 ありがとうございます。 一致したら「編集」ボタンを表示する、などの処理をすれば良いのでしょうか?
659 名前:nobodyさん mailto:sage [2014/06/11(水) 01:06:59.37 ID:???] 基本的に信頼していいのは自分がプログラムにハードコーディングしたサーバ側の処理だけ クライアント側は他にアプリを作ればどんなHTTPリクエストでも送れるからだ 編集ボタンを表示しないのも予防策にはなるが 根本的にはサーバ側でデータベースのアップデートやセーブやデリートをする前に CRUDの対象となるレコードがログインユーザ自身のものかどうかを確認するステップが必要 より具体的にはログインユーザのIDと更新するユーザテーブルのレコードのIDが一致するかどうかだ
660 名前:nobodyさん mailto:sage [2014/06/11(水) 02:19:09.44 ID:???] >>658 は、ちゃんと >>659 の言ってることを理解できたのだろうか・・・
661 名前:nobodyさん mailto:sage [2014/06/11(水) 08:53:19.95 ID:???] リクエストにユーザーIDをつけない
662 名前:nobodyさん mailto:sage [2014/06/11(水) 10:34:05.54 ID:???] あれ? ユーザー情報の更新のリクエストにユーザーIDを含むようなフォームを作ったとしても Cakeのパラメータ改ざんとCSRFのチェックが有効なら 悪意あるユーザーがフォームを改ざんして他のユーザーIDに変えたら パラメータ改ざんチェックで引っかからんのかい? 教えてエロい人 まあそれでも>>661 みたいに根本的に他のユーザの情報を更新できないようにしたほうが安心安全か 人為的なミスも起きにくいし データベースを変更しないユーザー情報表示画面の時だけリクエストにユーザーIDを含める ユーザー更新・削除時は対象レコードの選択にログインユーザのIDをそのまま使う
663 名前:nobodyさん mailto:sage [2014/06/11(水) 17:28:51.09 ID:???] >>662 CSRF対策は、そのページに行くまで正しい経路をたどってるかどうか フォーム改ざんは、そのページに含まれるポスト対象のフィールドが正しいかどうか のチェックだったはず。なので、POSTされるフィールド値を変更されたとしても、 Cake側では対応できないはず。
664 名前:nobodyさん mailto:sage [2014/06/11(水) 20:19:39.05 ID:???] ありがとうございます。 皆様のおかげでテストケースの有用性がわかるようになりました。 composerの便利さも。 jenkinsとかはどうなんですか?
665 名前:nobodyさん mailto:sage [2014/06/11(水) 21:00:28.09 ID:???] >>568 の問題、2.5でも直ってねーじゃねーか AppControllerを継承したAdminControllerを継承したEventControllerを動かしたら AdminControllerのusesに書いてあるモデルが、AdminControllerのbeforeFilter内で使えなかったぞ EventControllerのusesに追加したら動いたが、なんだかなー
666 名前:nobodyさん mailto:sage [2014/06/11(水) 21:09:11.43 ID:???] >>665 マージする継承クラスを指定できるパラメータがあったはず。 ドキュメント読んでみて。
667 名前:nobodyさん mailto:sage [2014/06/11(水) 21:52:04.25 ID:???] >>666 $_mergeParentのことか? これでAdminControllerを指定したら、今度はAppControllerをマージしてくれないからダメ。 ぐぐったらこれ皆困ってるらしくてそれぞれ独自に_mergeVarsを改造したりして直してるな。 なんでこの問題公式が放置してるんだ?
668 名前:nobodyさん mailto:sage [2014/06/11(水) 22:06:20.17 ID:???] >>667 あ、本当だな。 CakePHPが糞と言われるのがよく分かるwww
669 名前:nobodyさん mailto:sage [2014/06/11(水) 22:07:34.04 ID:???] それがCakeクオリティ! 3の開発で忙しいんじゃないかな(*´∀`*)
670 名前:nobodyさん mailto:sage [2014/06/11(水) 22:43:50.86 ID:???] 糞とか言ってる暇があったら issue 出すか、プルリクしろよ。 オレはやんないけど。
671 名前:nobodyさん mailto:sage [2014/06/12(木) 01:35:46.71 ID:???] >>670 出したところで却下かと。 >>667 はいくつかのコントローラに共通する機能が必要なら、 その時は継承ではなくてコンポーネントを作ったらどうかな? コンポーネントはそのために存在しているわけだし。 共通機能を継承で得ようとするのは、言語やフレームワークを問わず、 あんまり良い選択ではないと思うけど。
672 名前:nobodyさん mailto:sage [2014/06/12(木) 01:39:01.21 ID:???] え? うーむこれがPHP脳というやつか
673 名前:nobodyさん mailto:sage [2014/06/12(木) 01:48:11.52 ID:???] >>672 言語は問わないと書いたがな。 たとえば EffectiveJava 第4章 項目14「継承よりコンポジションを選ぶ」 コンポーネントは文字通りこのコンポジションパターンだよ。
674 名前:nobodyさん mailto:sage [2014/06/12(木) 02:42:37.90 ID:???] >>671 >>665 の例で言うと、EventController(他にもあるが)は管理者専用機能のコントローラである。 管理者用コントローラに共通の処理(ログインなど)をAdminControllerに書き、EventControllerはそれを継承した。 同じことをコンポーネントでやろうとすると、すべての管理者用コントローラーに まったく同じコード(コンポーネントのメソッドを呼び出すコード)を書かねばならないのでは? 非常に不便だと思うが、俺が勘違いしてたら教えて欲しい。
675 名前:nobodyさん mailto:sage [2014/06/12(木) 02:56:04.36 ID:???] Controller::beforeFilter() に言及してたから、 その処理なら Component::startup() でいいんじゃないかと思ったんだけど、どうだろう? 場合によってはメソッドの呼び出しも必要になるけれども けど、それは parent:: で親クラスのメソッドを呼ぶのとそれほど変わりないのかなと。
676 名前:nobodyさん mailto:sage [2014/06/12(木) 02:57:29.99 ID:???] >>671 がややずれてるのは >いくつかのコントローラに共通する機能 としてるけど、>>665 で問題にしてるのは 広い意味では機能で間違いないんだけど 単に設定値である点においてズレてる。 ここではそれこそ、コンポーネントの 使い方なんかを指定しているわけで、 これは継承してほしいと思うよ。
677 名前:nobodyさん mailto:sage [2014/06/12(木) 03:11:49.49 ID:???] >>676 1.x系からのふるまいだから、仕様変更が入る可能性は低くないかな。 どうしても継承の継承が必要なケースで さらに、孫クラスに基底クラスから継承させたいパラメータがあるなら 基底クラスのコンストラクタで $this->uses に入れればいいわけだし。
678 名前:nobodyさん mailto:sage [2014/06/12(木) 09:12:51.74 ID:???] こんなゴミなもの対応されたら また名が廃る
679 名前:nobodyさん mailto:sage [2014/06/12(木) 11:19:04.70 ID:???] 3のソースからは $_mergeParent は消えてるみたいだな。
680 名前:nobodyさん mailto:sage [2014/06/12(木) 11:22:15.38 ID:???] 常識的に考えて、マージしないとおかしいだろ 何だこの仕様
681 名前:nobodyさん mailto:sage [2014/06/12(木) 11:22:23.38 ID:???] 3使ってる人いるん? どんな感じですか?
682 名前:nobodyさん mailto:sage [2014/06/12(木) 11:28:47.32 ID:???] 3は継承全部マージされるよ パフォーマンスはお察し
683 名前:nobodyさん mailto:sage [2014/06/12(木) 12:11:49.21 ID:???] 3に苦労して移行するくらいなら、LaravelとかRailsに移るかな。 使ってこそのフレームワークだから、コミュニティの勢いは重要。
684 名前:nobodyさん mailto:sage [2014/06/12(木) 12:25:24.65 ID:???] cakeとsymfonyが本命FWとして争っていた時期が懐かしい
685 名前:nobodyさん mailto:sage [2014/06/12(木) 13:23:35.06 ID:???] みんな良く勉強できるな。他の言語に移るのは辛いわ。。。
686 名前:nobodyさん mailto:sage [2014/06/13(金) 08:29:35.00 ID:???] Cake使い続けるほうが長期的に見て辛い
687 名前:nobodyさん mailto:sage [2014/06/13(金) 08:39:23.01 ID:???] それはあるw 書いたコードの分だけ、負債がどんどん増えていく
688 名前:nobodyさん mailto:sage [2014/06/13(金) 09:00:43.34 ID:???] その負債の原因がCakeではなく自分にあるとも気づかぬままにw
689 名前:nobodyさん mailto:sage [2014/06/13(金) 10:44:08.86 ID:???] 管理者用の機能って、Adminコントローラを作るんじゃなくて adminプレフィクスを使うのが一般的な方法だと思っていたんだが 実際のところみんなはどうやっているんだ?
690 名前:nobodyさん mailto:sage [2014/06/13(金) 11:00:42.12 ID:???] >>689 俺はクッキーでログイン画面作って、セッション有る無しでview表示を少し変えてる。 ずっとこれでやってるけど。。。 ダメかな?
691 名前:nobodyさん mailto:sage [2014/06/13(金) 12:20:32.10 ID:???] 一般利用者も管理者も同じaction通してるってことか。 全体的に管理者の機能が一般利用者とそんなに変わらなければそれでもいいのかもね。 プレフィクスを切っている場合でも public function admin_search() { $this->search(); } なんてコードは実際に書かれるわけで。
692 名前:nobodyさん mailto:sage [2014/06/13(金) 14:29:24.42 ID:???] >>689 面白そうだったんで最初やってみたけど、 同じクラスにヤバいアクションが混在するのが気持ち悪い。 それ以降やったこと無いな。 >>690 表示だけならそれでいいんじゃない?
693 名前:nobodyさん mailto:sage [2014/06/13(金) 17:20:45.32 ID:???] 俺は管理画面と一般画面のappは分けてるよ 管理画面だけ変えたい設定(キャッシュしないとかdebug2とか)があるし。
694 名前:nobodyさん mailto:sage [2014/06/14(土) 17:11:30.81 ID:???] みなさん、ホーム画面ってどのコントローラーでやってます? ホーム用のコントローラーを作るか既存のコントローラーでやるか
695 名前:nobodyさん mailto:sage [2014/06/14(土) 17:15:43.40 ID:???] ホーム専用
696 名前:nobodyさん mailto:sage [2014/06/14(土) 17:19:19.02 ID:???] 専用じゃないや HomesControllerだけど他にもaboutとかシンプルなページと兼用
697 名前:nobodyさん mailto:sage [2014/06/14(土) 17:26:13.81 ID:???] >>696 その場合、コントローラー付きで直アクセスされた場合、 何かリダイレクト処理を入れてるんですか? (/homes/indexとか/homes/aboutでアクセスされた場合)
698 名前:nobodyさん mailto:sage [2014/06/14(土) 17:37:45.91 ID:???] >>697 routes.php弄る
699 名前:nobodyさん mailto:sage [2014/06/14(土) 17:42:44.81 ID:???] あ、違うな 対策はしてない 最近やってないから忘れてる…
700 名前:nobodyさん [2014/06/14(土) 18:59:09.94 ID: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さん mailto:sage [2014/06/14(土) 21:50:21.39 ID:???] >>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さん mailto:sage [2014/06/14(土) 21:54:32.07 ID:???] あ、コメントミスった。正しくはこっち /* (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 mailto:sage [2014/06/15(日) 00:45:45.76 ID:???] >>701-702 ありがとうございます。大変参考になりました。
704 名前:nobodyさん mailto:sage [2014/06/15(日) 14:07:12.52 ID:???] フォームヘルパーのinput作成のname部分を data[Model][name]→nameにする方法って無いでしょうか?
705 名前:nobodyさん mailto:sage [2014/06/15(日) 16:51:00.51 ID:???] >>704 FormHelper のパラメータでってことなら不可。
706 名前:nobodyさん mailto:sage [2014/06/15(日) 17:42:36.89 ID:???] >>705 やっぱり無理ですか。諦めます
707 名前:336 mailto:sage [2014/06/15(日) 18:33:33.91 ID:???] >>706 オーバーライドして、アウトプットを置換するだけじゃん
708 名前:nobodyさん mailto:sage [2014/06/16(月) 00:20:49.49 ID:???] フォームヘルパー本当に使い辛い 散々ハマった挙げ句、自分でFormタグ書いてるわ
709 名前:nobodyさん [2014/06/16(月) 12:40:04.49 ID:2sVNmbqM] 現在、cakeのAuth認証を使ってログインシステムを作っているのですが 一度登録済のパスワードをユーザ操作により変更した場合、 パスワードの認証対象の値はハッシュ値で自動でDBに登録されるのですが それを再び登録し直すにはどうすれば良いのでしょうか? 例) [入力パスワード] [ハッシュ値] testpass ijierwaaasdfkjiewi32jasdfkj3 ↓ ユーザがパスワードを変更した場合 testpass2 asdafasdfasjd・・・etc ←ハッシュ化する関数は何でしょうか?
710 名前:nobodyさん mailto:sage [2014/06/16(月) 18:38:51.83 ID:???] フィームヘルパーのselectで0の値が空欄になるのは仕様ですか?
711 名前:nobodyさん mailto:sage [2014/06/17(火) 00:26:53.74 ID:???] >>709 Security::hash($password, null, null) ちなみに v2.4 までは AuthComponent::password($password) だったけど、2.5 からは非推奨。
712 名前:nobodyさん mailto:sage [2014/06/17(火) 00:34:56.25 ID:???] Security::hash() の第2と第3パラメータは要らないみたいだ Security::hash($password) でOK
713 名前:nobodyさん mailto:sage [2014/06/17(火) 06:18:50.52 ID:???] CakePHPてprimary idは必ずauto incrementのintでないと駄目なん? INSERT時にidがnullであることを前提にしてるから、自前でid渡すと バリデーション時にisUniqueやonCreateの指定がうまくいかなくなるね。 これはCakeではそういうもんなのか。自前でバリデーション書くしかないのか。
714 名前:nobodyさん mailto:sage [2014/06/17(火) 11:33:53.22 ID:???] >>713 Model::$primaryKey で設定 動的な変更も可 複数キーは不可。3から対応
715 名前:nobodyさん mailto:sage [2014/06/17(火) 11:38:54.51 ID:???] >>713 >バリデーション時にisUniqueやonCreateの指定がうまくいかなくなるね。 そうか?
716 名前:nobodyさん mailto:sage [2014/06/17(火) 12:03:04.11 ID:???] >>714 それはもちろん指定してる。 だが、isUniqueやonCreateはうまくいかなかった。 結局数字のidを追加して対応した。
717 名前:nobodyさん mailto:sage [2014/06/17(火) 12:32:01.97 ID:???] あぁ、そういうことか。なるほど。 onCreate は使ったこと無いんでよく分からんけど、 isUnique は、保存前に Model::$id をセットしてやってもダメなん?
718 名前:nobodyさん mailto:sage [2014/06/17(火) 16:22:43.39 ID:???] >>717 それは試してないな。primaryKeyの名前がidじゃなかったから、idは一切いじらなかった。 Model::isUniqueのソースあらためて見たら、$this->idにNULLを入れていたらうまくいったかもしれん。
719 名前:nobodyさん mailto:sage [2014/06/17(火) 17:08:04.87 ID:???] Model::$id は、primaryKey の値のことなので、 スキーマのフィールド名が id であるかどうかとは無関係。
720 名前:nobodyさん mailto:sage [2014/06/18(水) 03:28:03.88 ID:???] >>719 なるほど! 後で試してみよう
721 名前:nobodyさん [2014/06/18(水) 12:55:32.95 ID:1XJ5G0pn] すみません、今ドットインストールの講座が終わりまして、 自分でCakePHPのサイトを作ろうと思っているのですが、気になった点がありました。 今、作ろうとしているサイトは、ポートフォリオ系になるので、 自分が作ったゲームやWebサイトを置く予定であります。 CakePHPを使う必要性は薄いのですが、フレームワーク経験が必須なため、 経験を積むという意味で、CakePHPを使用しました。 そして、サイトには、大きく分類して、トップページ、ゲーム、Webサイト、リンクがあり、 それぞれ、topsテーブル、gamesテーブル、sitesテーブル、linksテーブルがあります。 そこで、気になったのが、 CakePHPでは、Controller、View、Model、データテーブルの名前を揃えなければならないと習ったのですが、 そうなると、出力するテーブルが違う場合は、GamesController、SiteControllerのように、 コントローラーとフォルダを用意すべきでしょうか。 それとも、1つのコントローラー、1つのViewフォルダにまとめられるでしょうか?
722 名前:nobodyさん mailto:sage [2014/06/18(水) 13:01:47.43 ID:???] 好きなようにすれば良い
723 名前:nobodyさん [2014/06/18(水) 13:23:44.25 ID:1XJ5G0pn] つまり、Controller名、フォルダ名と異なるテーブルを使用することは可能で、 特に問題ないとのことでしょうか?
724 名前:nobodyさん mailto:sage [2014/06/18(水) 14:07:44.93 ID:???] >>721 topsってテーブルが気になるな。何があるテーブルか分からん。 sitesテーブルとlinksテーブルの違いとか。 お前さんの用途は「自作のゲームやWebサイトの情報を公開する」だろ? じゃ、「products」テーブルだけか、分けても「links」「games」だけだと思うんだが。 あと、基本的なCakeの命名規則が分かってないよ。 Controller:GamesController Model :GameModel View :Games テーブル:games
725 名前:nobodyさん [2014/06/18(水) 14:20:51.04 ID:lT0uB39l] >>711 >>712 ありがとうございます!!
726 名前:nobodyさん [2014/06/18(水) 14:29:45.54 ID: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さん mailto:sage [2014/06/18(水) 15:13:40.83 ID:???] だからtopsって何なんだよw 更新履歴ならnewsとかupdatesとかにしたらどうだ?
728 名前:nobodyさん mailto:sage [2014/06/18(水) 15:41:33.35 ID:???] 1XJ5G0pnはもう少し勉強したほうがいいな。根本的なMVCが分かってない
729 名前:nobodyさん mailto:sage [2014/06/18(水) 15:45:20.63 ID:???] いや英語を勉強した方がいい
730 名前:nobodyさん [2014/06/18(水) 16:30:07.27 ID:1XJ5G0pn] すみません、画面名からテーブル名作ってしまいました。 最初は、更新履歴を表したテーブル名は、newsでつけていたのですが、 コントローラー名とフォルダ名を揃えなければならないということ思い出して、 それでトップ画面の名前を、更新履歴のテーブル名にしてしまいました。 (トップ画面に更新履歴を表示させるため) それで、テーブル名とコントローラー名、フォルダ名がずれていても問題ないということでしょうか?
731 名前:nobodyさん mailto:sage [2014/06/18(水) 16:39:06.81 ID:???] モデルとコントローラはむしろずれてないとバグりやすくなるだろ。 1画面にニュースとリンクを両方表示したいときどうするつもりだ? 画面に名前をつけたのがView、データの集まりに名前をつけたのがModel。 Cakeでは便宜上Viewのフォルダ名とコントローラ名を合わせると幸せになれるというだけ。
732 名前:nobodyさん mailto:sage [2014/06/18(水) 16:39:37.90 ID:???] ずれるの意味が分からんが、MVCでバラバラなら問題あるだろ
733 名前:nobodyさん [2014/06/18(水) 16:59:54.99 ID:ma+gijMn] 秒速で1億稼ぐ豚が・・・レイプ www.tanteifile.com/diary/2014/06/17_01/
734 名前:nobodyさん mailto:sage [2014/06/18(水) 17:34:03.35 ID:???] 上の方でも誰か書いてるけど、1XJ5G0pn はまず好きにすればいい。 つまり、いろいろ質問してるけど、とにかくやってみてから 問題を見つけて行ったほうがいい。 手を動かさない奴に何をいっても無駄だ。 >という風に分けた方が、使用するテーブル単位で分けた方が無難ということでしょうか などという小賢しい質問をする前にまず作れ。 そして壊して作りなおせ。
735 名前:nobodyさん mailto:sage [2014/06/18(水) 23:32:42.92 ID:???] Cakeマスターの皆さんに質問 ViewからModelのvalidateを参照して、「名前は○文字までです」みたいな表示をしたい。 ベストプラクティスなやり方ありますかね? もしくはViewからもModelからも見える所に数値のdefineを置くべきだろうか。
736 名前:nobodyさん mailto:sage [2014/06/19(木) 00:35:54.86 ID:???] >>735 文字数制限をViewでも管理したいってことか? そう頻繁に変わるものじゃないから、 Viewに直接注意書きを書くのが一番だと思うが
737 名前:nobodyさん mailto:sage [2014/06/19(木) 01:10:02.52 ID:???] うちは最近設定値関係は Config に json で保存するパターンを試してる。 パーサのオーバーヘッドが多少気になるけど、まぁ悪くない。
738 名前:nobodyさん mailto:sage [2014/06/19(木) 01:18:19.13 ID:???] >>736 Viewから変更する必要はなく、注意書きを書きたいだけなんだよね 制限文字数なんかは後から変更される可能性があるので、ModelとViewの両方に直書きしたくない やはり設定ファイル式にすべきか
739 名前:nobodyさん mailto:sage [2014/06/19(木) 02:04:30.51 ID:???] Configモデルに数値を保存してコントローラーから操作すればいいじゃん。 モデルキャッシュを使うと、重くならないぞ
740 名前:nobodyさん mailto:sage [2014/06/19(木) 02:06:51.32 ID:???] viewからmodelを参照するのは全く構わないと思う。俺はviewからいつでもmodelのインスタンスを参照できるように$getmodel('Foo')みたいなクロージャを用意してるので、バリデーションルールにもアクセスできる。
741 名前:nobodyさん mailto:sage [2014/06/19(木) 16:22:55.58 ID:???] 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さん mailto:sage [2014/06/19(木) 23:44:09.30 ID:???] cakephpを2から3に上げる時とか、 業務でやってたら怖くない? 慣れなん? サーバー移転ですら怖くてできん。。
743 名前:nobodyさん mailto:sage [2014/06/19(木) 23:45:58.63 ID:???] 業務システムのフレームワークをベータ版にしようとするお前がこえーよw
744 名前:nobodyさん mailto:sage [2014/06/19(木) 23:47:32.48 ID:???] >>743 今はそうだけどさ 仮にstableになっても。
745 名前:nobodyさん mailto:sage [2014/06/20(金) 00:11:16.79 ID:???] 2->3 はハードル高そうだな
746 名前:nobodyさん mailto:sage [2014/06/20(金) 01:16:57.68 ID:???] 2であと3年は戦うつもり
747 名前:nobodyさん mailto:sage [2014/06/20(金) 09:35:32.81 ID:???] 3に変えてまでCakeについていく気はないな 別のフレームワークに変えるだろう でも今からだと何がいいんだろう
748 名前:nobodyさん mailto:sage [2014/06/20(金) 10:09:05.76 ID:???] >>747 ファルコンってどうなん? 速いみたいだけど。
749 名前:nobodyさん mailto:sage [2014/06/20(金) 11:20:56.99 ID:???] >>747 laravelじゃないか phalconは業務でも使ってるけど バグはそれなりにあって、Segmentation Faultで落ちると結構大変 速度は比較にならないほど速いし、フレームワークの仕組みも良いけどさ
750 名前:nobodyさん [2014/06/20(金) 16:37:24.67 ID:1CC0efjo] cakePHPを使ったシステムで アップローダーを作ろうとしているのですがウィルスファイルをアップロードされると不味いので アップロード可能なファイル種類を事前に jpg のみに制限しておいた方が無難でしょうか?
751 名前:nobodyさん mailto:sage [2014/06/20(金) 17:18:38.33 ID:???] >>750 どうやって制限するの?
752 名前:nobodyさん mailto:sage [2014/06/20(金) 17:31:29.21 ID:???] >>751 バリデーションに書く
753 名前:nobodyさん mailto:sage [2014/06/20(金) 17:41:37.43 ID:???] >>752 mimetypeで制限するってことか jpeg画像のウィルスとかもあるからねぇ
754 名前:nobodyさん mailto:sage [2014/06/20(金) 17:53:47.33 ID:???] つーか、jpeg型ウィルスって実行するには 別のウィルスに感染させる必要があるんだろ? 単に画像を閲覧しただけで感染するなら、対策とか無理じゃないか? twitterとかfacebookはウィルスだらけになるぞ
755 名前:nobodyさん [2014/06/20(金) 18:27:17.32 ID:I3iP4JeK] という事はつまり、jpgファイルであったとしても >>754 のアドバイスを参考にすると jpgのみアップロード可能にしておけば、ウィルスに感染していない人が その画像を閲覧する分には何も影響がないと言う事でしょうか? ウィルス感染している人自体が少ないと思うので被害は少ないですよね。
756 名前:nobodyさん mailto:sage [2014/06/20(金) 18:38:27.21 ID:???] >>755 と言うより、防ぎようがない気もする。 でも、画像アップロード出来るWebサービスは日々オープンしてるわけだし、 そこまで神経質になっても仕方ないよ。
757 名前:336 mailto:sage [2014/06/20(金) 18:41:21.97 ID:???] 再エンコード
758 名前:nobodyさん mailto:sage [2014/06/20(金) 20:23:31.26 ID:???] それいいね、目から鱗
759 名前:nobodyさん [2014/06/20(金) 21:08:45.45 ID:5NSL3HdG] >>757 詳しく
760 名前:nobodyさん mailto:sage [2014/06/20(金) 22:04:51.68 ID:???] >>759 画像を読んで再エンコードすれば 余計なバイナリが入ってたとしてもなくなる
761 名前:nobodyさん mailto:sage [2014/06/21(土) 00:35:05.85 ID:???] Wordpressが確か再エンコードしていた気がする
762 名前:nobodyさん mailto:sage [2014/06/21(土) 00:48:00.43 ID:???] それは再エンコードじゃなくてサムネイル作ってるだけでは。 まあサムネイル作って無効な画像かどうか(ライブラリによるがnullが返ったり真っ白画像になったり)を調べるという手はあるかも。
763 名前:nobodyさん mailto:sage [2014/06/21(土) 01:03:27.67 ID:???] 今どき、JPEGだけのアップローダーにどんな役割があるのか興味あるな。
764 名前:nobodyさん [2014/06/21(土) 03:26:03.92 ID:f1vlSuIg] ↑ jpgでいいやん。jpgでエロ画像みえるやん。jpgで072できるやん。
765 名前:nobodyさん mailto:sage [2014/06/22(日) 12:51:34.63 ID:???] 以下のテーブル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さん mailto:sage [2014/06/22(日) 14:20:31.99 ID:???] >>765 profileにuser_idを渡すはX profileにidを渡さないと。
767 名前:nobodyさん mailto:sage [2014/06/22(日) 15:16:50.54 ID:???] >>766 ありがとうございます。 解決しました。
768 名前:nobodyさん mailto:sage [2014/06/22(日) 22:23:19.92 ID:???] Model::create()したらテーブルカラムのDEFAULT値が勝手にdataにセットされるの止めて欲しいわ。 おかげでUPDATE処理時に更新対象じゃないカラムが勝手にDEFAULT値に変わってえらい事になった。 なにしてくれるんじゃい。
769 名前:nobodyさん mailto:sage [2014/06/22(日) 23:25:35.42 ID:???] whitelistつかえ
770 名前:nobodyさん mailto:sage [2014/06/24(火) 16:40:44.26 ID:???] Cakeでシステム作って、Apache benchしたらRequests per secondが1.5ぐらいと激遅。 DBアクセスやめて固定のJSONを1行返すだけにしても大きく変わらず。 Core i7のWin8のXampp環境でもCentOSのVPS環境でもそんな感じ。 いくらCakeが遅いって言っても遅すぎると思うのだが、なにかおかしいです?
771 名前:nobodyさん mailto:sage [2014/06/24(火) 17:44:24.00 ID:???] キャッシュ使えや
772 名前:nobodyさん mailto:sage [2014/06/24(火) 17:59:57.86 ID:???] そういうレベルではない 根本何か間違えてるだけだろ
773 名前:nobodyさん mailto:sage [2014/06/24(火) 21:11:44.93 ID:???] ネットワークの問題かApache benchの使い方間違えてるに1ペリカ
774 名前:nobodyさん [2014/06/24(火) 23:54:56.03 ID:NjjfXiKQ] 検索ボタンを押した際に GETパラメータでcakeのコントローラにアクセスを掛けたいのですがどうすれば良いでしょうか? 本来は、検索ボタンを押した際に@でコントローラのメソッドにアクセスを したいのですが、Aになってしまいます。 @・・・期待しているGETアクセス test.com/hoge/buta/123/tarou A・・・想定外に生成されるURL 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>
775 名前:nobodyさん mailto:sage [2014/06/25(水) 00:05:21.21 ID:???] javascript
776 名前:nobodyさん mailto:sage [2014/06/25(水) 00:44:49.49 ID:???] >>774 GETパラメータならAで正しいだろ
777 名前:nobodyさん mailto:sage [2014/06/25(水) 00:53:52.36 ID:???] >>774 HTTPのお勉強からやり直しましょう
778 名前:774 [2014/06/25(水) 01:07:07.36 ID:1IpoS71w] >>776 >>775 やはり通常のFormではCakePHP用のURLを生成する事は出来ないみたいですね。 仕方無いので検索ボタンをクリック時に動的にURLを組み替えてリダイレクトする事により実装する事にします。
779 名前:nobodyさん mailto:sage [2014/06/25(水) 01:11:23.04 ID:???] 例に突っ込むのもアレだが ID指定した時点で検索というよりただの詳細表示のような
780 名前:nobodyさん mailto:sage [2014/06/25(水) 01:50:00.94 ID:???] javascriptでやるのが無難だな。俺もそうしてるし。
781 名前:nobodyさん mailto:sage [2014/06/25(水) 12:47:26.75 ID:???] 検索項目が増える時のことを考えると、 2の方がいいと思うんだが
782 名前:nobodyさん [2014/06/25(水) 13:46:34.28 ID:cgps1MKk] >2の方がいいと思うんだが どういうこと?
783 名前:nobodyさん mailto:sage [2014/06/25(水) 14:13:35.35 ID:???] そのあたりはAPIの設計に関わることだからなんとも言えない
784 名前:nobodyさん mailto:sage [2014/06/25(水) 14:21:54.78 ID:???] 検索項目が増えるのにGETでやりたいってのは、設計ミスじゃね? それならPOSTにしろよ
785 名前:nobodyさん mailto:sage [2014/06/25(水) 15:45:34.59 ID:???] >>782 ルーティングや引数の設定が面倒。 ていうか大体の検索エンジンとかgetパラメータでやってね?
786 名前:nobodyさん mailto:sage [2014/06/25(水) 20:30:38.80 ID:???] 冪等かつ安全な処理はGETが普通っすね POSTだとキャッシュもされないし
787 名前:nobodyさん mailto:sage [2014/06/25(水) 21:43:08.93 ID:???] 記事中の hoge.com/app/webroot/media/tarot.jpg が読まれた際、 hoge.com/media/tarot. jpg が読まれるようにしいのですが、良い方法ないでしょうか? nginxでやってます。 ちなみにhoge.comは自分のドメインです。
788 名前:nobodyさん mailto:sage [2014/06/25(水) 21:50:26.46 ID:???] >>787 意味わからん
789 名前:nobodyさん mailto:sage [2014/06/25(水) 22:32:59.91 ID:???] >>788 すいません。自己解決しました。
790 名前:nobodyさん mailto:sage [2014/06/26(木) 02:12:49.47 ID:???] せっかくだから張っておけよ www.matomater.com/16864/
791 名前:nobodyさん [2014/06/26(木) 21:12:17.80 ID:ceT3Qpnq] linux のシェルについての話しはどこですれば良いですか? ここだとすれ違いですよね?
792 名前:nobodyさん mailto:sage [2014/06/26(木) 21:39:46.70 ID:???] php で日付の正規表現を行いたいのですが 以下の形式の日付型文字列であればOK、違っていればNGと厳密なバリデーションチェックを掛けたいのですが どうすれば良いでしょうか? 2014-06-10 - で split してチェックを掛けるしかないのでしょうか?
793 名前:nobodyさん mailto:sage [2014/06/26(木) 22:09:00.35 ID:???] $check = '2014-06-10'; $isValid = date('Y-m-d', strtotime($check)) === $check;
794 名前:nobodyさん [2014/06/26(木) 22:17:51.48 ID:h6oXqOHu] >>793 サンクス! ここまで短く判定出来るなんて、、、 驚きです。
795 名前:nobodyさん mailto:sage [2014/06/26(木) 22:29:39.04 ID:???] PHPって質問スレないのか?
796 名前:nobodyさん mailto:sage [2014/06/26(木) 22:32:22.88 ID:???] date関数って第二引数にfalse突っ込んでも0と同じ扱いで動くのか きめえな
797 名前:nobodyさん mailto:sage [2014/06/26(木) 22:57:46.67 ID:???] >>796 大丈夫だよ。あなたの顔に比べれば断然綺麗なものですよ^^b
798 名前:nobodyさん mailto:sage [2014/06/26(木) 23:04:09.80 ID:???] これがPHPerです
799 名前:nobodyさん mailto:sage [2014/06/26(木) 23:54:58.72 ID:???] キモくても何でも動けばいいんだよ。形にこだわり過ぎるのはよくない
800 名前:nobodyさん mailto:sage [2014/06/27(金) 11:40:50.24 ID:???] デザインやHTMLコーディングもやっている人に聞きたいんだけど、 先にHTMLコーディングをしてある程度のファイルを作って、 その後にViewファイルを作る?それともいきなりViewから作る? 俺はトップページとか主要なページのHTMLコーディングを先にして それからView化するだけど、後から変更する事が多くて二度手間になるのを感じる。 だから、先にデザインとかレイアウトとか全て完璧に決めて、 それからView化した方が良いのかな?とも思うんだけど、 すぐに動きを見たいから、Controllerと同時に作りたくなる。 結果、直してばかりで面倒になって投げ出したくなるw そんなアプリばかり作ってるんだけど、何か良いやり方はないかな?
801 名前:nobodyさん mailto:sage [2014/06/27(金) 12:27:28.48 ID:???] 手書きラフ ↓ Photoshop ↓ マークアップ ↓ CSS
802 名前:nobodyさん mailto:sage [2014/06/27(金) 12:28:38.18 ID:???] >>800 後からの変更を少なくする調整力があれば問題なし。
803 名前:nobodyさん mailto:sage [2014/06/27(金) 13:16:39.40 ID:???] >>801 俺も同じやり方なんだが、後からマークアップを変えたくなる。 >>802 Cakeの場合、レイアウトやエレメントに分けるだろ? その後にマークアップの変更やデザインの追加・変更などが入ると、 何度もやり直したりして、投げ出したくなる
804 名前:nobodyさん mailto:sage [2014/06/27(金) 16:32:32.36 ID:???] たしかにビューは混沌とするからな 俺はややこしくなりそうな場合だけは ビューには echo 以外は一切記述しないのを目標に、 専用のヘルパーを作って加工のロジックは隠ぺいするようにしてる。 それなりに扱い易くはなるが、万能ではない。
805 名前:nobodyさん [2014/06/29(日) 22:38:39.46 ID:qTkMeLPd] JavaScriptを用途ごとにファイルに分けると、本番環境にアップする最に圧縮する手間が凄くかかります。 そこで、1ファイルにゴリゴリ共通関数も纏めて書いてますが、皆さんはどうしてますか?
806 名前:nobodyさん mailto:sage [2014/06/29(日) 22:52:42.19 ID:???] >>805 gruntでまとめて処理 coffeescriptで用途ごとにファイル作成ってやってるよ
807 名前:nobodyさん mailto:sage [2014/06/30(月) 08:44:32.98 ID:???] 僕はgulpちゃん!
808 名前:nobodyさん mailto:sage [2014/06/30(月) 14:03:48.42 ID:???] そもそも圧縮アップしない。ファイルサイズが少々減る程度で、大して変わらん
809 名前:nobodyさん mailto:sage [2014/06/30(月) 16:21:21.70 ID:???] phpstormで自動圧縮できるんじゃないだろうか。
810 名前:nobodyさん [2014/06/30(月) 17:47:06.48 ID:cdSjRfUN] >>808 圧縮しないとソースコード筒抜けじゃん。 難読化しないといけないんとちゃいまっか?
811 名前:nobodyさん mailto:sage [2014/06/30(月) 20:09:23.46 ID:???] >>810 Javascriptだろ?筒抜けで困ることなんて無いと思うが
812 名前:nobodyさん [2014/06/30(月) 20:22:22.30 ID:cdSjRfUN] >>811 我ながらコードセンスが良い 綺麗なコードなのでぱくられたくないなーとw
813 名前:nobodyさん mailto:sage [2014/07/01(火) 19:58:59.95 ID:???] Cakeでtwigを使いたいんだが TwigView以外で使えるのない?
814 名前:nobodyさん mailto:sage [2014/07/02(水) 17:32:38.36 ID:???] Cake2系でhasManyの絞り込みってどうすれば良いのでしょうか? $this->Model->hasMany['Hoge']['conditions'] = array('Hoge.type' => 1); $data = $this->Model->find('all'); とすれば、hasMany先のテーブル内で絞り込みは出来るのですが、 絞り込みの結果、「一致するデータがない」場合でも、 Modelのデータは取得できてしまいます。 なにか良い書き方、方法は無いでしょうか?
815 名前:nobodyさん mailto:sage [2014/07/02(水) 23:13:55.69 ID:???] cakeのmodelのリレーションってみんな使ってるのかな。 俺的には使わないほうが後々面倒がないという考えなんだが。
816 名前:nobodyさん mailto:sage [2014/07/03(木) 00:15:43.70 ID:???] >>814 Hoge モデルを、hasMany とは別に存在チェック用に hasOne でアソシエーション張る $hasOne = array('HogeOne' => array('className' => 'Hoge')); で、検索条件に HogeOne.id != null を加える。
817 名前:nobodyさん mailto:sage [2014/07/03(木) 00:16:37.86 ID:???] >>815 何のためにCake使ってんのか意味不明すぎる
818 名前:nobodyさん [2014/07/03(木) 00:28:54.40 ID:Gi3lwfX6] 仮に2chの様な規模の掲示板をcakeで構築しようとしたら (寧ろ構築は出来るかもしれないけど) パフォーマンス劣化が半端無い気がするのですが如何でしょうか? 2chがDBを使わずにログファイルで管理しているのは やはりFW何かを使うと速度低下が否めないからでしょうね。
819 名前:814 mailto:sage [2014/07/03(木) 00:36:46.85 ID:???] >>816 出来ました!!!こんな方法があったんですね。 大変勉強になりました。ありがとうございました。
820 名前:nobodyさん mailto:sage [2014/07/03(木) 00:56:55.55 ID:???] 2chのread.cgiってmod_cgidso使っててC言語製じゃなかった? どの程度の性能なのかしらんけどFW以前にPHP使ってる時点ですでにサーバの数増やさざるを得なさそうな気が ORMやFW使うとさらに遅くなるってのは間違いない
821 名前:nobodyさん mailto:sage [2014/07/03(木) 01:07:33.29 ID:???] >>818 cakeが他のFWより極端に遅いってのがあるから FW以前の話だな
822 名前:nobodyさん mailto:sage [2014/07/03(木) 01:11:12.39 ID:???] www.techempower.com/benchmarks/#section=data-r9&hw=peak&test=query FacebookみたいにHHVM使うなら話は別かもな Cakeがまともに動くのかしらんが
823 名前:nobodyさん mailto:sage [2014/07/03(木) 01:28:28.14 ID:???] >>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さん mailto:sage [2014/07/03(木) 01:37:08.52 ID:???] Cakeで頑張るならPHPの中間コードキャッシュ入れて DBスレーブサーバ(ないしAmazon RDS)とロードバランサ使って ユーザが増えた時はサーバ台数多めで対応 徐々にコードやキャッシュを調整して台数や一台あたりに要求される性能を減らしていくって感じか 速度もある程度はスケールアウトでカバーできるいい時代になった まず新サービスに大勢の人が来る保証もないし 動作速度より開発速度や書きやすさを優先するからこそのFWっしょ そんなに速度が気になるなら最初からPhalconやJavaやJVM系言語やC#でも使うよろし
825 名前:nobodyさん mailto:sage [2014/07/03(木) 01:41:59.54 ID:???] >>824 バランスじゃないのかな? railsは突出して開発速度?が速いけど cakeだとphalconと比べてもあまり大差ないみたいだしな 流石に10倍速度が違う≒アクセス10倍の差があるだからな あくまで、速度が重要視される場合な。 cakeで捌ける人数しかこない前提なら問題ないし 元の話の2chなら話にならないよな
826 名前:nobodyさん mailto:sage [2014/07/03(木) 01:56:21.45 ID:???] www.techempower.com/benchmarks/#section=data-r5&hw=i7&test=query www.techempower.com/benchmarks/#section=data-r7&hw=i7&test=query CakePHPが遅すぎて計測不能なんじゃなくてフレームワークが増えすぎて中の人が徐々に手が回らなくなっているのでは? 過去のを見るとちゃんと結果が載ってる回もある ところでDartの結果良いな いつの間にこんなに
827 名前:nobodyさん mailto:sage [2014/07/03(木) 02:01:52.84 ID:???] >>826 githubでコード集めてるから 人気がなくなった(外部のコードを書く人がいなくなった)ってほうになるな
828 名前:nobodyさん mailto:sage [2014/07/03(木) 02:04:48.87 ID:???] >>826 r7でrailsぐらいか
829 名前:nobodyさん mailto:sage [2014/07/03(木) 02:05:10.64 ID:???] 開発者がCakePHPから他に移ってるのもあるだろうし Cakeでベンチ対決に参加しても悲しくなるだけだし
830 名前:nobodyさん [2014/07/03(木) 02:09:04.71 ID:JnE+cuIZ] >>820 >>821 >>822 >823 そもそも2ch位のトラフィックを捌けるFWとかなさそうですね。
831 名前:nobodyさん [2014/07/03(木) 02:10:17.86 ID:JnE+cuIZ] >>824 流石に2chクラスだとCakeじゃ無理でしょ。
832 名前:nobodyさん [2014/07/03(木) 02:11:15.57 ID:JnE+cuIZ] cakeで作られている大規模サイトで有名なのはどこですか?
833 名前:nobodyさん mailto:sage [2014/07/03(木) 02:14:41.70 ID:???] 2chクラスの人が集まるコンテンツを作る方が大変なんですけど
834 名前:nobodyさん mailto:sage [2014/07/03(木) 02:33:52.59 ID:???] >>830 '捌ける'の前提がよく分からんが RDBとORMありのFW使った上で2chと同じサーバスペック同じ台数で捌けるかどうかってことか? Cakeには無理だろうが全FWが駄目と判断するのは早計でしょ 2chのWebサーバって未だにEvent MPMがまともに使えないVer.のApacheだし 書き込みのほうのbbs.cgiは所詮Perlだしガチガチに高速化されてるとも思えないな www.techempower.com/benchmarks/#section=data-r9&hw=i7&test=json >>833 まったくだ
835 名前:nobodyさん mailto:sage [2014/07/03(木) 02:34:55.37 ID:???] >>832 nanapiとランサーズ
836 名前:nobodyさん [2014/07/03(木) 02:56:35.42 ID:JxPD7Z4w] >>834 >>835 ランサーズの重たさを見てやはりcakeの底が見えました。 ところでなんで ランサーズ がcake使ってるってわかったの?
837 名前:nobodyさん mailto:sage [2014/07/03(木) 03:02:55.42 ID:???] 公式ブログで公表してるから。
838 名前:nobodyさん mailto:sage [2014/07/03(木) 14:01:04.31 ID:???] >>826 やっぱJVM系優秀だなぁ。