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

    私的良スレ書庫

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

    元スレ【PHP】フレームワーク CakePHP 12ホール目【笑】

    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
    651 : nobodyさん - 2011/10/10(月) 15:53:13.73 ID:??? (-1,-29,-11)
    >>649
    languagesテーブルはレコードが4行のみ?これから増える場合とかありますか?
    652 : nobodyさん - 2011/10/10(月) 16:46:07.88 ID:??? (+82,+29,-125)
    >>647
    いくつか方法思いついたけど、根源の「listとeditだけで気になるほどソースが長くなる」症状がどういうものかが分からんからなんとも言えん。
    確か、CakePHPを使う人が勘違いするパターンとかいう話であったが、本当はモデルに実装するべき処理をコントローラーに置いてしまっていないか?見てみるといいかも

    >>649
    何のために言語分けるのか分からんのだけど、localeは使わないん?
    653 : 647 - 2011/10/10(月) 20:56:02.88 ID:??? (+22,-18,-100)
    >>648
    mypageというテーブルがあるのではなく、
    mypageと言うのは、マイページ=会員専用のページという意味です。
    diaryはタイトルとか内容がある、普通の日記です。(例として出しました)
    >>652
    findを書くだけでも1つのコントローラーに書いていけば長くなりませんか?
    あと、652さんのレスを見ると、私の質問でいうと
    「diary_list」とか「diary_edit」にするのが一般的なのでしょうか?

    ソースが長くなっても視認性は劣りますが、
    「みんなそうしてるよ。気にするな」であれば良いのですが・・。
    654 : nobodyさん - 2011/10/10(月) 21:28:47.85 ID:??? (+76,+30,-143)
    他に何か例があった気がするんだけどとりあえず
    http://d.hatena.ne.jp/hiromi2424/searchdiary?word=cakephp%20behavior
    ^ここのがモデルをカスタマイズする上でかなり参考になると思う。

    >findを書くだけでも1つのコントローラーに書いていけば長くなりませんか?
    ^については、条件多ければそりゃ長くなるだろうけど・・・おいらのとこだと受け取ったパラメータ配列をfindに渡すくらいの長さになるかな。
    よほどそのメソッドにおいて特殊な事をするんでない限り、モデル側に出す、というのが「良い」パターン、という感じみたいだ
    655 : nobodyさん - 2011/10/10(月) 23:56:03.51 ID:??? (+21,-30,-109)
    そもそもfindを組み立てるのはモデルでやって
    結果をコントロールで受け取って、ビューに渡す

    [HogeModel]
    public function latestComments{
    return $this->find('all', array(...));
    }

    [HogesController]
    public function index()
    {
    $this->set('models', $this->Hoge->latestComments())
    }

    みたいな。


    656 : nobodyさん - 2011/10/11(火) 00:58:11.55 ID:??? (+56,+28,-8)
    最初はbakeで焼いてみればいいのに。
    基本的にはこんな感じなんだな。ってのがbakeで生成されたコードみればだいたいわかるしょ。
    657 : nobodyさん - 2011/10/11(火) 02:08:32.71 ID:??? (+51,+23,-11)
    なんでうちのエンジニアbakeつかわねぇんだろ。
    658 : 647 - 2011/10/11(火) 02:55:12.36 ID:??? (+9,-29,-144)
    >>654-655
    findの書き方は別として、私が悩んでいるのは
    >「diary_list」とか「diary_edit」にするのが一般的なのでしょうか?
    という部分であったりもします。

    >>655さんのレスを見ると、diary_list・diary_editみたいなアクションを
    コントローラーに作成していくパターンで良いのかもしれませんが、
    普通は、「機能名_動作」というアクションにするので、
    ここに違和感があるわけです。

    この部分に関して言及されていないので、
    気にしなくても良いのかもしれませんが、
    気にしないとURLが変わるので、私としては気になります。
    659 : 647 - 2011/10/11(火) 03:01:25.43 ID:??? (+10,-29,-148)
    すみません。上記の文が変なので書き直します。
    ----------
    >>654-655
    findの書き方は別として、私が悩んでいるのは
    >「diary_list」とか「diary_edit」にするのが一般的なのでしょうか?
    という部分です。

    >>655さんのレスを見ると、diary_listやdiary_editみたいなアクションを
    コントローラーに作成していくパターンで良いのかもしれませんが、
    普通は、「機能・コンテンツ名=コントローラー」「動作=アクション」になるので、
    diary_listみたいに1つのアクションにするのは違和感があります。

    この部分に関して言及されていないので、
    気にしなくても良いのかもしれませんが、
    気にしないとURLが変わるので、私としては気になっています。
    660 : nobodyさん - 2011/10/11(火) 07:00:41.81 ID:??? (+7,-29,-14)
    CakePHP2使ってる人いる?
    661 : nobodyさん - 2011/10/11(火) 12:50:17.13 ID:??? (+0,-22,-2)
    3なら使ってるよ
    662 : nobodyさん - 2011/10/11(火) 14:18:27.66 ID:??? (+31,-30,-40)
    ページを移動するたびにSQLを発行して読みに行ってるのですが
    function内で設定した内容を次回に持ち越す
    というような事をするにはどうすればよいのでせうか?

    ▲保存されたデータがあるか
    ┃保存されたデータの呼出し
    ╋━━━━
    ┃SQLの発行
    ┃呼び出したデータの保存

    みたいな
    663 : nobodyさん - 2011/10/11(火) 14:41:18.46 ID:vJdgBzio (+19,+28,-2)
    >>660
    趣味程度に使っているよ
    664 : nobodyさん - 2011/10/11(火) 14:55:23.16 ID:??? (+12,-29,-50)
    1.3 で質問なんですが、
    例えば Test1 テーブルと Test2 テーブルがあったとして、
    この2つのテーブルから Test1, Test2 それぞれでなく、
    あわせて新着順に10個の項目を取得する方法はありますでしょうか?

    665 : nobodyさん - 2011/10/11(火) 15:19:09.96 ID:??? (+68,+29,-23)
    結合して時間をキーに降順かけてから10個取り出せば良いんじゃないの
    666 : nobodyさん - 2011/10/11(火) 20:36:20.80 ID:??? (+0,-28,-6)
    参照(SELECT)だけなら2つのテーブルのviewを作った方がすっきりすると思う。
    667 : nobodyさん - 2011/10/11(火) 23:51:50.92 ID:??? (+57,+14,-53)
    >>662
    cache
    普通はよくアクセスするページの保存に使うが、sqlの結果そのものを保存する場合にも使っちまおう、というのも見かけた事がある。ADOdbの確かメソッド名のどこかにcacheとか名前ついてるやつ。

    だがまぁ、ふつうは次回に持ち越すなどと考えないでpagenationを使うもんだ
    668 : nobodyさん - 2011/10/12(水) 10:56:19.39 ID:??? (+57,+29,-7)
    自分が考えた流れ図通りに作れないとモチベーション一気に下がるよね
    669 : nobodyさん - 2011/10/12(水) 11:34:38.64 ID:??? (+10,-30,-38)
    >>667
    Aを表示(SQL読み込み)→B表示→ページ移動→A表示(再読み込み)
    って流れになってるから
    Aを表示(テーブル保存)→B表示→ページ移動→A表示(保存したテーブルから読み込み)
    っていうのをやりたい
    670 : nobodyさん - 2011/10/12(水) 14:18:11.65 ID:??? (+19,-29,-73)
    モデルにfindを書いているのですが、
    コントローラーからfindの結果を取得して
    それをpaginateにしてビューに渡すと言った事が出来るのでしょうか?
    もし出来る場合はソースの書き方を教えて下さい。
    671 : nobodyさん - 2011/10/12(水) 14:29:40.83 ID:??? (+4,-30,-14)
    function index(){
    $data = $this->paginate();
    $this->set('data',$data);
    }
    672 : nobodyさん - 2011/10/12(水) 16:09:12.63 ID:??? (+3,-30,-28)
    自分はこう書きます
    function index(){
    $this->paginate = $this->ModelName->methodName();
    $this->set('data', $this->paginate());
    }
    673 : nobodyさん - 2011/10/12(水) 16:39:49.89 ID:??? (+23,-30,-143)
    >>671-672
    それは普通にコントローラーでpaginateしてるだけですよね?
    そうではなくて、findの箇所はモデル内で作成しています。
    それを取得してpaginateのfind箇所を置き換えられないかと思い質問しました。

    #test_controller
    $list = $this->Test->getFind($options);
    $this->set('test_list', $this->paginate($list));

    こういうイメージです。(もちろんこれでは動きませんが...)
    674 : nobodyさん - 2011/10/12(水) 17:02:09.88 ID:??? (+4,-29,-86)
    >>673
    モデルの中で自己流でfindをオーバーライドしてるなら
    _findAll,_findCount,_findFirstあたりもきちっとつくらねばならん。
    この辺はPagenateがどういう動きをしてるか、Modelクラスのソース追って下さい。
    675 : nobodyさん - 2011/10/12(水) 17:29:23.61 ID:??? (+57,+29,-24)
    流れ図は思い浮かぶんだけど表現する方法がないのがもどかしいぉー
    ずーっとJavaやってたからJavaベースで思い浮かぶのがそもそもの敗因
    676 : nobodyさん - 2011/10/12(水) 18:01:53.84 ID:??? (+9,-23,-34)
    規模が大きくなると、ビューだけでもlayoutやelement数が増えるよね。
    1つのファイルにif入れたり、コントローラーからsetするのも限界があるし。
    (ソースが汚くなって見づらいから、ファイルを分けた方が視認性が良くなる
    677 : nobodyさん - 2011/10/12(水) 19:33:00.65 ID:??? (+33,-29,-56)
    >>673
    findしたデータをpaginateするんじゃなくて、paginateにSQLを渡すイメージ
    じゃないと、findで余計なデータをメモリに持っちゃうじゃん

    http://book.cakephp.org/ja/view/1237/カスタムしたクエリによるページ付
    679 : nobodyさん - 2011/10/12(水) 20:36:58.14 ID:??? (+51,+18,+2)
    >>677-678
    ありがとうございます。参考にします。
    680 : nobodyさん - 2011/10/12(水) 23:14:24.71 ID:??? (+21,-30,-212)
    >>673
    672を書いたものですけど、勘違いされてるようなのでもう少し詳しく書くと

    モデル :
    function methodName($user_id)
    {
    return array(
    'fields' => array('...'),
    'conditions' => array('ModelName.user_id' => $user_id),
    'order' => array('Hoge.id DESC'),
    );
    }

    コントローラ :
    function index(){
    $this->paginate = $this->ModelName->methodName($this->Auth->user('id'));
    $this->set('data', $this->paginate());
    }

    みたいな感じです
    あなたがいうモデルでfind組み立てて、コントローラでpaginateに代入し、ビューに渡すという流れです
    681 : nobodyさん - 2011/10/13(木) 15:33:11.40 ID:??? (+24,-11,-75)
    >>680
    せっかく説明していただいたのに申し訳ないのですが、希望は違います。
    findだけで済む箇所とpaginateまで生成したい箇所があるので、
    コントローラーでそれを操作したいと思い、>>670のように質問しました。

    680さんのは基本的なオプション指定だけをモデルに書いて
    それをpaginateに渡すイメージですが、そうではありません。
    682 : nobodyさん - 2011/10/13(木) 18:19:08.28 ID:??? (+36,-30,-227)
    なるほど。こちらの勘違いでした。すみません。

    以下が妥当かと。

    モデル:
    public function getFind($paginate=true)
    {
    $criteria = array(
    'fields' => array(...),
    'order' => 'Word.id DESC',
    );

    if ($paginate)
    return $criteria;
    else
    return $this->find('all', $criteria);
    }

    コントローラ:
    public function ページネーションするアクション()
    {
    $this->paginate = $this->ModelName->getFind();
    $this->set('models', $this->paginate());
    }

    public function ページネーションしないアクション()
    {
    $models = $this->ModelName->getFind(false);
    $this->set(compact('models'));
    }
    683 : nobodyさん - 2011/10/13(木) 18:45:40.47 ID:??? (+60,+28,-11)
    >>682
    ありがとうございます。ぜひ参考にさせていただきます。
    684 : nobodyさん - 2011/10/13(木) 19:35:17.24 ID:??? (+2,-29,-62)
    viewとcontrollerで共通の処理はどこに置けばいいのかね?
    今はhelperに書いてcontrollerからも読み込むようにしてるけど普通?
    685 : nobodyさん - 2011/10/13(木) 19:56:53.48 ID:??? (+2,-29,-53)
    >>684
    興味なのだが、viewとcontroller共通の処理って何?
    その2つで共通なら、逆にmodelに書くべきと思うが。
    686 : nobodyさん - 2011/10/13(木) 21:26:35.92 ID:??? (+11,-30,-137)
    cakephp初心者です。

    コントローラクラス内で各メソッドがデータを共有操作できるメンバー変数のようなものはもてないでしょうか?
    例えば、indexが呼ばれるたびに1加算されて表示されるようなことがしたいです。以下の方法はダメでした

    public $ii = 0;
    fanction index() {
      echo $ii;
      $ii++;
    }

    $iiのデータが共有されるのは全ユーザではなく、ユーザ単位である必要があります。
    687 : nobodyさん - 2011/10/13(木) 21:31:40.05 ID:??? (-1,-29,-82)
    厳密には共通の処理じゃなくて、viewでpackしたものをcontrollerでunpackするような処理なんだけどな
    modelも違うかな…そもそも設計間違ってるのか
    688 : nobodyさん - 2011/10/13(木) 22:14:15.35 ID:??? (+7,-16,-10)
    >>686
    セッション
    689 : nobodyさん - 2011/10/13(木) 23:05:30.03 ID:??? (-1,-29,-39)
    >685
    質問元と違うが、controllerの方でパンくずリストを登録して、viewの方で表示する場合など
    690 : nobodyさん - 2011/10/13(木) 23:58:06.07 ID:??? (+16,-29,-78)
    ・画像が投稿されているか否か調べる
    ・投稿されていたらその画像を表示。そうでなければno_image.gifを表示

    という2つの処理をするだけでもviewに書いていくと汚くなるんだよな・・・
    だからヘルパー作るかコントローラーでfind後に再処理する方が良いと思う
    691 : nobodyさん - 2011/10/14(金) 08:54:54.73 ID:??? (-2,-30,-72)
    フォームで送信された値を参照するときにつかう $this->data と $this->paramsの違いがよくわかりません。
    これらは違いがあるのでしょうか?
    692 : nobodyさん - 2011/10/14(金) 11:14:03.92 ID:??? (-2,-30,-21)
    リクエストがPOST → $this->data
    リクエストがGET → $this->params
    693 : nobodyさん - 2011/10/14(金) 12:01:41.71 ID:??? (+4,-29,-20)
    え、POSTだけどparams使ってるわ
    間違いなの?
    694 : nobodyさん - 2011/10/14(金) 12:05:51.56 ID:??? (+53,+25,-20)
    ヘルパーってビューがプログラムで汚れそうなときに使えるのか
    ifとか
    695 : nobodyさん - 2011/10/14(金) 13:09:12.64 ID:??? (+33,-29,-57)
    URLの
    コントローラー名/アクション名/引数
    の引数の部分にファイル名を渡したら、.jpgなどの部分だけ削除されてコントローラーが受け取ってしまう
    どうすれば拡張子の部分も受け取れますか?URLエンコードしても同じだった
    696 : nobodyさん - 2011/10/14(金) 13:56:40.84 ID:??? (+8,-28,-14)
    >>690
    そういうのはafterFindでいいんじゃね?
    697 : nobodyさん - 2011/10/14(金) 15:48:22.55 ID:??? (+37,-21,-16)
    >>696
    どういう風に>>690をafterFindするんだ?
    698 : nobodyさん - 2011/10/14(金) 18:09:04.28 ID:??? (+3,-29,-95)
    >693
    bakeしてみたコントローラ見てみるとif ($this->data) などという風に使われている。「出来るから間違いじゃない」という意味では間違いじゃないんだろうが、CakePHPの規約としてはdata使うようになってるみたいだね。
    (cookbookだかチュートリアルのどこかにフォームのデータを一元化する為にdataを使うのが正しい、というような事が書いてあった希ガス)
    699 : nobodyさん - 2011/10/14(金) 18:45:42.02 ID:??? (+89,+15,-41)
    >>697
    696じゃないけど、viewに渡すデータ自体の画像の部分をno_image.gifに置き換えちゃうってことじゃないの?
    そうすればデータには必ず画像が入ってるからviewはすっきりする。
    ただ、MVCの役割を考えるとそこでやるべきかどうかは考えた方がいいかもね。
    700 : nobodyさん - 2011/10/15(土) 00:20:40.03 ID:??? (+69,-23,-108)
    >>664 なんですが、
    >>665で言われてる結合する、というのがよくわからないんです。
    find の第2引数で 'joins' というのがありますが、
    これだと 'conditions' でそれぞれのテーブルの対応するフィールドの値を入れてやって関連づけを行わないといけないですよね?
    SQL はほとんどわからないので、的外れなことを言ってるかもしれませんが、
    2つのテーブルを関連性などなしで単純に全て混ぜてしまって作成日で降順をかける、なんてことは可能でしょうか?
    詳しく解説などされているサイトなど教えてもらえると助かります。
    ←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitterで / php スレッド一覧へ
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。

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


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