- 1 名前:nobodyさん [2005/08/03(水) 21:00:39 ID:TuHx69hT]
- 国産フレームワーク、Ethnaでいい意味で手抜きなプログラミングライフを。
Ethna -PHPウェブアプリケーションフレームワーク- ethna.jp/ SourceForge.jp: Project Info - Ethna sourceforge.jp/projects/ethna/
- 477 名前:nobodyさん mailto:sage [2006/09/05(火) 21:37:08 ID:???]
- Ethna_Plugin_Logwriter_File.php に手を入れたいのですが、
例えばEthna_Plugin_Logwriter_Fileを継承して 自分で書いたコードでオーバーライドしたとして そのclassをどういう手続きを踏めば、 使えるようになるのか、だれか教えてちょうだい。
- 478 名前:nobodyさん mailto:sage [2006/09/06(水) 07:57:33 ID:???]
- そのクラスのオブジェクトを生成すれば使えるようになるわけだが。
- 479 名前:477 mailto:sage [2006/09/06(水) 14:57:37 ID:???]
- おっしゃる通りなのですが、、、
元のLoggerって生成することなど意識せずとも使えます。 自作のものも生成することなく元のLoggerと置き換わるような 形で使いたいのです。 Controllerの $class_default['logger']を自作のものに書き換えればよいのでしょうか?
- 480 名前:nobodyさん mailto:sage [2006/09/06(水) 16:21:52 ID:???]
- Controllerの$class
- 481 名前:477 mailto:sage [2006/09/06(水) 16:38:38 ID:???]
- Controllerの$class
コメントのTODOにずばり書いてあった。。。OTL
- 482 名前:nobodyさん mailto:sage [2006/09/06(水) 20:20:01 ID:???]
- PHP5.0のEthnaの2.1.2ですけど、AppObjectでgetしたあとremoveすると
$conditionがNULLでWHERE IS NULLとかいうSQLになっちゃう...。 $key, $key_type付きでwhere付きのgetはできるのに、getせずにインスタンスしたそのままでremoveしてもかわらず... 皆さんはちゃんとうごいてます?
- 483 名前:nobodyさん mailto:sage [2006/09/07(木) 00:23:32 ID:???]
- >>482
なんかよくわからないけど、いままで変な挙動したこと無いから何か間違ってると思う。 AppObjectでgetしたっていうのがよくわからない。 AppManagerでgetObjectPropとかgetObjectListとかじゃなくて? AppObjectでgetするのは、AppObjectのpropだけだよね。 新しく作りたいならnewだし。
- 484 名前:482 mailto:sage [2006/09/07(木) 16:25:20 ID:???]
- わかりづらかったですね、ご迷惑おかけしまいた...
$key_type = array('userid', 'config'); $key = array($userid, $config); $config1 =& new Test_Config1($this->backend, $key, $key_type); $data['config'] = $config->get('config'); //$data処理 $config2_values = array( 'userid' => $config->get('userid'), 'config' => $data['config'], ); $config2 = new Test_Config2($this->backend, NULL, NULL, $config2_values); $config2->add(); $config1->remove(); とすると クエリエラー SQL[DELETE FROM config1_tbl WHERE IS NULL] のエラーで返されます
- 485 名前:483 mailto:sage [2006/09/07(木) 19:29:19 ID:???]
- これだと、オブジェクトを2個作らないで$config1->update();の方がいいと思うけど、
まぁそれはおいといて。 $config2->add(); するなら、 $config2 = new Test_Config(&$this->backend); $config2->set('userid', $user_id); $config2->set('config', $data['config']); $config2->add(); する方が良い。なぜなら、AppObjectをnewするときの第4引数は 全てのプロパティをセットする必要があるからな。2つのプロパティじゃなければ面倒でしょ? あと、$config1->remove();でWHERE IS NULLは、Test_Config1の primary_keyがAppObjectでちゃんと設定されて無いと思われる。 もう一度、appobjectのMappingをチェックするのが吉と、
- 486 名前:nobodyさん mailto:sage [2006/09/07(木) 22:55:15 ID:???]
- $config1 = new
してるのに何故 $config->get() typo?
- 487 名前:nobodyさん mailto:sage [2006/09/08(金) 10:48:28 ID:???]
- トランザクションや複数テーブルを使用するときなどに
どうしても生SQLを発行する場面があると思うのですが、 AppObjectを使ったりSQLを書いたりするコードが混ざっていると 気持ち悪い(というか不適切なコード?)な気がします。 実際にEthnaを使っている方はどうされているんでしょうか?
- 488 名前:nobodyさん mailto:sage [2006/09/09(土) 00:40:11 ID:???]
- >>487
俺の場合、どうしても生SQLのときは、ManagerにSQL発行メソッドを作るかな
- 489 名前:nobodyさん mailto:sage [2006/09/09(土) 18:41:06 ID:???]
- controllerにsmartyのプラグインを登録できるのはわかってるけど、
どこに記述したいいのか、どこにファイルを置けばいいんでしょう? どこに書いても、libやappにおいてもだめだし 携帯向けにsjisのページが作りたいとおもったけど開発ページにはoutputをどこにおいたらいいの書いてない...
- 490 名前:nobodyさん mailto:sage [2006/09/10(日) 08:05:27 ID:???]
- >>489
もちろん、ここはチェックしたよな www.ethna.jp/ethna-document-dev_guide-app-sjis.html
- 491 名前:nobodyさん mailto:sage [2006/09/10(日) 19:35:53 ID:???]
- まことにすいませんが、事故解決しました、お手数おかけしました。
原因はIncludeパスがずれてたみたいです。 そこはみたんですけど、そのfunctionはどこに書いてどこにおいたらいいのかわからなくて。
- 492 名前:nobodyさん mailto:sage [2006/09/15(金) 01:32:45 ID:???]
- そろそろ2.3.0 preview3出てほしいなぁ。
ロードマップでは未到達かもしれないけど、コンスタントに リリースしてくれたほうが嬉しい。というか、はやく2.1.2から 乗り換えたいので頼んます。。。
- 493 名前:nobodyさん mailto:sage [2006/09/19(火) 08:05:38 ID:???]
- mixi の雑談でpreview3は、9月末でるかも、らしい
- 494 名前:nobody [2006/09/19(火) 15:05:49 ID:l653wI+U]
- Ethna + Ajax のサンプル動作させ方がわかりません。
以下のサンプル通りにスクリプトを書いて動作させたけど、 json.tplがないよと怒られます。 流れとして、actionのFlare_Action_IndexCheckからviewのFlare_View_Jsonまでは、 分るけど、この先どこの.tplに、いくの? labs.gree.jp/Top/Document/20060707.html ヒント頂戴。
- 495 名前:nobodyさん mailto:sage [2006/09/19(火) 17:21:16 ID:???]
- Ethnaで出力結果を(html形式のファイルに)書き出す為の
専用のmethodはないのでしょうか? Ethna_RendarerのgetEngineとかいうのを使ってfetchするしかないのでしょうか?
- 496 名前:nobodyさん mailto:sage [2006/09/19(火) 22:32:04 ID:???]
- ethna.jp/ethna-document-tutorial-practice3.htmlで
tp://some.host/~foo/?action_login=trueというようにアクセスしてる場面を見受けるけどこれを tp://some.host/~foo/loginみたいな形式に変えることは出来ないんかなぁ?
- 497 名前:nobodyさん [2006/09/19(火) 22:37:17 ID:R6sen3Jl]
- >>495
そのメソッドは無いね。 フィルタ使ってob_で拾うとか、いろいろ手段はあるけど。 >>496 mod_rewrite使えば可能。
- 498 名前:nobodyさん mailto:sage [2006/09/19(火) 23:22:06 ID:???]
- >>496
Ethna_Controller.php の ChangeLog にこんなのがある。 > Ethna_UrlHandlerクラスを追加(ステキurl対応) これに期待する。
- 499 名前:nobodyさん [2006/09/19(火) 23:27:54 ID:gBF89jCS]
- エラーのハンドリングについて、指定したテンプレートが見つからない
場合と、データベースに接続できなかった場合のエラー処理って どこで行えばいいのでしょうか? どちらもフレームワークに任せてしまっている部分の処理なので いまいち解りません…orz 環境はPHP 5.1.6 + Ethna 2.3.0-dev(CVS)です。
- 500 名前:nobodyさん mailto:sage [2006/09/19(火) 23:39:38 ID:???]
- >>494
試してないので恐縮ですが、json.tplを出力しようとしている ということは、Flare_View_Jsonクラスのforward()をオーバー ライドしていないのではないでしょうか?
- 501 名前:496 mailto:sage [2006/09/20(水) 00:53:00 ID:???]
- >>497
mod_rewriteを使えば確かに出来そうですね 何とかEthnaで頑張ってみたかったので wasuren.blog67.fc2.com/blog-entry-17.html を参考にしながらやってみたんですが どうもうまく動かない。・゚・(ノД`)・゚・。 ちなみに公式に書いてある ethna.jp/ethna-document-dev_guide-action-formname.html は問題なく出来ますた。(・∀・)
- 502 名前:nobodyさん [2006/09/20(水) 14:30:41 ID:Ni5iDH7a]
- デフォルトのテンプレートディレクトリをja以外にするにはどこに書くのが正しいですか?
- 503 名前:nobodyさん mailto:sage [2006/09/20(水) 14:55:50 ID:???]
- >>502
App_Controller::getTemplatedir
- 504 名前:nobodyさん mailto:sage [2006/09/20(水) 16:30:50 ID:???]
- >>494
間違えて、preforwardにコードを書いていません?
- 505 名前:nobodyさん mailto:sage [2006/09/20(水) 18:30:04 ID:???]
- >>503
ありがとうございまっす
- 506 名前:nobodyさん mailto:sage [2006/09/20(水) 22:54:15 ID:???]
- >>505
あんたopenPNEの人? その語尾がキモイ。
- 507 名前:nobodyさん mailto:sage [2006/09/20(水) 23:13:16 ID:???]
- >>506
すみませっん
- 508 名前:nobodyさん mailto:sage [2006/09/20(水) 23:29:08 ID:???]
- >>507
どういたしましって
- 509 名前:nobodyさん mailto:sage [2006/09/20(水) 23:55:52 ID:???]
- >>508
こっちらこそ
- 510 名前:nobodyさん [2006/09/21(木) 04:53:57 ID:uR4E3gkh]
- ありがとうございまつw
- 511 名前:sage [2006/09/21(木) 19:25:16 ID:amkCKdmG]
- >>500 >>504
ご指摘ありがとうございます! ご指摘どおりpreforward()をオーバライドしていました。 ですが、forward()に書き直して見ましたが、駄目でした。 メールアドレスにタイプしても、なにもエラーが表示されません。 onkeyup='alert("key Up");'なら動作するのでjavascript自体は問題なさそうです。 ためしに、Flare_View_Jsonのforward()でprint_r($json_object)と記述して、 送信ボタンをクリックすると意図したエラーが表示されるのですが、 上記を記述しないと、Web画面上は真っ白が表示されます。 ※/etc/flare-ini.php で 'debug' => 'true'としてます。 う〜〜ん、ヘルプ プリーズ。
- 512 名前:nobodyさん mailto:sage [2006/09/21(木) 22:02:04 ID:???]
- cli以外でスケルトン作成できんとですか?
phpeditor使いたいとです
- 513 名前:nobodyさん mailto:sage [2006/09/22(金) 00:20:14 ID:???]
- cliでのスケルトン作成に何か不満が?
まぁスケルトン参考にして、必要な物を自分で用意すればいいじゃないか
- 514 名前:nobodyさん mailto:sage [2006/09/22(金) 13:12:23 ID:???]
- フォーム画面->確認画面->処理
という流れのアクションが30個ほどあります。 確認処理が地味にうざいのですが、 確認画面の部分を30個分テンプレ用意する方法と、 確認画面の部分を変数に入れて1つのテンプレから動的に確認画面を表示 させる方法を思いつきました。 できれば後者で行こうと思いますが、 もっと良い方法やスマートな記述法があれば教えてください。 また、今回のような場合に使えるメソッドはないでしょうか?
- 515 名前:nobodyさん mailto:sage [2006/09/23(土) 13:04:01 ID:???]
- なんでEthnaのテンプレートディレクトリはtemplate/ja なの? ja
- 516 名前:nobodyさん mailto:sage [2006/09/23(土) 13:42:38 ID:???]
- ja がなければないで動くから、ja ディレクトリ消してる。
- 517 名前:nobodyさん mailto:sage [2006/09/23(土) 14:00:20 ID:???]
- どうしてjaってディレクトリを用意してあるのかが気になるんですが
- 518 名前:nobodyさん mailto:sage [2006/09/23(土) 14:34:34 ID:???]
- 全世界言語対応をにらんでる
- 519 名前:nobodyさん mailto:sage [2006/09/23(土) 17:47:51 ID:???]
- CVSリポジトリに久々にコミットがあったぽいね。
preview3を待ち望んでる身としては嬉しい限りだけど 9月末に出てくれるかな。。。
- 520 名前:nobodyさん mailto:sage [2006/09/23(土) 23:15:08 ID:???]
- 画面からフォーム値を取得するのに、わざわざActionFormの中に記述するのが面倒なんですが
なんとかならないんでしょうか?
- 521 名前:nobodyさん mailto:sage [2006/09/23(土) 23:22:39 ID:???]
- >>520
記述するのが面倒ならASP.NET+Visual Studio使ってみてはいかがでしょうか? 一考の価値はあるかと。 EthnaEditorってのもあるけど。
- 522 名前:nobodyさん mailto:sage [2006/09/24(日) 00:57:44 ID:???]
- ASPはちょっと・・・・
コピペでがんばります。ありがとう
- 523 名前:nobodyさん mailto:sage [2006/09/24(日) 01:10:47 ID:???]
- >>520
setFormVars()をオーバーライドするとか。 mod_rewriteでCoolURIにしてるんだけど、POSTだと$_POSTの内容しか 取得しないので、自分で追加してる。 $_REQUESTから全部取らないのってメモリ節約のため? それとも指定以外のフォーム値は受け取らないというセキュリティへの配慮? 意図しないフォーム値は使わないだけだから、とりあえず全部格納しても 問題なさそうだけど、理由があるなら教えて偉い人。
- 524 名前:nobodyさん mailto:sage [2006/09/24(日) 02:35:31 ID:???]
- session値をDBに格納したいんですが
>>290 よりスマートな方法ないでしょうか?
- 525 名前:nobodyさん mailto:sage [2006/09/24(日) 11:27:27 ID:???]
- preview3では是非、?action_(アクション名)=trueを/(アクション名)という形式でアクセスしたいもんだ
- 526 名前:nobodyさん mailto:sage [2006/09/24(日) 22:00:35 ID:???]
- >> 525
なんでそんなのを標準にしたいのかはわからんが、今でも _getActionName_Form()の上書きでできるし、 CVSではUrlHandlerも追加されてるぞ?
- 527 名前:nobodyさん mailto:sage [2006/09/25(月) 00:12:30 ID:???]
- >>525
その方法が標準になった場合って、サブミットボタンでアクションを振り分けるのって できなくなるよね?あったら教えてください。 perform() { if ($this->af->get('submit_action_a'){ ......... } else if ($this->af->get('submit_action_b'){ ......... } } とかは無しね。もしかして、それでアクションチェーンがどうたらとか 言ってる奴らがいるのかな?
- 528 名前:nobodyさん mailto:sage [2006/09/25(月) 10:54:53 ID:???]
- >>525
つmod_rewrite
- 529 名前:nobodyさん mailto:sage [2006/09/25(月) 15:06:44 ID:???]
- まあスマートルータは流行りだから
そのうちEthnaにも取り入れられると思うよ
- 530 名前:nobodyさん mailto:sage [2006/09/26(火) 21:09:48 ID:???]
- Ethnaのサンプルみたんですが、DBにアクセスするクラスは複数のActionから参照されるような
つくりをしていましたが、Action別にそれぞれ用意したほうが分かりやすくないですかね? みなさんはどうやってますか?
- 531 名前:nobodyさん mailto:sage [2006/09/26(火) 21:15:44 ID:???]
- >>530
そっちの方がありえないだろ
- 532 名前:nobodyさん mailto:sage [2006/09/26(火) 21:36:20 ID:???]
- >>531 どっちほうがありえない?
- 533 名前:nobodyさん mailto:sage [2006/09/27(水) 09:47:21 ID:???]
- Action別に作った場合に、単純に変更作業の時に
コードがばらけていて面倒とかはあると思いますよ。 オブジェクト指向の勉強とかするといいと思いますよ。 (語れる程詳しくは無いので、語らないですけどw)
- 534 名前:nobodyさん mailto:sage [2006/09/27(水) 13:42:42 ID:???]
- Ethnaはオブジェクト指向を勉強するきっかけとしてはなかなかいいかもしれないね。
- 535 名前:nobodyさん mailto:sage [2006/09/28(木) 08:14:17 ID:???]
- 逆に、複数のActionで同じ処理が使われている場合、変更があったときに
すべての使用されているActionを見直さないといけないっていう問題がでると思うんですよね。 こういうのって画面単位で分担作業するものだから、お互いに変更時に支障がないように 作るものなんじゃないかなぁ。
- 536 名前:nobodyさん mailto:sage [2006/09/28(木) 09:36:33 ID:???]
- 「想定していなかった新機能を追加」とかでもやらない限りそんな大きな仕様変更はやらんでしょ
それがどんな作りなのかは分からんけど、どうしても回避出来ないよっぽどの理由がない限り共用にしとくのが無難
- 537 名前:nobodyさん mailto:sage [2006/09/28(木) 22:07:34 ID:???]
- >>536
そうなのかぁ ということはいろんな処理に使えるようにSQLはなるべくシンプルな処理にしておくのが無難なのかな 複数Joinとかして、1つの画面に必要なデータをいっぺんにとってくることもできるけど、 ほかの画面では不要なものが多すぎて使えないってこともあると思うし。 なんか微妙だけど、共通化(オブジェクト指向ではない)しようと思います。 ありがとうございました。
- 538 名前:nobodyさん mailto:sage [2006/09/29(金) 01:56:32 ID:???]
- >>537
1年前の俺みたいだ。w あと半年ほど使いまくってEthnaで10個くらい同じことやれば 「あー、この辺共有か」とか分かると思う。 自分はもうEthna使わないでPHPって書いてないからな。
- 539 名前:nobodyさん mailto:sage [2006/09/30(土) 18:02:23 ID:???]
- 他は満足してるんだけども
Ethna_AppObjectの検索部分が使いづらくてたまらない $db->getall();//テーブル全レコード取得 $db->search($column_name,$value);//$column_nameが$valueのレコードを取得 俺の使い方だと、これだけで8割方、用が足りるんだが・・
- 540 名前:nobodyさん mailto:sage [2006/09/30(土) 23:20:58 ID:???]
- >>539
全部レコード取得 $this->appmanager->getObjectPropList('AppObjectClassName'); $valueのレコード $this->appmanager->getObjectPropList('AppObjectClassName', null, array($column_name) => new Ethna_SearchAppObject($value, OBJECT_CONDITION_EQ)); 後者をラップするメソッドをAppObjectの基底クラスに作ってやれば、そんな面倒じゃないと思うけど。
- 541 名前:nobodyさん mailto:sage [2006/10/01(日) 00:53:21 ID:???]
- ORMを作ろうとしたときinsert/update/delete は簡単にできるけど、
selectは様々なバリエーションがあってむずいな。 joinとかhavingとか、そのへんまでスマートにこなしてるORMってある? RORのActive Record が一番ですか?
- 542 名前:539 mailto:sage [2006/10/02(月) 14:09:24 ID:???]
- >>540
ありがとうございます 楽になりました
- 543 名前:nobodyさん mailto:sage [2006/10/02(月) 16:34:53 ID:???]
- 複数DBの使用法がよく分かりません、
www.ethna.jp/ethna-document-dev_guide-db.html 上の例だと、 $this->backend->getDB('r'); した場合、 勝手に iniファイルの 'dsn_r' => 'mysql://user:pass@unix+localhost/dbname', の設定を拾ってくるんでしょうか?? $this->backend->getDB('hoge'); なら 'dsn_hoge' => 'mysql://user:pass@unix+localhost/dbname', でしょうか?
- 544 名前:nobodyさん mailto:sage [2006/10/02(月) 17:38:21 ID:???]
- 試してから聞け
- 545 名前:nobodyさん mailto:sage [2006/10/03(火) 16:07:08 ID:???]
- >>544
上は試して動作したからハイOKという類の内容ではない気が。
- 546 名前:nobodyさん mailto:sage [2006/10/03(火) 23:18:59 ID:???]
- なんで?
全く違うDSN書けば違いがわかると思うんだけど。
- 547 名前:nobodyさん mailto:sage [2006/10/04(水) 11:00:18 ID:???]
- >>543
概ねあってるけど、Controllerの$dbにも書いておくべし
- 548 名前:nobodyさん mailto:sage [2006/10/05(木) 14:55:25 ID:???]
- DBでsessionしたいわけなんですが、
普通に自分で関数カキカキしてactionディレクトリあたりに 入れればつかえる??
- 549 名前:nobodyさん [2006/10/06(金) 10:09:32 ID:O2kp1NLj]
- ethnaの公式サイト見ると、
app/action 階層の下に system1_hoge.php system2_hoge.php と設置する場合の手順が書いてありますが、 system1/hoge.php system2/hoge.php という風にアクションファイル自体を system1 とsystem2 で設置ディレクトリを分けたいと考えています。 この場合のアクション定義などが非常にこんがらがってしまったのですが、 どなたか助言おながいします。
- 550 名前:nobodyさん mailto:sage [2006/10/06(金) 11:36:19 ID:???]
- Call to undefined function: getrow()
のエラーが出るんだけど、 PEARのDBクラス継承してるんですよね? ほわい?
- 551 名前:nobodyさん mailto:sage [2006/10/06(金) 12:07:20 ID:???]
- >>550
MLやフォーラムくらい嫁
- 552 名前:nobodyさん mailto:sage [2006/10/06(金) 12:35:34 ID:???]
- >>551
サンクス てか継承してないのかよ、表記修正してくれよ、 とおもいますた
- 553 名前:nobodyさん mailto:sage [2006/10/06(金) 13:47:06 ID:???]
- アクションクラスで
$this->af->setApp('hairetu', $hairetu); して tplで下のようにしてみたんですが、機能しません。 {section name=cnt loop=$app.hairetu} ほわい?
- 554 名前:nobodyさん [2006/10/06(金) 15:35:21 ID:Ky3gzt1x]
- 存在しないファイルをrequireしようとしたら
fatal Errorになったんですけど、こういう場合のエラー処理は ethna上でのエラー処理に組み込むことはできないんでしょうか?
- 555 名前:nobodyさん mailto:sage [2006/10/06(金) 18:01:45 ID:???]
- E_ERROR(FATAL)はエラーハンドラでも上書きできない
- 556 名前:nobodyさん mailto:sage [2006/10/06(金) 19:31:49 ID:???]
- 今更ながらEthna 2.3.0 Preview2リリースを入れてみたんだけど、
Ethna_ClassFactoryの変更部分で悩んでいます。 app/[project_id]_Controller.php の $class メンバに 'user' => 'Some_Foo_Bar', と付け足すのは良いとして、 $user =& $this->backend->getObject('user');はどこに記述するのでしょうか? Ethna_ActionFormでいちいち記述するのかな? マニュアル直ってないし・・・ ttp://ethna.jp/ethna-document-dev_guide-appobj-manager.html
- 557 名前:nobodyさん mailto:sage [2006/10/07(土) 01:27:47 ID:???]
- >>556
なんかねー、そのへん俺もよくわからんのだけど、とりあえず class Hogeproject_User extends Ethna_AppObject class Hogeproject_UserManager extends Ethna_AppManager って作ったら、そのファイルをControllerでincludeして $user =& $this->backend->getObject('User'); $user_manager =& $this->backend->getManager('User'); ってやってる。$classメンバには何も付け足してない。 なんつーか、以前より面倒になった気がするし。w
- 558 名前:nobodyさん mailto:sage [2006/10/07(土) 11:29:23 ID:???]
- >>557
それは面倒ですなw Ethna_Controllerの$classメンバに追加するのが標準的なやり方 見たいなのでもうちょっと簡易な方法があるといいのだけれど。 ウェブサイトには「(不評なら戻します@preview2)」って書いてあるけど MLでは話題にすらなってないし、このまま定着するのかな? とにかくサンプルかもうちょっと詳細なヘルプが欲しいです。
- 559 名前:nobodyさん mailto:sage [2006/10/07(土) 13:48:08 ID:???]
- 繰り返し部分を別ファイル(hoge.inc.php)にして require() して使いたいのですが、
どうすればいいでしょうか? require("絶対パス/hoge.inc.php"); しか思いつきませんでした。
- 560 名前:nobodyさん mailto:sage [2006/10/07(土) 15:26:26 ID:???]
- >>559
>>556-558の話がまさにそう。 最新版の話でなかったら、>>566のURLに詳しく載ってる。
- 561 名前:nobodyさん mailto:sage [2006/10/07(土) 18:33:16 ID:???]
- ClassFactoryからgetManager()するならContollerでのincludeも
$classへの追加も不要でしょ。 多少面倒な気もしてるけど、俺はActionClassで毎回 $hoge_manager =& $this->backend->class_factory->getManager('Hoge'); $hoge_manager->getHogeList(); とかやってる。もしかして間違ってる?
- 562 名前:557 mailto:sage [2006/10/08(日) 00:31:43 ID:???]
- >>561
いや、君が正解だと思う。 おいら、$this->backend->class_factoryプロパティを知らなかったよ。THX. しかし、Ethnaって「多少面倒な気も」というのにいまいち合致しないよね。イメージ的に。 というのは、$this-->appmanager->って、PHPの 「メソッドを追加できないくせにプロパティはE_NOTICEも吐かずにガンガン追加可能」 っていう特徴を活かしてるなって思ったから。その辺がEthnaの「絶妙に妥協」というのに 共感を覚えてたところでもあって。 というか、シングルトンでAppObject/AppManager/ActionClass/ViewClassで Managerオブジェクト(ActionFormオブジェクトもだけど)を持ち回ししてるところに 「すげー」って思ったのだ。最初。それが無くなったのは残念。 あと、PHP5なら $this->backend->getManager('Hoge')->hogeManagerMethod(); ができるよね。だから $this->gm('Hoge')->hogeManagerMethod(); くらいまで簡略化できるなら従来の $this->hoge->hogeManagerMethod(); と同等と思える。
- 563 名前:nobodyさん mailto:sage [2006/10/08(日) 13:29:42 ID:???]
- App_ActionClassのコンストラクタで
parent::Ethna_ActionClass($backend); $c =& $backend->getController(); $manager_list = $c->getManagerList(); foreach ($manager_list as $k => $v) { $this->$k =& $backend->getManager($v); } こうしてやれば、従来どおりなわけだが
- 564 名前:563 mailto:sage [2006/10/08(日) 13:34:23 ID:???]
- www.itt-web.net/modules/bwiki/index.php?Ethna2.3%A4%C7AppManager%A4%CE%A5%D5%A5%A9%A5%ED%A1%BC
こことか参考にしてみたらいいと思う。
- 565 名前:nobodyさん mailto:sage [2006/10/09(月) 10:51:17 ID:???]
- フォーム値の検証とフィルタについてなんですが、
フィルタをフォーム値検証の前に実施する方法は無いでしょうか? ある変数を半角英数字しか受け付けないように設定、 かつ全角で受け付けたときには自動的に半角にするようフィルタを設定 しているのですが、 全角で入力してしまうと、validate()が0にならないためです。
- 566 名前:nobodyさん mailto:sage [2006/10/09(月) 13:02:01 ID:???]
- 実際のところ、クラスのメンバ変数として何が定義されているかわからないのに
Controllerの$managerに追加された名前で$this->hogeとアクセスできてしまうのは 問題ありまくりだし、気持ち悪かった。 AppManagerの呼び出し方にワンクッション追加されただけだから、個人的にはそこまで 面倒は感じてないし、記述が長いならメソッドひとつ仲介させれば済む話だと思う。 562氏の言うとおり、ActionFormやAppManagerがAction/Viewを問わずリクエスト内で 自由に使えるのは他のフレームワーク(symfonyとかZend Frameworkとか)には無い考え方で 自分がEthnaを気に入った理由のひとつだけど、そのメリットは無くなってないんじゃないかな?
- 567 名前:nobodyさん [2006/10/09(月) 18:37:23 ID:NhVn4oaT]
- 毎回全てのAppManagerを読み込む従来どおりより新方式のほうがいいなー。
- 568 名前:562 mailto:sage [2006/10/09(月) 19:52:52 ID:???]
- >>566
>問題ありまくりだし、気持ち悪かった。 実際に問題と言うと ・DB接続しなけりゃ使えない ・Manager全てnewしてるから(シングルトン使ってるとはいえ)重い くらいかな?他に何かある?Managerって作ってもせいぜい20くらいだったから 重いとは思わなかったけど。 キモイのは確かに気持ち悪かったけど、「PHPだしいいじゃん」という気にもさせてくれる。 その辺が「絶妙に妥協」なのかなと。 で、気持ち悪さを払拭しようとすると、Action/View/AppManager/AppObjectそれぞれを ラップしたクラスでoverloadを使って、プロパティへのアクセス方法を定義してやれば ちょっとは気持ち悪くなくなると思う・・・。 jp2.php.net/overload 自分的には「前のが便利、だけど(きっとメリット色々ありそうだから)新方式に従います」 って感じ。
- 569 名前:566 mailto:sage [2006/10/09(月) 20:38:58 ID:???]
- んーと、ActionClassのコンストラクタとかでチェックもせずに
上書きしてるから、メンバ変数が破壊されるってことです。 既存のもので言うと、試しにControllerの$managerに $manager = array( 'af' = > 'AirFrance' ); とか入れてみるとActionFormが使えなくなるのが解ると思う。 ($this->af はActionForm じゃなくて AirFrance になったからね) $managerに設定する値についての注意事項も書いていないし、使う側が 注意していればいい、というには危険な仕様じゃないかな。
- 570 名前:562 mailto:sage [2006/10/09(月) 21:02:06 ID:???]
- >>569
>んーと、ActionClassのコンストラクタとかでチェックもせずに >上書きしてるから、メンバ変数が破壊されるってことです。 あぁ、なるほど。すっごい盲点でした。 managerが増えすぎていった場合、ハマりポイントになりそうですね。
- 571 名前:nobodyさん mailto:sage [2006/10/10(火) 07:39:28 ID:???]
- PHPだし。
厳格なのがよければにしとけば。
- 572 名前:nobodyさん mailto:sage [2006/10/10(火) 07:40:00 ID:???]
- 抜けた。
Javaにしとけば。
- 573 名前:nobodyさん mailto:sage [2006/10/12(木) 12:29:20 ID:???]
- ttp://ethna.jp/pipermail/users/2006-June/000380.html
これと同じエラー(mysql_close)起きてるんですが、 ethna本体とか弄らないと厳しいんでしょうか・・・・ 他に解決方法きぼんぬ
- 574 名前:nobodyさん mailto:sage [2006/10/12(木) 17:17:50 ID:???]
- 本体を自分でいじりたくないなら、2.3.0pr1以降か、CVS版をつっこむくらいしか。
あとは、継承してそこにパッチを当てておけば、後ほどバージョンアップしても気にならずに済むかも。 stableの保守も考えてほしいよね。
- 575 名前:nobodyさん mailto:sage [2006/10/16(月) 16:19:02 ID:???]
- 関数ぱっと作ってperform()内で使いたい場合、
function kansuu()をperform()内に書いて $this->kansuu で呼び出すだけでOK?
- 576 名前:nobodyさん mailto:sage [2006/10/16(月) 20:51:20 ID:???]
- >>575
素で言ってるならPHPのマニュアル100回読み直してこい
- 577 名前:nobodyさん mailto:sage [2006/10/16(月) 22:29:35 ID:???]
- PHPっつーか、オブジェクト指向の本読んだほうがいいね。
|

|