私的良スレ書庫
不明な単語は2ch用語を / 要望・削除依頼は掲示板へ。不適切な画像報告もこちらへどうぞ。 / 管理情報はtwitterでログインするとレス評価できます。 登録ユーザには一部の画像が表示されますので、問題のある画像や記述を含むレスに「禁」ボタンを押してください。
元スレ【PHP】フレームワーク CakePHP 12ホール目【笑】
php スレッド一覧へ / php とは? / 携帯版 / dat(gz)で取得 / トップメニューみんなの評価 :
レスフィルター : (試験中)
他に何か例があった気がするんだけどとりあえず
http://d.hatena.ne.jp/hiromi2424/searchdiary?word=cakephp%20behavior
^ここのがモデルをカスタマイズする上でかなり参考になると思う。
>findを書くだけでも1つのコントローラーに書いていけば長くなりませんか?
^については、条件多ければそりゃ長くなるだろうけど・・・おいらのとこだと受け取ったパラメータ配列をfindに渡すくらいの長さになるかな。
よほどそのメソッドにおいて特殊な事をするんでない限り、モデル側に出す、というのが「良い」パターン、という感じみたいだ
http://d.hatena.ne.jp/hiromi2424/searchdiary?word=cakephp%20behavior
^ここのがモデルをカスタマイズする上でかなり参考になると思う。
>findを書くだけでも1つのコントローラーに書いていけば長くなりませんか?
^については、条件多ければそりゃ長くなるだろうけど・・・おいらのとこだと受け取ったパラメータ配列をfindに渡すくらいの長さになるかな。
よほどそのメソッドにおいて特殊な事をするんでない限り、モデル側に出す、というのが「良い」パターン、という感じみたいだ
そもそもfindを組み立てるのはモデルでやって
結果をコントロールで受け取って、ビューに渡す
[HogeModel]
public function latestComments{
return $this->find('all', array(...));
}
[HogesController]
public function index()
{
$this->set('models', $this->Hoge->latestComments())
}
みたいな。
結果をコントロールで受け取って、ビューに渡す
[HogeModel]
public function latestComments{
return $this->find('all', array(...));
}
[HogesController]
public function index()
{
$this->set('models', $this->Hoge->latestComments())
}
みたいな。
最初はbakeで焼いてみればいいのに。
基本的にはこんな感じなんだな。ってのがbakeで生成されたコードみればだいたいわかるしょ。
基本的にはこんな感じなんだな。ってのがbakeで生成されたコードみればだいたいわかるしょ。
すみません。上記の文が変なので書き直します。
----------
>>654-655
findの書き方は別として、私が悩んでいるのは
>「diary_list」とか「diary_edit」にするのが一般的なのでしょうか?
という部分です。
>>655さんのレスを見ると、diary_listやdiary_editみたいなアクションを
コントローラーに作成していくパターンで良いのかもしれませんが、
普通は、「機能・コンテンツ名=コントローラー」「動作=アクション」になるので、
diary_listみたいに1つのアクションにするのは違和感があります。
この部分に関して言及されていないので、
気にしなくても良いのかもしれませんが、
気にしないとURLが変わるので、私としては気になっています。
----------
>>654-655
findの書き方は別として、私が悩んでいるのは
>「diary_list」とか「diary_edit」にするのが一般的なのでしょうか?
という部分です。
>>655さんのレスを見ると、diary_listやdiary_editみたいなアクションを
コントローラーに作成していくパターンで良いのかもしれませんが、
普通は、「機能・コンテンツ名=コントローラー」「動作=アクション」になるので、
diary_listみたいに1つのアクションにするのは違和感があります。
この部分に関して言及されていないので、
気にしなくても良いのかもしれませんが、
気にしないとURLが変わるので、私としては気になっています。
ページを移動するたびにSQLを発行して読みに行ってるのですが
function内で設定した内容を次回に持ち越す
というような事をするにはどうすればよいのでせうか?
▲保存されたデータがあるか
┃保存されたデータの呼出し
╋━━━━
┃SQLの発行
┃呼び出したデータの保存
▼
みたいな
function内で設定した内容を次回に持ち越す
というような事をするにはどうすればよいのでせうか?
▲保存されたデータがあるか
┃保存されたデータの呼出し
╋━━━━
┃SQLの発行
┃呼び出したデータの保存
▼
みたいな
>>660
趣味程度に使っているよ
趣味程度に使っているよ
1.3 で質問なんですが、
例えば Test1 テーブルと Test2 テーブルがあったとして、
この2つのテーブルから Test1, Test2 それぞれでなく、
あわせて新着順に10個の項目を取得する方法はありますでしょうか?
例えば Test1 テーブルと Test2 テーブルがあったとして、
この2つのテーブルから Test1, Test2 それぞれでなく、
あわせて新着順に10個の項目を取得する方法はありますでしょうか?
参照(SELECT)だけなら2つのテーブルのviewを作った方がすっきりすると思う。
>>662
cache
普通はよくアクセスするページの保存に使うが、sqlの結果そのものを保存する場合にも使っちまおう、というのも見かけた事がある。ADOdbの確かメソッド名のどこかにcacheとか名前ついてるやつ。
だがまぁ、ふつうは次回に持ち越すなどと考えないでpagenationを使うもんだ
cache
普通はよくアクセスするページの保存に使うが、sqlの結果そのものを保存する場合にも使っちまおう、というのも見かけた事がある。ADOdbの確かメソッド名のどこかにcacheとか名前ついてるやつ。
だがまぁ、ふつうは次回に持ち越すなどと考えないでpagenationを使うもんだ
>>667
Aを表示(SQL読み込み)→B表示→ページ移動→A表示(再読み込み)
って流れになってるから
Aを表示(テーブル保存)→B表示→ページ移動→A表示(保存したテーブルから読み込み)
っていうのをやりたい
Aを表示(SQL読み込み)→B表示→ページ移動→A表示(再読み込み)
って流れになってるから
Aを表示(テーブル保存)→B表示→ページ移動→A表示(保存したテーブルから読み込み)
っていうのをやりたい
モデルにfindを書いているのですが、
コントローラーからfindの結果を取得して
それをpaginateにしてビューに渡すと言った事が出来るのでしょうか?
もし出来る場合はソースの書き方を教えて下さい。
コントローラーからfindの結果を取得して
それをpaginateにしてビューに渡すと言った事が出来るのでしょうか?
もし出来る場合はソースの書き方を教えて下さい。
function index(){
$data = $this->paginate();
$this->set('data',$data);
}
$data = $this->paginate();
$this->set('data',$data);
}
自分はこう書きます
function index(){
$this->paginate = $this->ModelName->methodName();
$this->set('data', $this->paginate());
}
function index(){
$this->paginate = $this->ModelName->methodName();
$this->set('data', $this->paginate());
}
>>671-672
それは普通にコントローラーでpaginateしてるだけですよね?
そうではなくて、findの箇所はモデル内で作成しています。
それを取得してpaginateのfind箇所を置き換えられないかと思い質問しました。
#test_controller
$list = $this->Test->getFind($options);
$this->set('test_list', $this->paginate($list));
こういうイメージです。(もちろんこれでは動きませんが...)
それは普通にコントローラーでpaginateしてるだけですよね?
そうではなくて、findの箇所はモデル内で作成しています。
それを取得してpaginateのfind箇所を置き換えられないかと思い質問しました。
#test_controller
$list = $this->Test->getFind($options);
$this->set('test_list', $this->paginate($list));
こういうイメージです。(もちろんこれでは動きませんが...)
>>673
モデルの中で自己流でfindをオーバーライドしてるなら
_findAll,_findCount,_findFirstあたりもきちっとつくらねばならん。
この辺はPagenateがどういう動きをしてるか、Modelクラスのソース追って下さい。
モデルの中で自己流でfindをオーバーライドしてるなら
_findAll,_findCount,_findFirstあたりもきちっとつくらねばならん。
この辺はPagenateがどういう動きをしてるか、Modelクラスのソース追って下さい。
流れ図は思い浮かぶんだけど表現する方法がないのがもどかしいぉー
ずーっとJavaやってたからJavaベースで思い浮かぶのがそもそもの敗因
ずーっとJavaやってたからJavaベースで思い浮かぶのがそもそもの敗因
規模が大きくなると、ビューだけでもlayoutやelement数が増えるよね。
1つのファイルにif入れたり、コントローラーからsetするのも限界があるし。
(ソースが汚くなって見づらいから、ファイルを分けた方が視認性が良くなる
1つのファイルにif入れたり、コントローラーからsetするのも限界があるし。
(ソースが汚くなって見づらいから、ファイルを分けた方が視認性が良くなる
>>673
findしたデータをpaginateするんじゃなくて、paginateにSQLを渡すイメージ
じゃないと、findで余計なデータをメモリに持っちゃうじゃん
http://book.cakephp.org/ja/view/1237/カスタムしたクエリによるページ付
findしたデータをpaginateするんじゃなくて、paginateにSQLを渡すイメージ
じゃないと、findで余計なデータをメモリに持っちゃうじゃん
http://book.cakephp.org/ja/view/1237/カスタムしたクエリによるページ付
>>677-678
ありがとうございます。参考にします。
ありがとうございます。参考にします。
>>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に代入し、ビューに渡すという流れです
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に代入し、ビューに渡すという流れです
なるほど。こちらの勘違いでした。すみません。
以下が妥当かと。
モデル:
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'));
}
以下が妥当かと。
モデル:
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'));
}
>>682
ありがとうございます。ぜひ参考にさせていただきます。
ありがとうございます。ぜひ参考にさせていただきます。
viewとcontrollerで共通の処理はどこに置けばいいのかね?
今はhelperに書いてcontrollerからも読み込むようにしてるけど普通?
今はhelperに書いてcontrollerからも読み込むようにしてるけど普通?
cakephp初心者です。
コントローラクラス内で各メソッドがデータを共有操作できるメンバー変数のようなものはもてないでしょうか?
例えば、indexが呼ばれるたびに1加算されて表示されるようなことがしたいです。以下の方法はダメでした
public $ii = 0;
fanction index() {
echo $ii;
$ii++;
}
$iiのデータが共有されるのは全ユーザではなく、ユーザ単位である必要があります。
コントローラクラス内で各メソッドがデータを共有操作できるメンバー変数のようなものはもてないでしょうか?
例えば、indexが呼ばれるたびに1加算されて表示されるようなことがしたいです。以下の方法はダメでした
public $ii = 0;
fanction index() {
echo $ii;
$ii++;
}
$iiのデータが共有されるのは全ユーザではなく、ユーザ単位である必要があります。
厳密には共通の処理じゃなくて、viewでpackしたものをcontrollerでunpackするような処理なんだけどな
modelも違うかな…そもそも設計間違ってるのか
modelも違うかな…そもそも設計間違ってるのか
>>686
セッション
セッション
>685
質問元と違うが、controllerの方でパンくずリストを登録して、viewの方で表示する場合など
質問元と違うが、controllerの方でパンくずリストを登録して、viewの方で表示する場合など
・画像が投稿されているか否か調べる
・投稿されていたらその画像を表示。そうでなければno_image.gifを表示
という2つの処理をするだけでもviewに書いていくと汚くなるんだよな・・・
だからヘルパー作るかコントローラーでfind後に再処理する方が良いと思う
・投稿されていたらその画像を表示。そうでなければno_image.gifを表示
という2つの処理をするだけでもviewに書いていくと汚くなるんだよな・・・
だからヘルパー作るかコントローラーでfind後に再処理する方が良いと思う
フォームで送信された値を参照するときにつかう $this->data と $this->paramsの違いがよくわかりません。
これらは違いがあるのでしょうか?
これらは違いがあるのでしょうか?
リクエストがPOST → $this->data
リクエストがGET → $this->params
リクエストがGET → $this->params
URLの
コントローラー名/アクション名/引数
の引数の部分にファイル名を渡したら、.jpgなどの部分だけ削除されてコントローラーが受け取ってしまう
どうすれば拡張子の部分も受け取れますか?URLエンコードしても同じだった
コントローラー名/アクション名/引数
の引数の部分にファイル名を渡したら、.jpgなどの部分だけ削除されてコントローラーが受け取ってしまう
どうすれば拡張子の部分も受け取れますか?URLエンコードしても同じだった
>>690
そういうのはafterFindでいいんじゃね?
そういうのはafterFindでいいんじゃね?
>693
bakeしてみたコントローラ見てみるとif ($this->data) などという風に使われている。「出来るから間違いじゃない」という意味では間違いじゃないんだろうが、CakePHPの規約としてはdata使うようになってるみたいだね。
(cookbookだかチュートリアルのどこかにフォームのデータを一元化する為にdataを使うのが正しい、というような事が書いてあった希ガス)
bakeしてみたコントローラ見てみるとif ($this->data) などという風に使われている。「出来るから間違いじゃない」という意味では間違いじゃないんだろうが、CakePHPの規約としてはdata使うようになってるみたいだね。
(cookbookだかチュートリアルのどこかにフォームのデータを一元化する為にdataを使うのが正しい、というような事が書いてあった希ガス)
>>697
696じゃないけど、viewに渡すデータ自体の画像の部分をno_image.gifに置き換えちゃうってことじゃないの?
そうすればデータには必ず画像が入ってるからviewはすっきりする。
ただ、MVCの役割を考えるとそこでやるべきかどうかは考えた方がいいかもね。
696じゃないけど、viewに渡すデータ自体の画像の部分をno_image.gifに置き換えちゃうってことじゃないの?
そうすればデータには必ず画像が入ってるからviewはすっきりする。
ただ、MVCの役割を考えるとそこでやるべきかどうかは考えた方がいいかもね。
前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ / 要望・削除依頼は掲示板へ / 管理情報はtwitterで / php スレッド一覧へ
みんなの評価 : 類似してるかもしれないスレッド
- 【PHP】フレームワーク CakePHP 17ホール目【v3α】 (955) - [92%] - 2016/11/15 20:45
- 【PHP】フレームワーク CakePHP 14ホール目【v2.1】 (1001) - [92%] - 2012/12/3 19:16
- 【PHP】フレームワーク CakePHP 19ホール目【v3.3】 (844) - [92%] - 2023/2/2 14:30
- 【PHP】フレームワーク CakePHP 16ホール目【v2.4】 (1001) - [92%] - 2014/3/3 3:00
- 【PHP】フレームワーク CakePHP 11ホール目【v1.3】 (1001) - [92%] - 2011/6/30 22:32
- 【PHP】フレームワーク CakePHP 15ホール目【v2.2】 (985) - [92%] - 2013/9/7 8:30
- 【PHP】フレームワーク CakePHP 17ホール目【v2.4】 (984) - [92%] - 2015/1/10 2:45
- 【PHP】フレームワーク CakePHP 10ホール目【v1.3】 (1001) - [92%] - 2011/2/13 8:32
- 【PHP】フレームワーク CakePHP 13ホール目【v2.0】 (995) - [92%] - 2012/4/23 21:16 ○
- 【PHP】フレームワーク CakePHP 8ホール目【1.3】 (1001) - [91%] - 2010/7/22 22:16
- 【PHP】フレームワーク CakePHP 9ホール目【v1.3】 (1001) - [90%] - 2010/11/1 2:53
- 【PHP】フレームワーク CakePHP 3ホール目【本命】 (1001) - [87%] - 2008/6/19 7:19 ○
- 【PHP】フレームワーク CakePHP 6ホール目【v1.2】 (933) - [87%] - 2009/8/19 2:06 ○
- 【PHP】フレームワーク CakePHP 5ホール目【v1.2】 (985) - [87%] - 2009/3/7 4:53 ☆
- 【PHP】フレームワーク CakePHP 7ホール目【v1.2】 (1001) - [87%] - 2010/3/18 1:18 ○
トップメニューへ / →のくす牧場書庫について