【PHP】フレームワーク CakePHP 10ホール目【v1.3】
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2010/11/01(月) 21:43:26ID:???CakePHPから派生した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
0482nobodyさん
2010/12/23(木) 12:21:57ID:???CakePHP重いからピュアなPHPで書いたほうがいいって言ってるのと同じなんだけど。
速度気にするならビューやDBやらをキャッシュすればいいだけだし。
本末転倒もいいところだわ
0483nobodyさん
2010/12/23(木) 12:47:08ID:???<a href="/test/img/sample_mail.jpg" id="sampleMail">
<img src="/test/img/new/sample_mail.png">
</a>
このスレを参考に、こんな感じで試したけど上手くいかない。。
echo $html->image(
"new/sample_mail.png",
array(
'url' => 'sample_mail.jpg',
'id' => 'sampleMail',
)
);
0484nobodyさん
2010/12/23(木) 13:04:15ID:???<a href="<?php echo $html->url('/img/sample_mail.jpg');?>" id="sampleMail">
<?php echo $html->image('sample_mail.jpg');?>
</a>
一応こういう方法があるんだけど。
echo $html->link(
$html->image("sample_mail.jpg"),
"/img/sample_mail.jpg",
array('escape'=>false)
);
ID変えて入れなきゃなんないなら>>483みたいなimage()でやるのは無理
0485nobodyさん
2010/12/23(木) 13:07:11ID:???echo $html->link(
$html->image("sample_mail.jpg"),
"/img/sample_mail.jpg",
array('escape'=>false, 'id'=>'sampleMail')
);
0486483
2010/12/23(木) 15:03:20ID:???凄い!
urlだけ使う方法があるとは、考えてみればカンタンだけど盲点でした。
>>485 のやり方で、上手くいったのですが、
id変えて入れなきゃとはどういう意味でしょうか?
なんにせよ、素晴らしいリプライをありがとうございます!
0487nobodyさん
2010/12/23(木) 15:12:54ID:???× ID変えて入れなきゃなんないなら
↓
○ ID入れてやんなきゃなんないなら
つまりhtml->image()ではAタグにidやらclassやらを指定できないってことね。
0489nobodyさん
2010/12/23(木) 22:53:41ID:???その方がソースも綺麗で分かりやすいし。
0490nobodyさん
2010/12/27(月) 11:08:36ID:???こんな書き方もあります
<?= $html->tag('a',
$html->image('sample_mail.jpg'),
array(
'id' => 'sampleMail',
'href' => $html->url('/img/sample_mail.jpg')
)
) ?>
タグ書きたくない病なので$html->tag結構使ってる
(1.1系だったら$html->contentTagだったかな)
0491nobodyさん
2010/12/27(月) 11:12:50ID:???0492nobodyさん
2010/12/27(月) 11:25:34ID:???Happy Holiday yule cake - CakePHP 2.0-dev released
0496nobodyさん
2010/12/27(月) 14:44:58ID:???たとえばこんな感じで繰り返し書くときに見通し考えてタグ書きたくないときとか
<?
/* サブメニュー定義(実際はcontrollerからsetしたり) */
$subMenuList = array(
'テスト1' => array('image' => 'test1.jpg', 'url' => '/hoge/test1', 'id' => 'test1'),
'テスト2' => array('image' => 'test2.jpg', 'url' => '/hoge/test2', 'id' => 'test2'),
);
/* 繰り返し処理でli要素作成 */
$subMenu = '';
foreach($subMenuList as $menuName => $menu) {
$subMenu .= $html->tag('li', $html->tag('a',
$html->image($menu['image'], array('alt' => $menuName)),
array(
'id' => $menu['id'],
'href' => $html->url($menu['url'])
)
));
}
?>
<? /* サブメニュー出力 */
echo $html->div('submenu', $html->tag('dl', $subMenu));
?>
ビューの中でこんな感じでサブメニューを出力させたりするのに使ったりしてるよ
自前のヘルパー作ってもいいんだけど
まあこんなやりようもあるということで
0497nobodyさん
2010/12/27(月) 15:16:21ID:???<li>って書いてたほうが他の人も分かりやすいわ
一人でオナニーやってろ
0498nobodyさん
2010/12/27(月) 15:57:22ID:???0499nobodyさん
2010/12/27(月) 16:57:32ID:???俺はそのコードを触りたくないな
0501nobodyさん
2010/12/27(月) 18:16:04ID:???0503nobodyさん
2010/12/27(月) 18:30:13ID:???相当見当違いの事やってたってのはよくあることだな。
その書き方は本末転倒だと言わざるをえない。
0504nobodyさん
2010/12/27(月) 18:50:48ID:???html全く書かないとかやりとげたら真のBakerだwww
0505nobodyさん
2010/12/27(月) 18:55:27ID:???<li>なんちゃらry</li>
<?php endforeach ?>
でよくね?
0506nobodyさん
2010/12/27(月) 20:25:01ID:???胸熱だな
0507nobodyさん
2010/12/27(月) 22:28:01ID:???0508nobodyさん
2010/12/27(月) 23:24:26ID:???サーバのモジュールを切るみたいに、必要じゃない機能を使わないようにして欲しい。
0509nobodyさん
2010/12/28(火) 00:31:21ID:???にあるように、
App::import('Sanitize');
class MyController extends AppController {
むにゃむにゃ
}
とやると、エラーになります。
class MyController extends AppController {
MyFunction()
{
App::import('Sanitize');
むにゃむにゃ
}
}
とやるとエラーは出ません。
App::import()
ってどこに書けばいいのでしょ?
0510nobodyさん
2010/12/28(火) 00:43:55ID:???0511nobodyさん
2010/12/28(火) 01:58:16ID:???>>492 に、Lazy Loading 云々って書いてあるから、期待はしてる。
PHP5.2.6より上のバージョンに最適化するなら速度や何かはどうにかなってくれるといいな(願望)
0513nobodyさん
2010/12/28(火) 09:20:27ID:???現状、おでこは狭いです。
10年後にはおでこと頭頂部が連結される見込みですが…
>>512
Fatal error: Class 'Sanitize' not found in viewのテンプレート on line 65
みたいな感じです。
レンダリングの段階で出てます。
0514nobodyさん
2010/12/28(火) 12:31:58ID:???言われたことしかしないのか?
学校か?
死ねよ努力しろよ
0516nobodyさん
2010/12/28(火) 15:14:10ID:???0517nobodyさん
2010/12/29(水) 18:02:39ID:l8k3UmR3cakephp 1.3 で、AuthComponents, AclComponents を使っているのですが、ログイン後に、
$this->set('user',$this->Auth->user());で、ユーザー情報は取れるのですが、
$this->set('group',$this->Auth->user('group'));
とやってもグループの情報が取れません。
Userのモデルには、
var $belongsTo = array(
'Group' => array(
'className' => 'Group',
'foreignKey' => 'group_id',
)
);
と記述しているのですが。
どうやったら、Groupのモデルが引っ張ってこれるのでしょうか。
0518nobodyさん
2010/12/30(木) 12:51:41ID:???サブカテゴリの詳細を出したい時、URLってどうしてます?
カテゴリ:/category/details/1 (CategoryコントローラーのID1の詳細)
サブ:/category/sub/1 (カテゴリID1内にあるサブカテゴリ一覧)
サブ詳細:/category/sub_details/1/1 (上記のサブカテゴリID1の詳細)
categoryというのがコントローラーで2つめがアクションです。
「カテゴリ内のサブカテゴリの詳細」を出す時、上記のようなURLにしているのですが、
いまいちURLが分かりづらくも感じてるので、他の人はどうしてるのか質問しました。
0519nobodyさん
2010/12/30(木) 13:40:10ID:???wordpressみたいにプラグインいれてハイ終わりって感じにはならないですよね。
トップページはフラッシュはないけど、動的にフォームを
追加、削除するjavascriptとかも入ってるし。
0520nobodyさん
2010/12/30(木) 15:30:21ID:???Fatal error: Call to a member function deleteAll() on a non-object in /apppath/cake/libs/cake_session.php on line 790
てのが出まくってるんだけど、これは何でどうしろってことなの?
0521nobodyさん
2010/12/31(金) 01:11:49ID:???0522nobodyさん
2010/12/31(金) 13:20:30ID:???0524nobodyさん
2011/01/01(土) 14:23:41ID:???バグあるし重いし、別のフレームワーク使って作り直さなきゃどうにもならん
0525nobodyさん
2011/01/01(土) 16:13:29ID:???0526nobodyさん
2011/01/01(土) 16:59:33ID:???0527nobodyさん
2011/01/01(土) 18:01:25ID:???を改善してくれたら全く文句ない。
0528nobodyさん
2011/01/01(土) 18:20:39ID:???0529nobodyさん
2011/01/01(土) 20:07:37ID:???0530nobodyさん
2011/01/01(土) 23:35:34ID:???0531nobodyさん
2011/01/02(日) 00:46:25ID:???使ったことあるって人は多いだろうけど使い続けてる人が少ないような
0532nobodyさん
2011/01/02(日) 15:48:13ID:???0533nobodyさん
2011/01/02(日) 16:07:37ID:???>/apppath/cake/libs/cake_session.php on line 790
を見れば?
インスタンスされてない変数のメソッド呼び出し
0535nobodyさん
2011/01/02(日) 17:10:40ID:???Cakeのバグってことだよね?
0536nobodyさん
2011/01/04(火) 10:40:40ID:???よく分からんけど、なんかそこで使われてる必要なモデルが無いんじゃないか?
>>519
プラグインってより、layoutの切り替えじゃないか?
スマートフォンも普通にhtmlを解釈するわけだし、
viewやelementを上手く作ってればlayoutの切り替えで何とかなるかもね。
>>518
URLが気に入らなかったらControllerで変な小細工するよりも、
Routesで対処する方がいいんじゃないか?
>>517
AuthComponent::user()の引数はフィールドの指定じゃないか?
ソースコード見てみたけど、アソシエーションを解釈してくれそうには見えない。
User belongsTo Group なら、$this->Auth->user('group_id')は出来そうだけど。
0537nobodyさん
2011/01/04(火) 11:21:02ID:???無いんじゃないか?って俺に言われても。
Cakeのセッション機能使っただけなんだが。Cakeが直せよ。
セッションまわりは他にも不具合があってかなり怪しい。APC入れたら動かなかったりとか。
0538nobodyさん
2011/01/04(火) 11:27:39ID:???セッション管理とキャッシュが食い合わせ悪いのはCakeに限らないだろ
0539nobodyさん
2011/01/04(火) 11:39:09ID:???それこそ俺にそう言われても。
1.3.2なんて古いの使って無いから790行目がどういうコードかわからんし、
どこでどんな原因があるのか分からんよ。
ただ、Coreのコード中でも、そこでModelのメソッドを呼んでるぽいから、
そのModel作り忘れとかもありえるんじゃないかと思っただけだ。
0540nobodyさん
2011/01/04(火) 14:29:06ID:???cookbookを見ながらログインを作ったのですが、
なぜか、
ログイン時間が切れる→ログインフォームに戻る→再ログイン→エラー
になります。
エラー後に同じIDとパスワードでログインすると、ログインできるので
セッションエラーか何かだと思いますが、原因が掴めません。
0541nobodyさん
2011/01/04(火) 20:12:48ID:???あれではだめですかね
0542nobodyさん
2011/01/05(水) 03:42:32ID:???0544nobodyさん
2011/01/06(木) 04:44:02ID:???一旦フッターのリンクから英語に移動して、見たいページ開いてから、
URLに自分で/jaを継ぎ足す事で見れる・・・
0545nobodyさん
2011/01/06(木) 05:04:44ID:???ところで、cookbookはcakephp製みたいですけど、ソース公開されてるんですか?見てみたい
0546nobodyさん
2011/01/06(木) 06:47:11ID:???たぶんこれだと思うけど。
0547nobodyさん
2011/01/06(木) 10:27:47ID:???おお、ありがとうございます。
ローカルで動かしてみようといろいろやってますが、けっこう大変そう
入れろといわれたヘルパーは一通り用意しましたが、Zendのモジュールがどうとか
のエラーで心折れました
0549nobodyさん
2011/01/06(木) 14:42:37ID:???0550nobodyさん
2011/01/06(木) 15:06:26ID:???0551nobodyさん
2011/01/06(木) 17:17:19ID:???そういう細かいはまり所がちらばってそうな気がしてなぁ。
海外じゃMySQLが主流だから、目玉の数も十分じゃないだろうし、
野良プラグイン使う事を考えるとなぁ。
Postgresのほうが好きなんだけど。
0552nobodyさん
2011/01/07(金) 22:34:13ID:???MySQLのライセンスの問題?
0553nobodyさん
2011/01/08(土) 01:34:02ID:???PHPが流行し始めてMySQLと組み合わせて解説本書かれるようになって10年くらいか?
今じゃすっかりPHP+MySQLが主流みたいになってるな
0554nobodyさん
2011/01/09(日) 11:14:02ID:???たとえば「都道府県」→「市区町村」をフォーム上で両方ドロップダウンにして
都道府県で選択した値で市区町村を動的に変えようと思ったとき、
CakePHPならどういう方法をとるのが適切でしょうか?
ざっくりした処理の流れ程度でいいので、みなさんのやりかたをご教授
いただければありがたいです。
0555nobodyさん
2011/01/09(日) 12:23:33ID:???単にXHRで呼ばれるアクションを別に1個用意しましょう、ってんじゃ足りない?
それともJavaScriptが分かってない?
0556nobodyさん
2011/01/09(日) 12:56:06ID:???http://cakephp.jp/modules/newbb/viewtopic.php?topic_id=443&forum=12
0557nobodyさん
2011/01/09(日) 20:56:38ID:???バリデーションの定数(やエラーメッセージ)をどこかにまとめたい場合はどこにまとめるのが作法ですか?
http://book.cakephp.org/ja/view/150/
この「独自のバリデーションルール」だとマジックナンバーになってるけど、
実際の開発ではどういう方法があるかを知りたくて。
app/config/bootstrap.phpにまとめるものですか?
0558nobodyさん
2011/01/10(月) 00:55:02ID:???自分はvalidation.phpとか作ってConfigure::load()してる。
bootstrapにゴリゴリ設定詰めてもそりゃ動くけどね。
0559557
2011/01/10(月) 02:26:32ID:???app/config/validation.phpにずらずら定数を書いておいて
app/models/<使いたいmodel>.phpの先頭でConfigure::load('validation');
という意味であってます?
bootstrapだとvalidation.phpが必要ないmodelでも読み込んじゃうから良くないという感じでしょうか?
0560nobodyさん
2011/01/10(月) 04:57:04ID:???0561nobodyさん
2011/01/10(月) 12:16:49ID:???bootstrapで常時読み込むよ。モデルごとに分けたりなんかしない。
配列の階層構造とかデフォルトのメッセージとかは面倒なのでビヘイビアで処理させてる。
0562nobodyさん
2011/01/10(月) 12:31:41ID:???全体の動作が重くならない?
0564nobodyさん
2011/01/10(月) 14:10:59ID:???0565563
2011/01/10(月) 15:22:42ID:???がなー
これが重いと言われるとどうしようもない
0566nobodyさん
2011/01/10(月) 17:30:16ID:???無駄に発行するSQLの処理コストで吹き飛ぶ
誤差程度だと思うよ。0.4msなんて
bootstrapにある設定のコスト気にするより、
recursiveや取得するフィールドをきっちり調整した方がいいと思う。
0567nobodyさん
2011/01/10(月) 17:45:15ID:???Session.startは true
Security.levelは medium
のときに、
ログインページがSSLなんだけど、
非SSLページを遷移してる時は当然セッションIDのCookieは「あらゆる接続・・」で維持され読み取れるんだけど、
SSLのログインページを開いた時点で「セキュリティーで保護された接続・・」に限定されてしまい、
非SSLに移るとセッションは消えるという現象が起きまして。。
Security.levelが medium以下であればSSL・非SSLでのセッションは維持されるとあるのにおかしいなとソースを読みまくり、
一日かけてやっとたどり着いた原因が
SSLページでrequestActionしていると、セキュアのみのセッション(セッションID保存Cookie)に変更されてしまうというものでして、
で、回避するには、
Coreをいじるか、requestActionを使わないしかないように思うんですが、
同じような問題にぶち当たって解決された人いませんか?
0568557
2011/01/10(月) 20:13:38ID:???>>560
モデルってわけでもないからapp_model.phpじゃないのかな?という疑問もあり質問して聞いてみたくて。
作法みたいなのがあればそれに倣おうと。
>>561
常時読み込んでも対して違わないんですね。参考になります。
app_model.phpかbootstrap.phpで常時読み込んでみてパフォーマンスが気になるレベルになったら次を考えてみます。
みなさんありがとうございます。
0569nobodyさん
2011/01/10(月) 20:16:23ID:???実際これってかなり大事だけど忘れがちだよね。
めんどくさいってのもあるもんな。
0570nobodyさん
2011/01/10(月) 20:38:05ID:???0571nobodyさん
2011/01/10(月) 20:39:10ID:???0572nobodyさん
2011/01/10(月) 21:33:48ID:???どこかでparams['requested']を調べてSessionを開始しないようにすればいいと思いつつも
beforeFilterでは時既に遅し、__constructではparams[request]は取得できないとなやんだんですが、
http://cakephp.jp/modules/newbb/viewtopic.php?topic_id=1847&forum=8
こんなページを見つけて、ConstructClassesってメソッドを初めて知った。
ここに↓でどうやら意図したとおりに動いてる模様。
public function constructClasses(){
if(!empty($this->params['requested'])){
//Sessionを使わない
Configure::write('Session.start', false);
}
parent::constructClasses();
}
汚しましたーさーせん。
0573nobodyさん
2011/01/12(水) 12:17:20ID:???会員数が数万単位でも違和感なく使える。
だから、Cakeが重いと感じるのは
ソースの書き方やキャッシュの使い方が悪いのかな・・。
0574nobodyさん
2011/01/12(水) 16:36:48ID:???cookbookには$this->ModelNameと書いてありますが実際にやってみるとそれでは取れず。
http://book.cakephp.org/ja/view/53
で、thisを覗いた所、
$this->modelNames[0]
$this->modelClass
の2つがあったのでどっちがいいのかなと思って気になりました。
0575nobodyさん
2011/01/12(水) 16:38:52ID:???0576nobodyさん
2011/01/12(水) 18:08:05ID:???そんな簡単にいくことってほとんどなくね?
0577nobodyさん
2011/01/12(水) 18:29:16ID:???複数モデル使うときは明示すればいいだけだし
0578nobodyさん
2011/01/12(水) 22:06:01ID:???配列で複数指定できるんだし、全く問題ないぞ。
0580nobodyさん
2011/01/13(木) 00:09:54ID:???DB:Firebird 2.5
にて、下記を参考にBLOB型のカラムに画像を登録しようとしています。
http://c-brains.jp/blog/wsg/10/06/05-074544.php
viewとcontrollerのソースはこのサイトのままにmodelを自分で追加。
テーブルはcontentsカラムの型をBLOBに変更しています。
(Firebirdにmediumblob型が無いため)
この状態でファイルのアップロードをするとimages_controller.phpの33行目
$this->Image->save($image);
の実行時に下記エラーがでてしまいます。
Dynamic SQL Error SQL error code = -104 Unexpected end of command
SQL:INSERT INTO "image" ("filename","contents") VALUES ("filename.jpg","?????????")
※?????????は画像ファイルのバイナリの文字列(と思われる)が入っています。
contentsの登録部分(30行目)を削除すると成功するため、BLOB型の部分が
うまくいっていないのは確かだと思うのですが、どなたか解決策をご存知の方はいませんでしょうか。
0581nobodyさん
2011/01/13(木) 01:29:47ID:???回答者がそれを設置してみないと答えられないんじゃないか?
そしてあんた、自分の中で答え出てるじゃん。BLOB型の部分がおかしいって。
それなら、元のソースに問題があるんだろ。作者に聞けよ。
■ このスレッドは過去ログ倉庫に格納されています