【PHP】フレームワーク CakePHP
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2006/11/18(土) 20:53:22ID:???本家
http://www.cakephp.org/
10分で作るCakePHPアプリ for Windows
http://p4life.jp/cake/
マニュアル日本語化
http://www.cakephp.jp/doc/
日本語フォーラム
http://cakephp.jp/modules/newbb/
あとこのへんとか(初心者向けTIPS)
http://www.avatarfinancial.com/pages/cake/
0345344
2007/07/05(木) 21:33:49ID:???0346nobodyさん
2007/07/06(金) 04:07:26ID:???0348nobodyさん
2007/07/06(金) 10:41:52ID:???0349nobodyさん
2007/07/06(金) 14:15:24ID:???例えばDB(他は試してないけどpostgreSQL7.x 8.x)に
birthday DATE
って列があって、
cakePHP側ではビューに
$html->dateTimeOptionTag('Profile/birthday', 'YMD' , 'NONE', $html->tagValue('Profile/birthday'), array())
こんな感じでコントローラーに受け渡してしまえば、
コントローラーでは
$this->Profile->save($this->data)
これでサックリ、
と普通だったらそうなんですが、
何も選択してないままだとSQLに
birthday=''
を吐き出してしまって、DBからいつも
「DATE型やっちゅうのに何おまえ(空)文字入れようとしとんねん!」
と怒られるんです。
かといって誕生日なんて(システム的にどーでもいい)情報、NOT_EMPTYにできないし
仕方がないのでコントローラーでわざわざSQL書いたり、
空白だったら1970-1-1にしといて、ビュー側で1970-1-1だったらNULLと同じ扱いにする、
などなど、日時情報にイチイチぶさいくな事してるんだけど、
どこにも話題が無いって事は自分がぶさいくなだけで絶対
何かcakePHP的に合理的な方法があるはず!と思ってますが
ヒントだけでも誰か教えてください。
0350nobodyさん
2007/07/06(金) 14:24:20ID:???0351nobodyさん
2007/07/06(金) 15:05:44ID:???cake/controller/controller.phpにある
cleanUpFields
をコピペして
app_controller.phpに突っ込んで、
$this->params['data'][$modelName][$field['name'] . '_year']
$this->params['data'][$modelName][$field['name'] . '_month']
$this->params['data'][$modelName][$field['name'] . '_day']
などなど、
dateTimeOptionTagで生成されるパラメータのいずれかがemptyなら
$this->data[$modelName][$field['name']] = $newDate;
を発行しない、という処理を加えていくだけ。
独自でconfirm作ってる場合は、cleanUpFieldsかける前に
いずれかが空白(未選択)なら確認画面に戻す処理を書き加えても良いだけだし。
こんな小一時間考えればわかるような事に俺は…
お騒がせしました。
0352nobodyさん
2007/07/07(土) 01:33:20ID:r27wk2rh0353nobodyさん
2007/07/07(土) 10:59:23ID:???yamlで共通configファイルを作ってるけど。そこで変数やformの属性を全部定義してる。
0354nobodyさん
2007/07/07(土) 11:25:14ID:???hiddenに関してはループ処理でまとめられそうな気がするよ。
俺はserializeしてbase64してハッシュつけて1個のhiddenにつっこんだりしてる。改変も防げて便利便利〜。
まあそもそも入力項目が多いということはアプリケーションがそれだけ複雑ってことだ
0355nobodyさん
2007/07/07(土) 11:32:48ID:???そんな面倒なことしてなかったキガス
そんなことしてたらCake(FW)の意味ない品
0357nobodyさん
2007/07/07(土) 15:46:25ID:???0358nobodyさん
2007/07/07(土) 16:53:17ID:r27wk2rhyamlで共通configファイルを
>>354
俺はserializeしてbase64してハッシュつけて1個のhiddenに
おもしろいですね、ぜひ詳しく聞かせて欲しい
0359nobodyさん
2007/07/07(土) 18:39:04ID:???詳しくって、このまんまだと思うぞ。
0360nobodyさん
2007/07/07(土) 18:54:40ID:???name:←変数名
inputview:←入力form用view
form:input
size:30
....以下略
confirm:←確認form用view
form:hidden
table:
width:なんたら
とかやっておくだけ。
yamlで配列に取り込んでinput用viewの時には$array['name']['inputview']の定義を使って、formを描く。
confirmの場合は$array['name']['confirm']のを使う。
confirmの時のserialize云々は、>>359氏が言ってるようにそのまんまだとおもうけど
foreach($array as $key => $attrs) {
if( $attrs['confirm']['form'] =='hidden'){
$hiddenarray[$key] = post値;
}
}
とかしておいて、$hidden = base_64encode(serialize($hiddenarray));
あとは一つの hidden formに一括入れちゃえばいい。
ハッシュ付けたい時は $hidden .=ハッシュ値(お好みで設定)、とすればいいでしょ。
あとはwriteの時にハッシュをreplaceして、decode->unserialize。このときにも上のyamlの配列キーが使える。
0361nobodyさん
2007/07/08(日) 21:18:20ID:???ここ参考にして、ブログにコメント機能を実装してみたのですが。
一覧表示で、記事ごとにコメント数を表示させていて、
この方は記事についているコメントをcount関数を使っているみたいなんですが、
この方も言われているようにスマートではないと思うんです。
おそらくfindCountを使うんだと思いますが、どう書いたらいいか考えても思いつきません。
どなたかアドバイスいただけませんか。
0362nobodyさん
2007/07/09(月) 03:25:38ID:+2G34Por数秒メッセージを表示してリダイレクトって気持ち悪いので普通に$this->redirectでリダイレクトしてます。
なんか便利な使い方があるんでしょうか?
0363nobodyさん
2007/07/09(月) 04:31:27ID:???0365nobodyさん
2007/07/09(月) 08:44:28ID:ldZF+CQohttp://localhost/cake/tests/indexにアクセスするとページが見つからないって怒られます
<?
class TestsController extends AppController {
function index() {
}
}
?>
と書いたcake/app/controllers/tests_controller.php
とcake/app/views/tests/index.thtmlを配置しています
何が不足しているのでしょうか?
0366nobodyさん
2007/07/09(月) 09:03:09ID:???が必要かも。
0367365
2007/07/09(月) 10:39:41ID:???0368nobodyさん
2007/07/09(月) 12:59:15ID:???0370nobodyさん
2007/07/09(月) 14:22:07ID:???0371nobodyさん
2007/07/09(月) 14:35:38ID:???0372nobodyさん
2007/07/09(月) 14:39:41ID:???プログラマは悲しいことにそういうやつ多いよ。
0375nobodyさん
2007/07/09(月) 14:44:22ID:???0376nobodyさん
2007/07/09(月) 15:10:44ID:???0377nobodyさん
2007/07/09(月) 16:49:24ID:???0378365
2007/07/09(月) 17:09:44ID:???0379nobodyさん
2007/07/09(月) 17:37:23ID:???0380nobodyさん
2007/07/09(月) 17:39:36ID:???エラーメッセージを回答者に想像させといて適格な答えが得られる訳がない
(俺はエラーメッセージ書かれても答えられないけどな)
0381nobodyさん
2007/07/09(月) 18:01:13ID:???0382365
2007/07/09(月) 19:51:34ID:???>エラーメッセージを回答者に想像させといて適格な答えが得られる訳がない
(ファイルとして存在しない)URIからコントローラのアクションを要求しているんだから
CakePHPが処理しない限りはHTTP404 NotFoundエラーになる…はず
0383nobodyさん
2007/07/09(月) 20:16:13ID:???http://www.cakephp.jp/doc/installing.html
ここを全ページ5万回読み直してインストールから試してごらん。
正しく出来てるなら
http://localhost/cake/tests/index
だろうと
http://localhost/cake/hogehoge/unko
だろうと次に何すればいいか表示されるから
0384nobodyさん
2007/07/09(月) 20:44:27ID:???http://cakephp.jp/modules/newbb/viewtopic.php?viewmode=flat&topic_id=614&forum=8
どこに書いても答えは同じだ!!
0385nobodyさん
2007/07/09(月) 20:48:16ID:???0386nobodyさん
2007/07/09(月) 20:50:24ID:???0387nobodyさん
2007/07/09(月) 21:23:33ID:???0388nobodyさん
2007/07/09(月) 21:56:46ID:???0389nobodyさん
2007/07/10(火) 05:24:47ID:???0390nobodyさん
2007/07/10(火) 09:04:44ID:???画面上にエラーが多数表示されるんですが
そういった場合に特定の処理を実行させるにはどのようにすればいいですか?
0391nobodyさん
2007/07/10(火) 12:54:59ID:???app/error.php というファイルを作って、ErrorHandler を extends した
AppError クラスを定義する。
ErrorHandler は cake/libs/error.php にある。
適当に missingController($params) やらをオーバーライドするなり
__construct からごっそりすげ替えるなりご自由に。
0393nobodyさん
2007/07/10(火) 18:11:20ID:???0394nobodyさん
2007/07/10(火) 21:36:20ID:???0396nobodyさん
2007/07/10(火) 22:50:28ID:???どういう設計にすればいいかなぁ?
0397nobodyさん
2007/07/10(火) 22:55:24ID:???0398nobodyさん
2007/07/10(火) 22:56:15ID:???0399nobodyさん
2007/07/11(水) 00:45:38ID:???テーブルの構造だったらスレ違い&板違いだよね
diffをとったものをガンガンレコードに追加すれば?
0401nobodyさん
2007/07/12(木) 11:23:56ID:???衝突が起きたときのマージのインターフェイスをちゃんとつくれば
分散wikiとか夢はひろがりますな.
0402nobodyさん
2007/07/12(木) 14:42:58ID:iLx7lYjZ0403nobodyさん
2007/07/12(木) 14:48:39ID:???0404nobodyさん
2007/07/12(木) 14:51:49ID:???MediaWikiのように、現在のページ(pageテーブル。ページ内容含まず)を
更新するたびにそのページのリビジョンテーブル(revisionテーブル)に
新しいリビジョンを追加し、そのリビジョンテーブルに関連した
テキストテーブルにデータを追加。
(そして表示するときは、その最新リビジョンを表示)
というのはscaffoldやbakeでさくっとできないの?
データベースレイアウト
http://www.mediawiki.org/wiki/Database
0405nobodyさん
2007/07/12(木) 15:03:54ID:???0406nobodyさん
2007/07/12(木) 15:10:09ID:???なんかCakePHPってモデル(テーブル)に直接書き込むのは
簡単だけど、モデルへの書き込み(Update)を追加(Insert)に
変更するのは面倒そうなんだよな。
具体的にいうと、Wikiのページを更新すると、
pageテーブルに上書き、
revisionテーブルに追加、
そのrevisionテーブルに追加した行に関連したtextテーブルに追加、
と三つのアクションになる。
そしてページを表示するときは、revisionの一番新しいのだけ表示。
これってスマートに実装できるんだろうか?
まあ、レールを脱線してがんばれば
どんなことだってできるだろうけど。
0407nobodyさん
2007/07/12(木) 15:46:25ID:???レコード追加時はidを空、レコード変更時は、あらかじめ変更するレコードの
idカラムを取得してセットしておく必要があるが、それ以上難しいことってある?
ごめ、俺、理解してないかも。
0408nobodyさん
2007/07/12(木) 15:49:03ID:???あとページ表示は単にpageテーブルからのデータで問題ないでしょ?revisionテーブル必要ない。
0409nobodyさん
2007/07/12(木) 16:00:45ID:???revisionとtextが1:1だったらtextテーブルの意味のほうが良く分からん
まあぶっちゃけpageテーブルだけでもいけるとは思うが
0410nobodyさん
2007/07/12(木) 21:15:19ID:???(MedhiaWikiは履歴の実装を見るために参考にしただけだから詳しくない)
revisionとtextがなんて分かれているかは知らないが、
MediaWikiでは分かれている。
0411nobodyさん
2007/07/12(木) 21:21:59ID:???まず、pageテーブルを編集する。
そこに履歴の仕組みを作りたい。
その方法として、pageテーブルから
バージョンごとで違う情報をrevisionテーブルに移動し、
そちらに格納する方法。(MediaWiki)
もう一つの方法として、pageテーブルはそのままで、
pageテーブルが更新されたら、履歴情報をhistoryテーブル
(フィールドはpageテーブルのフィールド+リビジョンID)に
追加しておく方法。
個人的には後者の方がCakePHPで素直に実装できそうな気がするが、
MediaWiki方式のほうに大きなメリットがあるだろうか?
0412nobodyさん
2007/07/12(木) 21:31:24ID:???revisionテーブルだけの修正ですむ。
(後者だと、pageテーブルとhistoryテーブルの二箇所を変更しないといけない)
後者のメリットとして、pageテーブルにはよく見るであろう最新データのみが
入っているため、履歴も含めてすべて同じテーブルに入っている前者よりも負荷が少なそう。
0413nobodyさん
2007/07/12(木) 23:37:35ID:???0414nobodyさん
2007/07/13(金) 10:06:11ID:???"Create an interactive production wiki using PHP"
http://www-128.ibm.com/developerworks/views/opensource/libraryview.jsp?search_by=production+Wiki+PHP
Wiki作成しながらCakePHP語るのもいいかもね。
0415nobodyさん
2007/07/13(金) 17:50:45ID:j8+9kyhU0416nobodyさん
2007/07/17(火) 11:51:36ID:c9LkXXMo0417nobodyさん
2007/07/17(火) 12:09:35ID:???そのレベルの人は身近に教えてくれる人を見つけることが先決。
それが無理なら「cakePHP 真っ白」とかでひたすらググろう。
0418nobodyさん
2007/07/17(火) 12:10:12ID:HxVHyr/E0419nobodyさん
2007/07/17(火) 12:33:26ID:???0420nobodyさん
2007/07/17(火) 14:55:40ID:???0421nobodyさん
2007/07/17(火) 15:58:57ID:???この中で使ってるPHPエディタのフォントを教えてください
0423nobodyさん
2007/07/17(火) 16:35:22ID:HxVHyr/EOSとエディタだよ
0424nobodyさん
2007/07/17(火) 17:04:38ID:???0425nobodyさん
2007/07/17(火) 17:34:38ID:???0426nobodyさん
2007/07/17(火) 17:53:03ID:???0427nobodyさん
2007/07/17(火) 18:58:20ID:???あるディレクトリ以下をcakephpに処理を任せることは可能?
0430nobodyさん
2007/07/17(火) 20:34:39ID:???最寄り駅まで徒歩2分
0431nobodyさん
2007/07/17(火) 22:16:46ID:???あと昼飯については、レシートだけで領収書代わりにしてくれる。
0432nobodyさん
2007/07/17(火) 23:44:04ID:???誰かうまくいったやついる?
0434432
2007/07/18(水) 10:34:40ID:XEakOCt8マウスとキーボードはhpのやつです。
0435nobodyさん
2007/07/18(水) 10:54:14ID:???0436nobodyさん
2007/07/18(水) 12:18:59ID:???0438nobodyさん
2007/07/18(水) 12:30:40ID:???0439nobodyさん
2007/07/18(水) 15:44:55ID:???0440nobodyさん
2007/07/18(水) 16:24:22ID:???http://techno.hippy.jp/rorwiki/?Wiki%A4%F2%BA%EE%A4%C3%A4%C6%A4%DF%A4%EB
ここに履歴保存とか、それをつかった衝突検知とか差分検出とかについてかいてあって参考になる。
railsだけど
0441nobodyさん
2007/07/18(水) 17:50:44ID:???0442nobodyさん
2007/07/18(水) 23:22:49ID:???画面が真っ白になるのは、基本的にインクルードファイルの文法ミスが原因
ローカル環境にPHPをインストールして、文法チェックに対応したエディタを使うといいよ。
0443nobodyさん
2007/07/19(木) 22:47:07ID:???いますよー。定期的に見てます。
リンク先よく読んで見ます。
でも、実は衝突検知とか差分検出とかは
あまり重要じゃなかったり。
というのも、作ろうとしているのは一人WIKIだから。
(しかもWIKI記法じゃないのでWIKIですらない?)
0444nobodyさん
2007/07/19(木) 23:00:14ID:???■ このスレッドは過去ログ倉庫に格納されています