【PHP】フレームワーク CakePHP 11ホール目【v1.3】
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2011/02/16(水) 21:52:35ID:zCTGjUMqCakePHPから派生したLithium(li3)も専スレできるまではここでどうぞ
質問するときはCakePHPのバージョンを書きましょう
※sage推奨
※質問時もsageること
※他フレームワークとの比較等はスレ違いです
テンプレは>>1-5くらい
■本家
http://www.cakephp.org/
APIドキュメント
http://api.cakephp.org/
the Bakery
http://bakery.cakephp.org/
CakeQs
http://cakeqs.org/
CheatSheet (PDF)
http://cakephp.org/files/Resources/CakePHP-1.2-Cheatsheet.pdf
github - cakephp
http://github.com/cakephp
■日本語公式
http://cakephp.jp/
フォーラム
http://cakephp.jp/modules/newbb/
cookbook(マニュアル)
http://book.cakephp.org/ja
0793nobodyさん
2011/05/20(金) 01:54:51.61ID:???>この関数は true を返さなければなりません。
>そうでない場合、現在の save() の実行が中断されます。
でないの?
0794nobodyさん
2011/05/20(金) 03:11:47.64ID:???return ; にしているところを return true; にしても変化はありません。
全角が半角になりません。
また、確認画面を入れてますので、saveでの動作ではありません。
$this->Model->set($this->data);
if (!$this->Model->validates()) {
$this->set('error', 'エラー');
}
みたいにしています。
0795nobodyさん
2011/05/20(金) 08:35:02.16ID:???これって2階層以上になるとjoinしなくなるってわけじゃないよな?
cakeのモデルの結びつけは全て単に個々のレコードをselectしてるんだよな?
0796nobodyさん
2011/05/20(金) 08:51:23.08ID:???はじめからORマッピング使うからそうなる。
フレームワークのDBアダプター使えば全てのDBサーバに最適なクエリが発行できると
思ってる奴多いけど、最適なクエリはDBサーバによって書き方が異なるのだ。
って、ねーちゃんが言ってた。
0797nobodyさん
2011/05/20(金) 09:52:43.86ID:???1階層目まではjoinされる。
2階層目以降はjoinされない。1階層目のデータをキーに、複数のSQLが実行される。
0798nobodyさん
2011/05/20(金) 10:10:25.55ID:???FooとBarがそれぞれ3つのHogeを持たせるため、
Foo、Barそれぞれに hoge_id, hoge1_id, hoge2_id カラムを作成して関連づけました。
これでHogeをfindで取得した場合、
Array
(
[0] => Array
(
[Hoge] => Array(~)
[Foo] => Array(~)
[Foo1] => Array(~)
[Foo2] => Array(~)
[Bar] => Array(~)
[Bar1] => Array(~)
[Bar2] => Array(~)
)
)
こんなふうになるんですが、(foreignKeyごとにエイリアス名を変えています)
これを
[Foo] => Array(
[0] => Array(~)
[2] => Array(~)
[1] => Array(~)
)
こんな感じに取って来れる方法はないでしょうか?
もしforeignKeyを分ける以外にいい方法があればそちらも教えて下さい。
0799nobodyさん
2011/05/20(金) 10:37:34.40ID:???0800nobodyさん
2011/05/20(金) 16:16:52.10ID:haTOk0oR0801nobodyさん
2011/05/20(金) 19:43:16.98ID:???これでツリー式のデータを取得できますが、
それを出力する方法で悩んでます・・。
目的はセレクトメニューのoptionに入れたいのですが、
何か良い参考ページかやり方はないでしょうか?
0803nobodyさん
2011/05/21(土) 00:18:07.82ID:/xyh+Ud4しようとすると本当に面倒くさい。
もう面倒だからquery()でSQL直着書きしちゃうんのってアリ?
0804nobodyさん
2011/05/21(土) 00:27:59.30ID:???ほとんどはcontainableビヘイビア使ってなんとかなってるけどなー
0806nobodyさん
2011/05/21(土) 03:26:01.22ID:???0807nobodyさん
2011/05/21(土) 10:05:49.32ID:???0808nobodyさん
2011/05/21(土) 10:10:24.97ID:???0809nobodyさん
2011/05/21(土) 10:54:51.77ID:???0810nobodyさん
2011/05/21(土) 11:27:17.26ID:/xyh+Ud4Model::execute()って無くなってない?
PDTの候補にも出てこないし実際に無いし。
0811nobodyさん
2011/05/21(土) 15:28:04.45ID:???executeは1.2で無くなったっぽいよ。
互換性のためにメソッドは最近まで残してあったのかも知れないけど。
0812nobodyさん
2011/05/21(土) 15:29:00.87ID:???0813nobodyさん
2011/05/21(土) 16:40:27.40ID:???0814nobodyさん
2011/05/21(土) 16:55:05.99ID:???0815nobodyさん
2011/05/21(土) 17:51:36.10ID:???0816nobodyさん
2011/05/21(土) 17:57:45.07ID:???0817nobodyさん
2011/05/21(土) 18:01:52.25ID:???0818nobodyさん
2011/05/21(土) 18:13:46.50ID:???0819nobodyさん
2011/05/21(土) 20:14:04.70ID:???Cakeのは簡潔すぎてマニュアルになってない
0820nobodyさん
2011/05/21(土) 20:56:37.13ID:???0821nobodyさん
2011/05/22(日) 01:47:54.93ID:???非常に困る。で、1.3の本が出始める頃には2.0が出てると。
0822nobodyさん
2011/05/22(日) 10:12:56.86ID:???0823nobodyさん
2011/05/22(日) 11:07:44.09ID:???リファレンス本が欲しいんだよね。
CakePHPポケットリファレンスが1.2までにしか
対応してないのでほぼ使えない状態となってるのが悲しい。
0826nobodyさん
2011/05/22(日) 13:03:28.19ID:???DooPHPで作られたサンプル的なサイト
ttp://sagasunippon.com/
ttp://www.kensakunippon.com/
0827nobodyさん
2011/05/22(日) 20:54:14.59ID:???findAllBy() は残ってるのに
0828nobodyさん
2011/05/22(日) 21:47:10.29ID:???0829nobodyさん
2011/05/22(日) 22:05:40.93ID:???find('all')に統合した方がきれいだし、拡張性も高い。
findAllByは特殊な呼び出し方だからどうしようもないでしょ。
0830nobodyさん
2011/05/23(月) 03:09:25.12ID:???ぐぐってfindAllを使って動かなくて困ったのも良い思い出
いや良くない思い出、マジ困るんですけど
0831nobodyさん
2011/05/23(月) 03:20:06.75ID:???毎回PHP側で判断するときに
(int)$hoge === 1
みたいに毎回intに変換して判断してるんだけどしょうがないのかな?
0832nobodyさん
2011/05/23(月) 03:41:29.44ID:???0833nobodyさん
2011/05/23(月) 19:43:00.12ID:???$model->hasMany = array(...);
としたんですが以下のエラーがでます。
Notice (8): Trying to get property of non-object [CORE/cake/libs/model/datasources/dbo_source.php, line 813]
Notice (8): Trying to get property of non-object [CORE/cake/libs/model/datasources/dbo_source.php, line 838]
Notice (8): Trying to get property of non-object [CORE/cake/libs/model/datasources/dbo_source.php, line 841]
Fatal Error (256): ConnectionManager::getDataSource - Non-existent data source [CORE/cake/libs/model/connection_manager.php, line 102]
ビヘイビア内で hasMany などアソシエーションを設定する方法はないでしょうか?
0836nobodyさん
2011/05/24(火) 06:31:50.22ID:???同じコントローラなら $this->setAction でいけるんだけどな。
なぜこれがやりたいかと言うと、
あるコントローラから、別コントローラのアクションにリダイレクトさせたいんだけど、
変数の値も渡したい。
ただリダイレクトさせると変数が渡らないので、
リダイレクトじゃない方法があれば解決するはずなんだけど、無いのかな?
0837nobodyさん
2011/05/24(火) 07:45:58.57ID:???0838nobodyさん
2011/05/24(火) 08:14:08.18ID:???Cake Wayなものがあればいいなと思って聞いたんだ。
別コントローラに行くときにメッセージをビューで表示したい場合とかどうやってるんだろみんな
結構出てくるケースだと思うんだが・・・
0839nobodyさん
2011/05/24(火) 11:16:00.88ID:???0840nobodyさん
2011/05/25(水) 08:16:55.25ID:???class AController extends AppController {
function add() {
$this->A->save()
$this->redirect('B/view');
}
}
↓AからBへリダイレクトする
class AController extends AppController {
function view() {
$this->set('finish_message', $finishMessage);
}
}
こんな感じで、AからBへリダイレクトするときに、Aから何らかのメッセージを渡したいんだ。
0843nobodyさん
2011/05/25(水) 16:27:17.78ID:???0845nobodyさん
2011/05/26(木) 14:00:39.30ID:???で生成されるURL
http://www.example.com/aaa/bbb
を文字列として取得するにはどうすればいいのでしょう?
viewの他のか所で使いたいのですが
0847nobodyさん
2011/05/26(木) 17:50:19.36ID:???「Security::setHash('md5');」と設定しろとありました。
これってどこに書くのでしょうか?
0848nobodyさん
2011/05/27(金) 12:07:32.90ID:???before_filter()
app_controller.php
bootstrap.php
などなど
0849nobodyさん
2011/05/27(金) 12:43:14.79ID:???>app_controller.php
ここ
0850nobodyさん
2011/05/28(土) 04:39:15.80ID:???/img/user/01234.png
↑こういう風にCake風のパスを格納した場合、
どうやって絶対パスを取得できる?
上記のパスを、
Router::url($path, true);
このように Router::url に渡すと、
http:://localhost/img/user/01234.png
と取得される。
こんなディレクトリは存在しなくて、
本当は、
http:://localhost/myapp/img/user/01234.png
↑このような値が欲しい。
どうしたらいいかな?
絶対パスをDBに入れるのはあんまりしたくない。
ディレクトリが移動したときやCakeアプリケーションいれているディレクトリ名が変わったり、
ドメインが変わったり、、、などなど不都合が出る可能性が高い
0851nobodyさん
2011/05/28(土) 12:01:51.80ID:???ちょっと使ってみた感じ使いにくかったような気がしたんだけど。
ググると自作してる人もいたりするんだよね。
0852nobodyさん
2011/05/28(土) 12:17:08.98ID:???ttp://book.cakephp.org/ja/view/122/コア定義定数
あと一回くらいは主要なインスタンスでdebug($this)を見ておいた方がいいかも。
0855nobodyさん
2011/05/28(土) 21:18:38.09ID:???0856nobodyさん
2011/05/28(土) 21:28:17.89ID:???やってくれてるはずだよ
0857nobodyさん
2011/05/29(日) 13:39:00.49ID:???$data = $this->User->findById(1);
こういう時の返り値を受け取る変数ってどうしてる?
上の例なら普通に$dataに入れればいいけど、
モデルが複数ある場合とかさどう書いてるのかな?と思ってさ。
$category_data = $this->Category->findById(1);
というのもなんか違う気がするし・・・
0858nobodyさん
2011/05/29(日) 14:31:32.78ID:???$users = $this->User->find('all');
$category = $this->Category->findById(1);
$categories = $this->Category->find('all');
0859nobodyさん
2011/05/29(日) 17:28:32.40ID:???俺もこれで良いと思う事はあるんだが、出力時に
$user['User']['name']
$categories[0]['Category']['name']
みたいになるわけだろ?
「ユーザにユーザ?」みたいな重複した無駄な間隔に襲われるんだよw
0860nobodyさん
2011/05/29(日) 17:37:40.66ID:???無駄でも分かりにくいより分かりやすいほうが良い
0861nobodyさん
2011/05/31(火) 17:12:52.71ID:???Cakeに移行したのでindex.phpにアクセスになります。
ただ、以前のURLでアクセスされた場合、ページが表示されなくなります。
index.htmlのファイルを作ってMETAで転送を入れようと思ったのですが、
それも無理でした。何か良い対策方法はないでしょうか?
0862nobodyさん
2011/05/31(火) 19:12:25.36ID:???CakePHPでの経験が1年以上という前提で。
0863nobodyさん
2011/05/31(火) 22:08:53.60ID:???0866nobodyさん
2011/05/31(火) 23:05:32.79ID:???冗談じゃなければ集まると思いますよ。
それぐらいだせば、PHPの経験5年以上、Cake3年以上は見つかると思います。
0868nobodyさん
2011/06/01(水) 10:36:35.25ID:???0870nobodyさん
2011/06/01(水) 14:16:33.47ID:???0871nobodyさん
2011/06/01(水) 17:57:54.98ID:???0872nobodyさん
2011/06/01(水) 18:00:00.20ID:???0874nobodyさん
2011/06/02(木) 10:50:55.22ID:???0875nobodyさん
2011/06/02(木) 12:25:11.52ID:???0876nobodyさん
2011/06/02(木) 13:12:15.25ID:???0877nobodyさん
2011/06/02(木) 13:22:05.78ID:???0878nobodyさん
2011/06/02(木) 18:43:49.24ID:???50万だった・・・
0879nobodyさん
2011/06/03(金) 13:08:01.66ID:???半年?
0880nobodyさん
2011/06/03(金) 13:14:29.51ID:???0881nobodyさん
2011/06/04(土) 18:26:58.34ID:+J1aexiqやろうとするとエラーになってしまいます。
やり方があるのでしょうか?
0884nobodyさん
2011/06/04(土) 21:01:58.29ID:???0886nobodyさん
2011/06/04(土) 23:21:53.17ID:???できないってことでいいのな?
それなら$_SESSIONに直接ぶち込むだけだから。
出来るとか思わせぶりなこと書いてんじゃねーよ。
0887nobodyさん
2011/06/05(日) 09:40:09.97ID:???example.com/profiles/
にアクセスするとcontroller:profiles、action:indexが実行されるけど、これを
example.com/profile/
でアクセスしてもcontroller:profiles、action:indexを実行したい。
profilesだけじゃなくabouts、contacts、worksすべてを単数形でアクセスしても実行したい。
また、example.com/profiles/hoge/のようにactionが指定されていても、example.com/profile/hoge/のようにしたい。
これについて、routes.phpに記述するうまいやり方ってありますか?
あればぜひお教えいただければと思います。
よろしくお願いします!
ClassRegistryつかったらどこからでも参照もってこれる。
0890nobodyさん
2011/06/05(日) 18:30:44.55ID:???・ID
・画像ID
・名前
:
画像テーブル
・ID
・パス
:
こんなテーブルがあって、
ビューからユーザの画像IDをユーザテーブルから取得して、
画像IDをもとに画像テーブルから画像パスを取得して、<img />で表示 ってしたい。
$this->Hoge->getUserImage($this->data['User']['image_id']); <!-- (HogeはComponent) -->
ビューの中から以上のように1ラインで取得できるのが一番使いやすいんだけど、
ビューでテーブルのデータを動的に取るのはMVCに反しているだろうし、
実際Cakeでやろうとするとちょっとレールから外れた方法とらないといけない。
0891890
2011/06/05(日) 18:32:58.67ID:???ユーザ画像データ配列をつくる(もしくはユーザ配列に画像パスを入れる場所をつくる)
そしてそれを $this->set で渡す。
って方法を一番最初に思いついたんだけど、
ユーザ情報は1ページに数十レコード取得する必要がある場合もあり、
これってどうなんだろうなぁと思って質問してみた。
ベストプラクティスはどうするのが良いんだろ?
0892nobodyさん
2011/06/05(日) 19:54:03.95ID:???お前のやりたい事を実現できる方法を取ればいいよ
■ このスレッドは過去ログ倉庫に格納されています