【PHP】フレームワーク CakePHP 9ホール目【v1.3】
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2010/07/23(金) 09:13:26ID:v3m09M9uCakePHPから派生した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
0573nobodyさん
2010/09/14(火) 17:36:34ID:???ビューもUTF8にしてafterFilterで文字コード変換じゃダメなの?
find時に文字コード変換はafterFindでできそうな気がするけど、
DBもUTF-8で作ってるのにビューだけShiftJISにこだわる理由はあるんだろうか
0574nobodyさん
2010/09/14(火) 18:12:47ID:sGtN+/un携帯用のビューでして、ShiftJISで表示させたいんです。
0575nobodyさん
2010/09/14(火) 18:15:45ID:???まずsageようじゃないか
そして>>573にあるように、UTF-8でつくろう
方法はキミが分かってる通りだ
0576573
2010/09/14(火) 18:22:34ID:???あと、UTF-8で作る方法は知っていますが、>>574で書いたとおり、
携帯用のビューはShiftJISなのでそうしたいんです。
現代の携帯端末はほとんどUTF-8に対応しているとはいえ、、
今までそれで表示していて問題がなかったので。
でも、それしか方法がないと言うなら、一旦findで配列を取得して
foreachでmb_convert_encodingしてSJISに変換し、ビューに渡す方法にします。
0578nobodyさん
2010/09/14(火) 18:25:53ID:???0579nobodyさん
2010/09/14(火) 18:26:27ID:???どうしても、ビューはShiftJISにしたいっていうなら、
mb_convert_encodingの処理はafterFind()の中に書けばいいと思うよ。
0580nobodyさん
2010/09/14(火) 19:09:36ID:???0581nobodyさん
2010/09/14(火) 19:30:32ID:???0582nobodyさん
2010/09/14(火) 19:56:50ID:???軽くググったら、そういう解説ばかりだけど。
0583nobodyさん
2010/09/14(火) 20:28:55ID:???0584nobodyさん
2010/09/14(火) 20:29:18ID:???softbankはその逆だっけ?
0585572
2010/09/14(火) 20:37:37ID:???ViewもUTF-8で作成して、出力時はafterFilterでShift-JISにし、
View内のmetaのContent-TypeをShift_JISにすれば、何も問題ないんですね。
お騒がせしました。
0586nobodyさん
2010/09/14(火) 20:40:04ID:???0587nobodyさん
2010/09/14(火) 20:51:33ID:???絵文字変換のついでに対策すればいいんだけど。
0588nobodyさん
2010/09/15(水) 10:54:40ID:???初心者には敷居が高くて難しいんですよ、これ
もちっと簡単にしてほしかったですね
0589nobodyさん
2010/09/15(水) 11:02:19ID:???カスから脱出するために、皆頑張っているのだ。
0590nobodyさん
2010/09/15(水) 11:37:03ID:???PHPが初心者だったらどのフレームワーク使ったって一緒だ
0591nobodyさん
2010/09/15(水) 11:46:50ID:???0593nobodyさん
2010/09/15(水) 12:12:37ID:???0594nobodyさん
2010/09/15(水) 12:31:33ID:???if,swtich,case,break,do,while使えますよ!
0595nobodyさん
2010/09/15(水) 12:32:29ID:???0596nobodyさん
2010/09/15(水) 12:34:15ID:???0598nobodyさん
2010/09/15(水) 18:59:43ID:???Router::connect('/', array('controller' => 'top', 'action' => 'index', 'home'));
とすれば、初期画面を指定できますが、
同じコントローラーで別のアクションを実行するには
http://hoge.com/top/add
のようにしなくてはいけません。これを
http://hoge.com/add
とする方法は無いのでしょうか?
0599nobodyさん
2010/09/15(水) 19:42:02ID:???0600598
2010/09/15(水) 19:54:47ID:???0601nobodyさん
2010/09/15(水) 20:10:25ID:???0602nobodyさん
2010/09/16(木) 01:00:40ID:???routes.phpの設定で以下のようにする方法を良く目にするのですが、
Router::connect(‘/m/:controller/:action’, array(‘prefix’ => ‘mobile’));
この方法ではURLを変更する事になります。
同一URLで振り分けたいのですが、
上記以外でメソッドにprefixを付ける方法はないでしょうか?
0605nobodyさん
2010/09/16(木) 02:54:46ID:???同じroutesの質問してますが、違います。
それに半日考えてググってソースも見てどうしようもなく質問しました。
>>604
それだとCakeを使う意味がない気がします。
0606nobodyさん
2010/09/16(木) 06:55:26ID:???最近CakePHP触ってないからうろ覚えなんだけど、
controller.phpにbeforeFilterを定義して、携帯からのアクセスか
PCからのアクセスかを判別する処理をそこに書く。
その中でコントローラを割り振るようにできるんじゃないかな?
確かコントローラ名が$thisに入ってたよね
0608nobodyさん
2010/09/16(木) 09:33:19ID:???Controller内で
$this -> Amazon -> setSession($this -> Session);
と記述し、
Model内で、
public function setSession($session){
$this -> Session = $session;
}
と記述。この後、モデル内で、
$this->Session->write('page_list',$page_list);
などとコントローラで書くような記述をしています。
しかし、firefoxでは問題ないけど、IEやChromeでセッションの受け渡しが
上手く行かない問題が出てきて、もしかして、このやり方をしているかが原因なのかなと
思いました。
普通に、モデル内で使いたいなら、$_SESSIONで書いたほうがいいのかなあと。
0609nobodyさん
2010/09/16(木) 14:56:55ID:???beforFilterあたりでIPかUAを見てprefixつけられなかったっけ
と思ったら>>606が同じようなこと書いていたな
>>603
基本的なroutesもよくわかってなかったやつが一日でprefixの質問するレベルに成長するとは思えないぞw
>>607
作者さん?
機能強化よりシンプルでわかりやすい仕様にしてくれ
0613nobodyさん
2010/09/16(木) 21:04:42ID:???0614nobodyさん
2010/09/16(木) 21:18:40ID:???ケータイなら/m/hogeにrewriteすりゃいいって話じゃないの?
0615nobodyさん
2010/09/16(木) 21:40:20ID:???0616nobodyさん
2010/09/16(木) 22:07:43ID:???0617nobodyさん
2010/09/16(木) 23:18:48ID:???0618nobodyさん
2010/09/17(金) 00:51:47ID:???むしろ、バーチャルホストでどう実装するのか聞きたい。
>>616
本の通りに書いていれば、ドメイン分けずにすむだろ。
0619nobodyさん
2010/09/17(金) 10:08:15ID:???0620nobodyさん
2010/09/17(金) 12:39:29ID:???0621nobodyさん
2010/09/17(金) 19:08:58ID:???http://www.exgear.jp/blog/2010/09/geo_simple_plugin/
便利そうなんだが、ライブラリ依存しないCakePHPのプラグインがライブラリ依存してるというのも皮肉な話だな
0622nobodyさん
2010/09/17(金) 19:23:15ID:???○利用
0623nobodyさん
2010/09/17(金) 21:12:29ID:???0624nobodyさん
2010/09/20(月) 01:01:46ID:???エラーメッセージを出そうと、Cookbookの
http://book.cakephp.org/ja/view/1252/Displaying-Auth-Error-Messages
を見て同じようにビューにecho $session->flash();と記述したのですが、
Undefined variable: sessionのエラーが出ます。
これはどうしてでしょう?$this->set('session', $session)みたいにして
ビューに渡す必要はないですよね?
0625nobodyさん
2010/09/20(月) 01:23:29ID:???ログイン情報を記述しているapp_controllerにヘルパーを指定してるのですが、
そこにSessionを指定しないとエラーが出るみたいです。
0626nobodyさん
2010/09/20(月) 05:35:42ID:???自分で言っているとおり、Sessionヘルパーを使うことを
宣言する必要があると思いますよ。
class AppController extends Controller{
var $helpers = array('Session');
}
Sessionコンポーネントは宣言してなくても使えるけど、
Sessionヘルパーは宣言する必要があったはずです。
0627nobodyさん
2010/09/22(水) 08:56:04ID:R9kqnTJBとまってしまってます。
データベースを作成する過程がないので、どのデータベースにテーブルを
作成するのかがわかりません。
0628nobodyさん
2010/09/22(水) 08:58:32ID:???チュートリアルの次のページを見れば分かる。
0629nobodyさん
2010/09/22(水) 09:54:00ID:R9kqnTJBありがとうございます。
これで先に進めます。
0630nobodyさん
2010/09/22(水) 14:23:14ID:???0631nobodyさん
2010/09/22(水) 18:54:44ID:???モデル名 → テーブル名
と考えるとわかりやすいよ。
ただし、モデルの命名規則とテーブルの規則は違うから注意。
例)モデルでUserならテーブルはusersを作成する
0633nobodyさん
2010/09/22(水) 20:19:43ID:???0634nobodyさん
2010/09/22(水) 23:10:29ID:???0636nobodyさん
2010/09/23(木) 08:16:19ID:???0637nobodyさん
2010/09/23(木) 13:13:13ID:???0638nobodyさん
2010/09/23(木) 14:23:16ID:???0639nobodyさん
2010/09/23(木) 14:43:20ID:???公式のサンプルやり始めた俺には参考になるよ。
命名規則で結構引っかかってたところ。
サンプルだとpostっていうモデル作ったら
DBはpostsにしろって言われてなんでsつけるのか意味不明だった。
コントローラーにもよくわからない形(posts_controller.php)
とか名前つけてるから?が多かった。
自動解釈してくれるからこういう形式にしろよって意味だろうけど
書籍なしでいきなり始めるとわけわかめ。
0640nobodyさん
2010/09/23(木) 15:01:57ID:???0641nobodyさん
2010/09/23(木) 15:15:12ID:???0644nobodyさん
2010/09/23(木) 15:32:43ID:???テーブル→posts
レコードがたくさん集まってテーブルになるんだ。
これはphpやMVCとは関係ないDBの基本だからな、覚えとけよ。
0645nobodyさん
2010/09/23(木) 15:56:34ID:???ありがとう、早速動画見つけたので見てるが
すごいわかりやすくて助かる。
Cから入った人間だから、C++のときもそうだったけど
オブジェクト指向とか、MVCモデルについては
なかなかとっつきにくかったけど、これはありがたい。
0646nobodyさん
2010/09/23(木) 16:05:37ID:???0647nobodyさん
2010/09/23(木) 17:39:58ID:???単数形と複数形が同じなので注意!
0648nobodyさん
2010/09/23(木) 20:19:39ID:???0649nobodyさん
2010/09/24(金) 02:17:58ID:???0650nobodyさん
2010/09/24(金) 03:14:33ID:???新規の開発にしか使えないFWってどんなメリットがあるのよ?
既存の改修とかに使えないんだろ?
チンカスレベルの屑FWとしか言えんだろ?
0651nobodyさん
2010/09/24(金) 03:55:59ID:???0652nobodyさん
2010/09/24(金) 08:33:43ID:???むしろ命名規則にのっとたり、書き方も厳密にしなきゃいけないし、
よけない手間が増える。
だが、優柔不断な俺にはそれが良い。
0653nobodyさん
2010/09/24(金) 08:42:53ID:???PHPみたいに甘い言語だと、プログラマーによって
かなりオレオレ仕様だったり、ソースがわかりずらかったりするから
フレームワーク使うと、統一化されて跡から保守しやすいっていうメリットが生まれる。
また、ページごとにやってたようなエラー処理だとか
フォームの入力チェックみたいな処理も自動化出来てわかりやすい。
どちらかというと3人程度〜の新規開発向けだと思うよ。
個人でやってぱぱっと作るならFW使わなくても別に困らないしw
0654nobodyさん
2010/09/24(金) 09:42:52ID:???多少の生産性は犠牲にしつつも保守性を上げるための仕組み、
という面は確実にある気がする。
慣れてくればそのオーバーヘッドもだんだん減ってくる(はず)だし、
そもそもFWって元来そういうもんだよね。
CakePHPの場合は強制される規約が多すぎて、
たとえばタグライブラリ的な使い方をしようと思ったときに
ちょっと難しい部分があるのも事実だけど。
0655nobodyさん
2010/09/24(金) 09:50:20ID:???でも、それらって中小以上の、制作会社なら
独自の規約やルールが決まっていると思うんだよな。
フォームヘルパーのようなライブラリも作ってるだろ。
SOHOなら別にオレオレでも構わないと思うし、規模もたかが知れてる。
かといって、規模が大きめの案件ならFWは速度的なネックがある。
まぁ、俺はオレオレの仕様変更が多くて定まらないから、
Cake使ってるんだけどな。規模が小さい案件ばかりだし。。
0656nobodyさん
2010/09/24(金) 10:26:20ID:???CakePHP辞典 Pocket詳解 [単行本]
0657nobodyさん
2010/09/24(金) 11:22:13ID:9bxZAnFYpaginatorのようにページ送りしたいんだけど、
いい方法ってありますか??
0658nobodyさん
2010/09/24(金) 11:22:15ID:???普通にfindしてからsaveしないと駄目?
saveByIdとか簡単な関数ないの?
0659nobodyさん
2010/09/24(金) 11:33:35ID:???$dataにidがあればupdateになるから
array(
'id'=>1,
'field1'=>'hoge',
);
これをsaveすればid1のfield1のみアップデートされる
0660nobodyさん
2010/09/24(金) 11:34:10ID:???良くわからない事言ってるが、
保存されている情報を取得するならfind(select)は必須だろ?
saveAllにしてパラメータ指定するのはダメなのか?
0661nobodyさん
2010/09/24(金) 11:35:49ID:???0662nobodyさん
2010/09/24(金) 11:37:22ID:KWM9yVDw<?php echo $html -> css('hoge', null, array('inline' => false)); ?>
のようにして、レイアウトの $scripts_for_layout にCSSの記述を追加できますが
タイトルは、コントローラから
$this -> set('title_for_layout', 'ほげほげ');
とするしか手がないんでしょうか。
タイトルもctpファイルからレイアウトの $title_for_layout に設定できたらいいんですが
できないものなんでしょうか。
0663nobodyさん
2010/09/24(金) 12:09:19ID:???Webサービスとかなんらかの読み込み元のデータはあるんでしょ。
find、_findCount、_findAll あたりをオーバーライドしたモデルを作るか、
データソースドライバを作ればPaginator関係はそのまま使えるので便利。
0664nobodyさん
2010/09/24(金) 12:16:54ID:???すみません質問間違ってました、id以外をキーにしてそれできませんかね。
できないなら、やはりfindしてidを取ってこないといけないですよね。
0665nobodyさん
2010/09/24(金) 12:39:38ID:???Controllerクラスだけでなく、Viewクラスにも pageTitle というプロパティがあるので、
ctpファイルのどこかで
<?php $this->pageTitle = "ほげほげ"; ?>
とすればOKだと思う。
0668662
2010/09/24(金) 15:21:06ID:???このあたり、1.3で仕様が変更になっているんですよね。
'inline' => false の指定方法とか。
<?php $title_for_layout = 'ほげほげ'; ?>
のようにctpファイル内で変数をしてみましたが、レイアウトには適用されませんでした。
もう少し調査してみます。
0669nobodyさん
2010/09/24(金) 16:20:29ID:???ありがとうございます。やり方がわかりました!
シリアライズされた元のデータがあるので、
それを扱う例があれば嬉しいですけど、ネットで探しても見つからない
って時は作るしかないですよね。。わがままですよね
0670nobodyさん
2010/09/24(金) 16:33:01ID:???てか、いきなりCakePHP(フレームワーク)からはじめたの?
普通は、素のPHPのプログラミングを勉強していって
君の言う改ページ処理やファイルに書き込む処理など
基本的なコードを書いて勉強していくと思うんだけど。
0671665
2010/09/24(金) 16:55:01ID:???最近使っていなかったから1.2の感覚で書いてしまいました・・・。
前に作ったの移行してみようかな。
>>668
すみませんでした。
http://book.cakephp.org/ja/view/1566/View-and-Helpers
このページを見る限りでは、
<?php $this->set('title_for_layout', "ほげほげ"); ?>
だと思います。
0672662
2010/09/24(金) 17:18:44ID:???コントローラから
<?php $this->set('title_for_layout', "ほげほげ"); ?>
は当然効くんですが、Viewからは効いていないですね。
コアのコードを追ってみるか・・・。
■ このスレッドは過去ログ倉庫に格納されています