【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
0583nobodyさん
2011/04/11(月) 02:22:00.62ID:???コンテンツの事まで言うと、
アバターなんかも3Dで作った物をgifに変換して・・・みたいにしてるみたいだし
cakeなんかで作る部分とは違う技術が必要だよね。
0584nobodyさん
2011/04/11(月) 03:36:02.16ID:???てか、Cakeで生成するファイルでDB分けられるんだから、
そういう負荷対策出来ると思うんだけど。
0585nobodyさん
2011/04/11(月) 10:36:06.39ID:???List, SubList にそれぞれ no という項目あって、それぞれを no 順で取得したいのですが、
List から find('all') で取得した場合 List は no 順になっても SubList が id 順になってしまいます。
以下のように取得して View に渡しているんですが、いいやり方ありますでしょうか?
$this->set('lists', $this->List->find('all', array('order' => array('List.no, List.id DESC'))));
0586nobodyさん
2011/04/11(月) 11:13:07.76ID:???0587nobodyさん
2011/04/11(月) 16:45:08.99ID:???http://log.ryti.ch/items/view/3773
0588nobodyさん
2011/04/11(月) 18:51:32.41ID:???結局SQL書いてるわ....
0589nobodyさん
2011/04/11(月) 18:52:42.64ID:???それはやってみたんですが、
$this->List->find('all', array('order' => array('ListSub.no, ListSub.id DESC')
とすると ListSub なんてないと怒られてしまいます。
0590nobodyさん
2011/04/11(月) 19:03:42.57ID:???array('order' => 'List.no DESC, ListSub.id DESC')
か
array('order' => array('List.no' => 'DESC', 'SubList.id' => 'DESC'))
のどっちかにしろって話じゃないの?
0591nobodyさん
2011/04/11(月) 19:29:41.23ID:???何度もごめんなさい。
書き方変えてみたけどダメでした。
List から id はとってこれるけど、
$this->List->find('all', array('order' => array('List.id' => 'DESC')
こうすると ListSub.id なんてカラムはないよと言われるんです。
this->List->find('all', array('order' => array('ListSub.id' => 'DESC')
SQL Error: 1054: Unknown column 'ListSub.id' in 'order clause'
List は ListSub を hasMeny、ListSub は List を belongsTo でそれぞれ関連づけています。
まだモデルの仕組みなどわかってない部分が多いので、ここを調べろなどのアドバイスでもお願いします。
0592nobodyさん
2011/04/11(月) 20:45:04.42ID:???悩むくらいならそれもありだと思う。
ナンバリングのために、あるテーブルにsaveした場合の処理は、
sqlでUPDATE文書いた。
0593nobodyさん
2011/04/11(月) 21:19:28.81ID:???たぶんやりたいことは
this->ListSub->find('all', array('order' => array('ListSub.id' => 'DESC')
なんじゃないか
0594nobodyさん
2011/04/11(月) 21:41:28.44ID:???コントポーネントの数がすごいことになった。
0596nobodyさん
2011/04/11(月) 23:27:03.36ID:???0597513
2011/04/11(月) 23:27:39.13ID:???親切なレスありがとうございます。
パーミッションは問題無くて、単に拡張子が大文字になってただけだった。
すぐにお礼レスしたかったけど、規制かかって書き込めず、忘れてしまってた。
0598nobodyさん
2011/04/12(火) 00:32:09.98ID:???数えたら50〜60ぐらい。たいしたことなかった。
コントローラも同じくらい。
ゲームはロジックが複雑だから、コントローラにごちゃごちゃ書きたくなくてコンポーネントに書いた。
0599nobodyさん
2011/04/12(火) 01:03:22.27ID:???Cakeだと重くね?
0601nobodyさん
2011/04/12(火) 02:05:11.25ID:???0602nobodyさん
2011/04/12(火) 02:31:07.71ID:???0603nobodyさん
2011/04/12(火) 10:52:30.89ID:???フレームワークを変えても重いのはあまり変わらない事が多い気がする。
で、対処の方法もキャッシュ効かせたりとかで、やることも変わらない。
0604nobodyさん
2011/04/12(火) 11:41:59.99ID:???それでcakeが悪いとか…頭ごなしに批判する奴は大抵こういうふうに理解が浅いよな。
0605nobodyさん
2011/04/12(火) 12:01:58.45ID:???それにFW使ったら重くなるのは当然だろ。
0607nobodyさん
2011/04/12(火) 12:52:39.39ID:???だいたい1コントローラあたり数個使ってる
0608nobodyさん
2011/04/12(火) 17:08:21.81ID:???fixtureの$recordsに配列でデータを記載しておくと、テストごとにこの$recordsの値で
テーブルが初期化されます。
この$recordsをテストごとに切り替えたいのですが、どのようにすればよいでしょうか?
たとえばtestAは$records、testBは$records2を使う、といった具合です。
0609nobodyさん
2011/04/13(水) 05:21:58.13ID:???自分でつくったのは、 var $components で読み込まないと使えない。
bakeで自動作成されたコードはどこでSession読み込んでるんだろう??
0610nobodyさん
2011/04/13(水) 11:38:58.52ID:89duiIHJerror404をオーバーライドすると、HTTP/1.1 200 OKが帰ってくるようになる。
app/app_error.php
<?php
class AppError extends ErrorHandler {
function error404($params) {
extract($params, EXTR_OVERWRITE);
$this->error(array(
'code' => '404',
'name' => 'Not found',
'message' => sprintf(__("The requested address %s was not found on this server.", true), $url, $message)
));
$this->_stop(1);
}
}
?>
このオーバーライドしたerror404を消したり、
parent:error404($params);
とかにすると、404 Not found が帰ってくるようになる。
バグかな?
関数の中身は、
cake/console/error.php の error404 をまるまるコピーしてます。
0611nobodyさん
2011/04/13(水) 11:51:22.60ID:89duiIHJ<p class="error">
<strong><?php __('Error'); ?>: </strong>
<?php printf(__('The requested address %s was not found on this server.', true), "<strong>'{$message}'</strong>"); ?>
</p>
こうなってたから
$this->cakeError('error404' array('message' => '削除されてるよ'));
みたいにやってた。
HTMLのmessageはurlのことで、
PHP側のmessageはステータスメッセージのことなのな。
ややこしすぎワロタ
0612nobodyさん
2011/04/13(水) 23:16:26.44ID:???UPDATE時に、同一テーブルの現在の値を取得する必要ができました。
model.php内で this->$date とやってももちろんダメでした。
sqlを書いてクエリーとして得た結果をarrayに代入することで要件は満たせたのですが、
何かもっと良いスマートな方法は無いでしょうか?
0613nobodyさん
2011/04/13(水) 23:28:39.98ID:JM0N9TIZ複数のバリデーションをかける場合、
バリデートする順番を指定したいのですが、
できますでしょうか?
例えばログインIDに対して半角英数チェック・文字数チェック
・独自バリデーションの3つをする場合で、
独自バリデーションではDBに値を見にいって実際に存在するかを
チェックするとします。
その際に半角英数チェックと文字数チェックの前に
独自バリデーションが走ってDBにアクセスしに行っちゃうと
SQLエラーになってしまいますよね。
その他にもバリデーションに優先順位を付けたいと思う場面って
多々あると思うんですが、そのような方法があれば教えて下さい。
0614nobodyさん
2011/04/13(水) 23:56:57.25ID:???出来ます。
validationのarrayに実行したい順番で代入すれば、上から順に処理します。
例題や公式ページに1項目に対しての複数のvalidation実装例は載っているはずです。
0616nobodyさん
2011/04/16(土) 00:30:56.91ID:IZGr1QKIModel::save()でINSERTやUPDATEできますか?
0617nobodyさん
2011/04/16(土) 00:37:26.03ID:???あまり想定はされてなさそうな事だから、こんなとこで聞くよりも確実だぞ。
そういえば確か、ユニークIDを生成して、それを主キーの値に使う方法があった気がするな。
ユニークIDは確かStringだったと思うぞ。
0618nobodyさん
2011/04/16(土) 16:57:45.01ID:???どんな方法で実装すればいいのでしょうか?
adminページを作ってアクセス制限するか、投稿フォームなどと同じようにトークンを使うか
という方法を考えましたが他に一般的な方法やライブラリなどあれば教えてください
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:???■ このスレッドは過去ログ倉庫に格納されています