【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
0619Perl忍者lvl4 ◆M5ZWRnXOj6
2011/04/16(土) 17:00:51.46ID:uU0OblS5生 同 .じ . /´ | (ゝ___) い
.し 士 .レ .__/'r-┴<ゝi,,ノ ro、 は、
.な で .ベ ∠ゝ (ゝ.//` ./`| }⌒j
.い し .ル } ⌒ /`ヽ、_∠l,ノ ・ヽ´
.! ! か の / ´..:.} >、、___, .r、 ソ、`\
/ ..:.:.} / |∨ ` ̄
/ ..:.:./ | 丶
/ _、 ..:.:.:.{ .{.:.:. \
{ ..:Y .ゝ、 {.:.:.:.:. ヽ
|、 ..:/ 丿 .:〉 >.- ⌒ . ヽ
/ {. ..:./ ソ ..:./ .( ..:.:.:` ..:}
./..:.:}.:.:./ ヘ、 ..:./ .\ ..:.:r_,ノ、.:.:}
./..:.:/|.:/ {.:./ X.:.:}.} X X
/..:.:/ .}.:| }:/ .Y丶ヽ Y.:Y
. __/.:/ { } 《.〈、 _,,__>.:》丶 Y.:\
/.:.:.:.:.::/ !.:.:ゝ ゝ.:. ̄ヾ ´:.:.:.:.:.:.:.:.:ヾゝ \.: ̄>
0621nobodyさん
2011/04/18(月) 22:09:29.52ID:???みたいな書き方ってCakePHPではどうすればいいのでしょうか?
0622nobodyさん
2011/04/18(月) 22:47:14.55ID:???0623nobodyさん
2011/04/18(月) 23:24:01.55ID:???0624nobodyさん
2011/04/18(月) 23:33:50.50ID:???$cond = array('Model.id' => intval($id));
$this->Model->updateAll($field,$cond);
こんな感じ?
0625nobodyさん
2011/04/19(火) 00:03:43.86ID:???もちろんpointは数値列だよね。
0626nobodyさん
2011/04/19(火) 01:32:17.04ID:???AppControllerのbeforeFillterでConfigure::write()を使って書きこんで、
コントローラとビューでConfigure::read()で読み込むのって
使い方合ってますかね?
0627nobodyさん
2011/04/19(火) 10:29:11.63ID:???0628nobodyさん
2011/04/19(火) 18:32:47.47ID:???setだとキー追加じゃなくて完全に代入されるイメージ
app_controllerに作るか
0629nobodyさん
2011/04/19(火) 22:51:20.45ID:???どこかに書いといて欲しい
0630nobodyさん
2011/04/19(火) 22:53:32.33ID:???0631nobodyさん
2011/04/19(火) 23:14:41.15ID:???0632nobodyさん
2011/04/20(水) 00:31:33.15ID:NKIgYW4jForm::input()を使ってる記事が多いんですが、
これって1.3でも使って良いメソッドなんでしょうか?
あと、1.3で<input type="image">を出力したいんですが、
Formヘルパーのどのメソッド使えばいいですかね?
0633nobodyさん
2011/04/20(水) 01:01:40.71ID:???0634nobodyさん
2011/04/20(水) 01:11:12.04ID:???ありがとうございます。
Formヘルパーではないのですね。
Form::inputあたりをつかうのかと予想していたのですが、
1.3のCookbookにもメソッドが載ってないんですよね。
かなり謎です。
0635nobodyさん
2011/04/20(水) 09:42:08.04ID:???ググルのもいいけど、cookbook見てみたら。
http://book.cakephp.org/ja/view/1383/%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0
input使うと、テーブル定義をみて自動でinputかtextareaとか分けてくれる。
0636nobodyさん
2011/04/20(水) 10:15:29.58ID:???マニュアルは英語版から読むようにしよう。
form->submitに画像のURLを入れれば自動でできる。
echo $this->Form->submit('ok.png');
↓
<div class="submit"><input type="image" src="/img/ok.png"></div>
0637nobodyさん
2011/04/20(水) 14:51:42.93ID:???ビヘイビアの方を呼びたい場合はどう書けば良いのでしょうか
0638nobodyさん
2011/04/20(水) 23:32:04.82ID:???具体的には<link rev="made" href="mailto:foo@bar.jp" />ってのを書きたいんですけど
html->linkとやるとa要素になってリンクが張られてしまいます
0639nobodyさん
2011/04/21(木) 00:46:29.17ID:fExhpbbEバリデーションエラーでその画面に戻った時にその値に戻っちゃうんですが
これってどうしたらいいですかね?
0640nobodyさん
2011/04/21(木) 01:42:12.03ID:???英語版cookbookにそれこそ載ってるよ。
もしくはGoogle検索「CakePHP a href」とかやればいくらでも実例が出てくる
0641nobodyさん
2011/04/21(木) 01:43:38.32ID:???本来のHTMLで書きたい要素を
arrayに
'name' => 'value'
で書いてブラウザーで開いてソース見れば、解釈されているかどうか分かって楽だった
0642nobodyさん
2011/04/21(木) 13:32:49.30ID:???0643nobodyさん
2011/04/21(木) 22:02:14.62ID:???array(
"key" => "value"
)
0645nobodyさん
2011/04/22(金) 00:04:27.08ID:???これを
http://cakephp/foo/posts/edit
http://cakephp/bar/posts/edit
とカテゴリで分けたい。
こういう場合はやっぱり FooController と BarContoroller してルーティング設定で命名規則無視するしかないですか?
できれば PostController のみで終わらせたいんだけど、
admin_edit で admin/edit になるみたいに foo_edit で foo_edit にする方法ってあります?
ちなみに admin ルーティングも残しておいてさらに追加したいんです。
0646nobodyさん
2011/04/22(金) 00:19:11.61ID:???foo/posts/edit とbar/posts/edit はやることが違うの?同じ事をやるの?
fooとかbarは種類が決まってるの?
0648nobodyさん
2011/04/22(金) 00:43:08.35ID:???やることはほとんど一緒です。
ただ読みに行くデータが違います。
テーブルごと分けるか、種類を分けるフィールド追加して区別するかはわかりませんが、
とりあえずカテゴリごとの動作ということにしたいんです。
0650nobodyさん
2011/04/22(金) 10:38:38.24ID:???すんません、HTMLヘルパーに自分で書く必要がありますね。
cake/libs/view/helpers/html.php
の
function link
を参考にして、
自分で a が付かない<link rev=〜を出力するように頑張ってください。
0651nobodyさん
2011/04/22(金) 12:48:06.33ID:???モード7の時はSJISで送信され、モード8の時はUTF-8で送信されます。
Cakeでは、ビューをUTF-8で作り、出力時の文字コードは
<?php echo $html->charset('SJIS'); ?>
と言う感じでShift_JISにしています。
ただ、$form->createのencodign(accept-charset)はutf8のままなので、
UTF-8としてデータが送信されてくると思うのですが・・・原因が分かりません。
古い端末だと文字コード変換が上手く行かないとかあるのでしょうか?
直接Cakeの質問と違うかも知れませんが、分かる方いたら教えて下さい
0652nobodyさん
2011/04/23(土) 00:32:58.36ID:???普通のINSERT文をModel::execute()で実行しようとするとシンタックスエラーに
なってしまいます。
でもちゃんと正しいINSERT文なんです。
ちなみにModel::query()で実行すると正しく実行されます。
Model::execute()って何か問題があるのでしょうか?
0653nobodyさん
2011/04/23(土) 01:09:09.71ID:???追いかけてみたらいい
0654nobodyさん
2011/04/23(土) 01:43:52.45ID:???0655nobodyさん
2011/04/23(土) 05:42:00.71ID:???ビヘイビアの方を呼びたい場合はどう書けば良いのでしょうか
0656nobodyさん
2011/04/23(土) 06:34:39.22ID:???0657nobodyさん
2011/04/23(土) 06:50:55.20ID:???そういうことをちゃんとマニュアルに書いておいてくれればいいのにと思います
0658nobodyさん
2011/04/23(土) 10:16:16.61ID:???マニュアルにない使い方するときは、ソースコード追ったほうがいいよ。
0659nobodyさん
2011/04/23(土) 11:25:02.93ID:???下の例では Data に Category を belongsTo して、
Category は Auther を belongsTo、Data を hasMany してます。
$this->Data->find('first', array(
'conditions' => array('Data.id' => $data_id),
'recursive' => 2
));
Array(
[Data] => Array(
[fields] => 'value',
[Category] => Array(
[fields] => 'value',
[Auther] => Array(
[fields] => 'value'
)
[Data] => Array(
[fields] => 'value'
)
)
)
)
これで find すると data['Data']['Category'] 以下にもう一度 Data を取得してしまいます。
data['Data']['Category']['Auther'] は欲しいので、アソシエーションを利用してData を読まずに Auther だけ取ってくる方法はありますか?
0660nobodyさん
2011/04/23(土) 11:26:52.00ID:???読みにくくなってしまったので・・・。
$this->Data->find('first', array(
'conditions' => array('Data.id' => $data_id),
'recursive' => 2
));
Array(
[Data] => Array(
[fields] => 'value',
[Category] => Array(
[fields] => 'value',
[Auther] => Array(
[fields] => 'value'
)
[Data] => Array(
[fields] => 'value'
)
)
)
)
よろしくお願いします。
0663nobodyさん
2011/04/23(土) 12:23:07.77ID:???Auth使うよりも自作(か、セションコンポーネント)使う方がいいんじゃね?
なんかAuthの使い勝手が良いんだか悪いんだか分からなくなる時がある。
0664底辺
2011/04/23(土) 15:05:11.60ID:???containか?
最初からcakeに入ってるよ。
アソシエーションは、時間かけて勉強した方があとあと役に立つから、焦らず、ゆっくり。
0666nobodyさん
2011/04/23(土) 16:31:56.32ID:???ユーザー区分が3つあって、見せていい画面が決まっていて、その遷移もphp上で実装した。
0667nobodyさん
2011/04/23(土) 16:40:36.63ID:???まあタダだしそのくらいはしょーがないよね
0668nobodyさん
2011/04/23(土) 21:21:23.23ID:???俺はなんとかCaleの機能で出来ないかと悪戦苦闘していたが、
やりづらいこともあるよな。こだわりすぎはよくないな
0669nobodyさん
2011/04/23(土) 23:34:00.74ID:???しかし使えないほど駄目でもないのが悩み所
0670nobodyさん
2011/04/24(日) 00:03:38.71ID:???0671nobodyさん
2011/04/24(日) 00:23:08.15ID:???テスト環境で他のアプリと相乗りさせようとしたらハマりまくった。
0672nobodyさん
2011/04/24(日) 00:27:18.69ID:???0673nobodyさん
2011/04/24(日) 00:52:08.70ID:???OAuthの生成シグネチャが合わなくなってハマった事がある
0674nobodyさん
2011/04/24(日) 17:01:45.23ID:YIdiQXQPトップページのctpファイルに貼ったswfから
他のページのctpファイルにリンクしたい場合、
どのようなasを書けばリンクできるのでしょうか?
0675nobodyさん
2011/04/24(日) 17:55:47.22ID:???0676nobodyさん
2011/04/24(日) 21:59:25.37ID:???ログイン→リダイレクト→ログイン後のページ
に移動するのがAuthの機能だと思いますが、
ログイン成功時に、ユーザ情報以外のセッションを付加して
ログイン後のページに推移させるにはどうすればいいのでしょうか?
0677674
2011/04/24(日) 22:00:11.95ID:YIdiQXQPレスありがとうございます。
ヘッダー、フッター、サイドメニューをctpで出力し、
コンテンツ部分をiframe(ファイル名を十進数にして出力)で
表示させてるらしいのです。
ctpでのphpは以下のような記述です。
-------------------------------------------
<?php global $directory;
$url = $this->Html->url(array('controller' => 'common',
'action' => 'ヘッダー、フッター、サイドバー出力.ctp'),
array('escape' => false));
?>
<a href="<?php echo $url;?>/iframeurl:<?php echo bin2hex($directory.'aaaa/bbbb.html');?>">リンク</a>
----------------------------------------------------
上記で出力されるページを、
swf内のボタンでactionscriptでリンクさせたい場合、
以下のように単純な指定でリンクすることはできますか?
疎くてflashVarsすらよくわからず申し訳ございません。。
on (release) {
getURL("http://ドメイン/ctp格納ディレクトリ/ヘッダー、フッター、サイドバー出力.ctp/iframeurl:<十進数で出力されたaaaa/bbbb.html>");
}
0678nobodyさん
2011/04/25(月) 11:04:24.75ID:???$this->Auth->autoRedirect = false; にして、 login() ルーチン内で
if ($this->Auth->user()) { // ログイン成功時
$this->Session->write('xxxx', 'yyyy'); // セッション情報追加
$this->redirect($this->Auth->redirect()); // ログイン成功時のリダイレクト先に飛ばす
}
みたいにすればいいんじゃないかな
0681nobodyさん
2011/04/26(火) 00:35:52.43ID:ITZhMk+T登録画面→確認画面→完了画面
直接完了画面のURLを叩いた場合に
エラー画面に飛ばすみたいなのは
どのように実装するのがスタンダードでしょうか?
0682nobodyさん
2011/04/26(火) 00:39:30.76ID:???0683nobodyさん
2011/04/26(火) 00:49:03.08ID:???$this->Session->setFlash('登録画面からやりなおしてください');
$this->redirect('/xxxx/error');
}
}
0684681
2011/04/26(火) 01:17:51.28ID:???$this->dataの値はチェックしてました。
完了画面ではユニークなキーを発行してmemcachedにフォームの値を入れて
確認メールを送信するのですが、
完了画面でブラウザの更新ボタンを押すともう一度
ユニークなキーでmemcachedにフォームの値を入れて
確認メールを送信してしまうのです。
これどうしたらいいかなーと。
0685nobodyさん
2011/04/26(火) 09:35:16.53ID:???hogehoge.com/controller/action/
と
hogehoge.com/abc/controller/action/
を同じアクションにして、かつ
リンクはabcのprefixつきにしたいのですが、良い方法ありますでしょうか?
動きとしてはprefixルーティングで abc_indexを呼ぶのではなくindexを呼ぶようにしたいのです。
dispatchを書き換えていまはうまくいっていますが、スマートでないような気がして、、
0686nobodyさん
2011/04/26(火) 09:49:38.99ID:???俺はPOSTで画面毎に値を渡してチェックしてるよ。
登録
<input type="hidden" name="next" value="confirm" />
確認
<input type="hidden" name="next" value="complete" />
フォームヘルパーじゃなくて普通のHTMLで用意すれば
$this->dataの配列内で差別化できるし。
昔ながらのやり方だけど、これで良いんじゃないかな?
0687nobodyさん
2011/04/26(火) 17:24:39.04ID:???$this->referer()しかないでしょうか?
0688nobodyさん
2011/04/26(火) 18:29:04.76ID:???0689nobodyさん
2011/04/26(火) 23:17:20.63ID:???URLが異なるならviewもcontrollerも別ファイルにして、
共通のphpを読むようにしたら?
0690nobodyさん
2011/04/27(水) 00:01:18.98ID:???スレッドの一覧を取りたいんですけど、メッセージの投稿日時で
スレッドをソートしたいときは、どう書けば良いのでしょうか?
0691nobodyさん
2011/04/27(水) 07:54:41.56ID:???でいいのでは?
0692690
2011/04/27(水) 19:33:54.84ID:???レスありがとうございます。
説明不足で申し訳ありません。
$this->paginate での条件指定方法が分からないのです。
0693690
2011/04/27(水) 19:36:38.21ID:???FROM に message が指定されておらず・・・。
$this->paginate = array(
'contain' => array(
'Message' => array(
'fields' => array('id', 'created')
)
),
0694690
2011/04/27(水) 19:39:00.83ID:???'Thread.delete_flag <>' => 1
),
'limit' => 10,
'order' => array(
'Message.created' => 'desc' // ダメなとこ
)
);
0695nobodyさん
2011/04/27(水) 22:56:05.83ID:???0696nobodyさん
2011/04/27(水) 22:59:12.39ID:???$usesにMessageを追加して
$this->paginate = array('Message', array(...
とするとか
0697nobodyさん
2011/04/28(木) 10:44:52.76ID:???それが嫌な場合はページネートにjoin句を書く。
$this->paginate = array(
Thread=> array(
'conditions' => array(),
'limit' => 24,
'order' => array(),
'joins' => array(
array(
'type' => 'LEFT',
'alias' => 'Message
'table' => ''messages',
'Message.created' => 'desc'
)
))
);
0698690
2011/04/28(木) 21:41:37.52ID:???すみません。私が理解出来ず、うまく行きませんでした。
SQL 文を見ると "SELECT Thread.Array, ..." と訳の分からん状態に。
でも、ご助言ありがとうございました。
0699690
2011/04/28(木) 21:50:08.53ID:???Thread の一覧では created DESC ですが、Thread の内容、
つまり Message の一覧では、created ASC にしたいので、
hasMany の定義に書くことに抵抗感がありました。
(あまり CakePHP のこと分かっていないのですが・・・)
0700690
2011/04/28(木) 21:52:25.68ID:???GROUP BY を使うことなると今更ながら気づきました。
ただ(MySQL の仕様なのか)意図した形でソートできず、
結局 Thread の modified フィールドを Message の
挿入時に update するのが手っ取り早いのかな・・・と
諦めの段階に入っています。
レス下さった皆様、ありがとうございました。
また、何かあれば宜しくお願いします。
0702nobodyさん
2011/04/29(金) 12:03:24.33ID:???コンポーネント、ビヘイビア、ヘルパー全部で共通で使いたいってときがあるんですけど、そういう場合どうしてますか?
0703nobodyさん
2011/04/29(金) 12:12:37.08ID:???vendors/common_function.php
0704底辺
2011/04/29(金) 14:15:06.85ID:???0705nobodyさん
2011/04/29(金) 15:04:24.70ID:???/cake
└/common ←ここに入れてる
0706nobodyさん
2011/04/29(金) 15:23:45.09ID:???0707nobodyさん
2011/04/29(金) 17:07:06.27ID:???0709nobodyさん
2011/04/29(金) 23:16:13.52ID:???0712nobodyさん
2011/04/30(土) 18:46:27.76ID:???NGにしにくいし
0713nobodyさん
2011/04/30(土) 22:44:34.97ID:???0714nobodyさん
2011/05/02(月) 00:32:14.07ID:???Windows7に換えたらその現象がなくなった・・・気がする
0716nobodyさん
2011/05/02(月) 06:49:05.23ID:???0717nobodyさん
2011/05/02(月) 12:00:40.62ID:???今月の月曜日に全部1を挿入といったようなことをしたいです。
それってSQLの話だけど、例えばDATE_FORMAT()をつかって条件指定できる。
Cake的にはupdateAll()をつかうだけ。
■ このスレッドは過去ログ倉庫に格納されています