のくす牧場
コンテンツ
牧場内検索
カウンタ
総計:126,331,960人
昨日:no data人
今日:
最近の注目
人気の最安値情報

    私的良スレ書庫

    不明な単語は2ch用語を / 要望・削除依頼は掲示板へ。不適切な画像報告もこちらへどうぞ。 / 管理情報はtwitter
    ログインするとレス評価できます。 登録ユーザには一部の画像が表示されますので、問題のある画像や記述を含むレスに「禁」ボタンを押してください。

    元スレ【PHP】フレームワーク CakePHP 17ホール目【v2.4】

    php スレッド一覧へ / php とは? / 携帯版 / dat(gz)で取得 / トップメニュー
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。
    レスフィルター : (試験中)
    ←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitter
    551 : nobodyさん - 2014/05/18(日) 01:51:53.74 ID:???.net (+32,+29,-13)
    >>550
    質問に対してこれでできんじゃね?って方法を書いただけだから、
    こっちに問題はないけど。
    552 : nobodyさん - 2014/05/18(日) 02:42:01.29 ID:???.net (+27,+29,-2)
    この板、IDでないから誰が何喋ってんのか全く分からんw
    553 : nobodyさん - 2014/05/18(日) 04:33:21.19 ID:???.net (-27,-30,-91)
    ところで、ClassRegistryが出てきたからついでに聞きたいんだけど、
    new Hoge()じゃなくてClassRegistry::init('Hoge')が推奨されるのってなんで?

    昔コントローラーじゃないところでモデル使うことがある時、
    new Hoge()してるって言ったら、だめって言われたことあるんだけど、
    まだ初心者だったら理由までは教えてもらえなかったんだよね。
    よくわからないまま、ClassRegistry::init()を使うようにだけしてるんだけど、
    理由知りたい。
    554 : nobodyさん - 2014/05/18(日) 11:39:16.13 ID:???.net (-10,-3,-1)
    newしたら初期化されるじゃん
    555 : nobodyさん - 2014/05/18(日) 12:23:32.63 ID:???.net (-28,-26,-52)
    phpunitのテスト駆動開発について。
    テストを先に書くということですが、
    メソッドを先に書く場合もありますか?
    556 : nobodyさん - 2014/05/18(日) 12:34:06.68 ID:???.net (+35,+29,-67)
    また、掲示板サイトを作る場合、
    記事を書く
    記事を見る
    記事を削除

    の3つのケースを先に書いてテストし実装する
    もしくは一つの機能ごとにテストを書く実装する、のどちらが良いのでしょうか。
    557 : nobodyさん - 2014/05/18(日) 18:19:05.82 ID:???.net (+42,+30,-278)
    >>556
    テストを先に書くことがテスト駆動開発の必須条件の一つだと思うんだけど、
    別に原理原則にこたわることもないと思われ。
    ただ、教科書的にはまずテストを書いて赤色から発進するのが通則。

    >>556
    テスト駆動開発は、一般的にはアジャイル開発の一部とされている
    (たぶん、そうじゃない場合もあるはずなんだけどあまり記憶に無い)ので
    単純なテストからだんだん複雑にして行くことを前提に、
    最初は簡単な「記事を書く」テストを書いて実装して
    簡単な「記事を見る」テストを書いて実装して、
    簡単な「記事を削除」テストを書いて実装して・・・ってことなんじゃないかな?

    だけどそれも程度によるだろうから、最初はざっくりアウトライン的に
    全体を作って、作りこむに従って単体テストを増やしていったりテスト自体を
    詳細にコーディングするってことでいいんじゃないかな?
    558 : nobodyさん - 2014/05/18(日) 18:27:15.17 ID:???.net (+29,+25,+1)
    >>557
    ありがとうございます!
    勉強になります。
    559 : nobodyさん - 2014/05/18(日) 23:31:40.02 ID:???.net (+27,+29,-29)
    まぁ自分で書いておいてこんなこと言うのもあれだけど、
    TDDに限らず、ここで聞くより専門の書籍を一冊買って
    それを読んで体系から身につけたほうがいい。
    560 : nobodyさん - 2014/05/19(月) 16:50:44.06 ID:???.net (-27,-30,-95)
    画像のバリデーションで、画像をアップロードしていない場合は
    バリデーション自体を中止したいのですが、良い方法はないでしょうか?
    以下のようなルールをモデルに書いています。

    'image' => array(
     array(
      'rule' => array('extension', array('jpg', 'jpeg', 'gif', 'png')),
      'message' => '拡張子が違います',
      'allowEmpty' => true,
     )
    )
    562 : nobodyさん - 2014/05/20(火) 15:56:13.36 ID:???.net (-22,-29,-80)
    営業 hasOne 顧客 というアソシエーションを一時的に張って、
    検索条件を
    '顧客.id' => null
    とすれば行ける気がするのだがどうだろう。

    あと、カウンターキャッシュという裏ワザもあるが、
    アプリケーション依存になるんで一長一短。
    563 : nobodyさん - 2014/05/20(火) 16:02:52.95 ID:???.net (+22,+27,+0)
    >>562
    なるほど!試してみます。ありがとうございます。
    564 : nobodyさん - 2014/05/21(水) 16:47:46.18 ID:???.net (+29,+29,-34)
    クックパッドってCake使ってるのかな?
    なんかURLのルールが似てる気がする
    565 : nobodyさん - 2014/05/21(水) 18:35:00.58 ID:???.net (+8,+6,-12)
    >>564
    Railsじゃなかった?今は知らんけど
    566 : nobodyさん - 2014/05/21(水) 19:54:17.38 ID:???.net (+27,+29,-15)
    ああ、Railsだから似てると感じるのか
    569 : nobodyさん - 2014/05/25(日) 14:22:54.54 ID:???.net (-19,-30,-98)
    AppControllerを継承したクラスを継承したコントローラで
    AppControllerに書かれた$uses、$componentsが使えない(マージされない)問題は
    Cake2では直ってるんだっけ?
    今確認できないのでどなたか教えてください
    570 : nobodyさん - 2014/05/25(日) 16:32:17.75 ID:???.net (+24,+29,-58)
    >>569
    Dispatcher でリフレクション呼び出してあれこれゴニョゴニョしてるんで、
    多分大丈夫。
    正式なアナウンスは知らん。
    571 : nobodyさん - 2014/05/26(月) 20:03:50.85 ID:???.net (+25,+29,-3)
    >>569
    その問題、今初めて知ったわ。
    572 : nobodyさん - 2014/05/26(月) 21:17:51.86 ID:???.net (+25,+29,-6)
    久しぶりに自分が作った1.3のソース触ったけど、糞すぎて情けなくなる・・・
    573 : nobodyさん - 2014/05/26(月) 21:34:55.75 ID:???.net (+55,+29,-21)
    オレの1.2のコードをやるから、その汚い糞を拭き取れ。
    574 : nobodyさん - 2014/05/28(水) 12:20:55.53 ID:???.net (-27,-30,-153)
    カテゴリの状態を維持したまま別のコントローラーを実行するための
    ルーティングってどう書けばいいですかね?

    /hoge/ →Categoryモデルのname「hoge」
    /hoge/news/ →Newsモデルのcategory_nameが「hoge」
    /hoge/news/detail/1 →Newsモデルのidが1でcategory_nameが「hoge」

    こういう場合、hogeの箇所(カテゴリ名)が不特定文字列なので
    どういう書き方をすればいいか悩んでいます。cake2系です。
    575 : nobodyさん - 2014/05/28(水) 12:29:00.97 ID:???.net (-29,-30,-116)
    Router::routes(array('/:category/'), array('controller' => 'categories'));

    Router::routes(array('/:category/:controller/'));

    Router::routes(array('/:category/:controller/detail/:id'));

    でどう?
    576 : nobodyさん - 2014/05/28(水) 12:33:07.08 ID:???.net (-27,-30,-93)
    あと、第三パラメータで正規表現でのフィルタリングができるんで、
    3つ目のURLパターンにおいてIDは数値と決まっているなら

    Router::routes(array('/:category/:controller/:id'), array(), array('id' => '[0-9]+'));

    とすることで

    /hoge/news/1

    をマッチさせることが出来ると思う。
    578 : nobodyさん - 2014/05/28(水) 13:55:25.16 ID:???.net (+27,+29,-57)
    問題ない。
    ルーティングは単純な正規表現を先頭からマッチさせていくだけ。
    で、最後の最後に通常のマッチングがコアの方に用意されている。
    579 : nobodyさん - 2014/05/28(水) 13:56:01.83 ID:???.net (+22,+29,-2)
    あ、問題あるわ。すまんw
    580 : nobodyさん - 2014/05/28(水) 13:56:49.69 ID:???.net (-21,-30,-67)
    >そういう場合は、固定のコントローラーを
    >ルーティングに書いていけばいいんですかね?
    >Router::routes(array('/contacts/:action'), array('controller' => 'contacts'));

    そうですね。
    581 : 573 - 2014/05/28(水) 15:29:39.46 ID:???.net (+22,+29,-25)
    >>580
    ということは、固定のコントローラーは全てルーティングに書く必要があるんですね。
    そうなるとあまり利便性が良くないですね。
    583 : nobodyさん - 2014/05/28(水) 20:12:28.98 ID:???.net (-18,-30,+0)
    >>581
    カテゴリ名を自由にするってことは、特定の文字を禁止にするんだろうから、
    それを表現できるパターンを第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() の間違いだった。すまん。
    585 : 573 - 2014/05/28(水) 20:20:05.04 ID:???.net (+25,+29,-13)
    >>583
    ありがとうございます。色々工夫してやってみます。
    586 : nobodyさん - 2014/05/28(水) 22:03:01.32 ID:???.net (+23,+29,-1)
    >>584
    ありがとうマジで助かった!
    587 : nobodyさん - 2014/05/29(木) 01:00:35.02 ID:???.net (+38,+29,-93)
    RailsとCakeでMVCを覚えたせいで見事に騙され、モデルはテーブルに紐付くもんと思ってたわ
    テーブル関係ないビジネスロジックをどこに書くか迷って、コンポーネントに書いてたけど
    モデルに書いた方がいいんだろうか?
    588 : nobodyさん - 2014/05/29(木) 01:27:10.16 ID:???.net (+30,+29,-61)
    >>587
    ビジネスロジックをモデルに書くのは常識だ。
    コンポーネントに書いたほうが良いなんて聞いたこと無い。
    Rails も Cake もその点においては何も騙してねーと思うよ?
    589 : nobodyさん - 2014/05/29(木) 08:11:31.86 ID:???.net (+32,+29,-63)
    テーブルをまたがる共通処理や、似て非なるテーブルに同じ処理をしたい場合に、ロジックを置く場所がないて話だと思うけど。
    そういう場合にRailsの1モデル-1テーブル形式は破綻してるのは確か。
    590 : nobodyさん - 2014/05/29(木) 08:25:24.09 ID:???.net (+27,+29,-50)
    「具体的に言うと、モデルはデータベースのテーブルを表しますが」
    http://book.cakephp.org/2.0/ja/models.html
    とあるせいで、モデル=テーブルに紐付く(原則として)と思ってたよ
    市販の解説書も同じような感じで書いてる
    591 : nobodyさん - 2014/05/29(木) 08:44:24.60 ID:???.net (-27,-29,-39)
    >>588
    モデルの中で他のモデルをClassRegistry::initとかやりたくないんだよ
    コントローラに書きたくなければコンポーネントになる
    594 : nobodyさん - 2014/05/29(木) 10:18:58.89 ID:???.net (-21,-29,-217)
    RailsにしてもCakeにしてもActive RecordないしTable Data Gatewayパターンを利用するクラスをModelと命名して
    データベーステーブルと(さらにはコントローラとも)1対1対応しなきゃいけないように見えるから勘違いしやすいんだよな

    Railsは1つのモデルに関するロジックは"モデル"クラスに書けるけど
    Table Data GatewayのCakeはこれすらコントローラやヘルパーに溢れ出やすい印象

    複数"モデル"が絡むときに簡易サービス層として利用されやすいのがコンポーネントなのかな
    コントローラから呼びやすいしファットコントローラの一番楽な回避策だろうし


    初心者でも(本来の広い意味での)モデルの中にサービス層を作りやすい実装や解説にしておいてくれるとありがたいんだけど
    595 : nobodyさん - 2014/05/29(木) 10:27:52.09 ID:veg5U4SW.net (-26,+29,-1)
    >>593
    なんだその理由ww
    596 : nobodyさん - 2014/05/29(木) 11:21:59.06 ID:???.net (+18,+29,-2)
    >>595
    何がおかしいんだ?
    597 : nobodyさん - 2014/05/29(木) 11:35:25.87 ID:Kdl2SKiZ.net (+29,+29,-5)
    >>589

    >似て非なるテーブルに同じ処理をしたい場合
    これはビヘイビアがいい気がする。
    598 : nobodyさん - 2014/05/29(木) 13:26:17.97 ID:???.net (+27,+29,-5)
    前もこの話題出たよな
    結論は出なかった
    599 : nobodyさん - 2014/05/29(木) 13:48:42.54 ID:???.net (+30,+29,-64)
    作るものの規模とかで最適な構成は変わるしね。
    >>594 のいうサービス層が必要になる規模は、CakePHPではちょっと対象外なんじゃないかと思ってる。
    CakePHPの中の人がどう思って作ってるかはしらんけど。
    600 : nobodyさん - 2014/05/29(木) 15:11:21.10 ID:???.net (-21,-30,-99)
    複数モデルにまたがる処理をコンポーネントに書いている人は
    $useTable = false の別のモデルを作った方がずっと楽だと思うんだが。

    コントローラから直接参照できる点は一緒。
    データのセット、バリデーション、フォーム値の復元。
    使うモデルを $hasOne とか入れとけば ClassRegisry::init も呼ぶ必要ない。
    ←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitterで / php スレッド一覧へ
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。

    類似してるかもしれないスレッド


    トップメニューへ / →のくす牧場書庫について