1 名前:nobodyさん [2005/08/03(水) 21:00:39 ID:TuHx69hT] 国産フレームワーク、Ethnaでいい意味で手抜きなプログラミングライフを。 Ethna -PHPウェブアプリケーションフレームワーク- ethna.jp/ SourceForge.jp: Project Info - Ethna sourceforge.jp/projects/ethna/
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っつーか、オブジェクト指向の本読んだほうがいいね。
578 名前:nobodyさん mailto:sage [2006/10/17(火) 13:52:04 ID:???] ethna から pear 使用するためにはどうすればよかとでしょうか。
579 名前:nobodyさん mailto:sage [2006/10/17(火) 15:06:57 ID:???] >>578 作ったプロジェクトにあるlibフォルダに解凍する。
580 名前:578 mailto:sage [2006/10/20(金) 11:47:43 ID:???] >>579 サンクスです、申し訳ないついでに 呼び出しの方法もきぼんぬ
581 名前:nobodyさん mailto:sage [2006/10/20(金) 13:43:30 ID:???] >>580 579じゃないけど Controllerでincludeするのが一般的だと思う。 使うときは普通に使いたいところで使えばいい
582 名前:nobodyさん mailto:sage [2006/10/21(土) 09:57:55 ID:???] smartyフィルタってsmartyのプラグインディレクトリに置くんですよね? フィルタが見つからないって言われる…
583 名前:582 mailto:sage [2006/10/21(土) 11:27:38 ID:???] 自己レスです。 コントローラーで、requireしなきゃいけなかったんですね。 なんかめんどくさいような。
584 名前:nobodyさん mailto:sage [2006/10/21(土) 12:28:34 ID:???] >>581-583 まとめて間違いだ。
585 名前:nobodyさん mailto:sage [2006/10/21(土) 20:49:07 ID:???] >>584 >>582 は間違いだと思うが、他は何がおかしいの? 俺も同じようにしてるんだけど、何か違う方法でもあるの?
586 名前:nobodyさん [2006/10/22(日) 21:38:10 ID:bEm1HQtN] とあるページにGETとかで送られてきた値を、ActionFormのチェック機能で、 customで関数を作って値をチェックしたいとします。 で、それは送られてきた値がDBに該当のレコードがあるかどうかっていう感じ のことをしたいのですが、チェックするメソッド自体はManagerに実装してます。 それでActionFormクラス内にcheck_valueというメソッドを作り、そっからManager クラスを呼びたかったんですが、呼べませんでした。 公式サイトには、「上の3以外のクラスで使いたい場合は*2、Ethna_BackendのgetManager([manager_name])で取得できます。」 って記述があったんですが、ActionFormはbackendも持ってないみたいで取得できず…。 こういう使い方は想定してないんでしょうか? それとも俺のやり方がクソなんでしょうか。 まぁprepare関数内でやればいい話なんでしょうけど…。 せっかくなんでActionForm内でチェックしたいです。 何かいい方法あれば教えてください。
587 名前:nobodyさん mailto:sage [2006/10/22(日) 21:46:29 ID:???] >>585 _smartyプラグインは登録もしないとダメだよね。 _PEARってControllerで全部includeしないでしょ。使うところでincludeしてるだけで。
588 名前:nobodyさん mailto:sage [2006/10/22(日) 23:30:44 ID:???] >>586 backendじゃなくてcontrollerとれ
589 名前:nobodyさん mailto:sage [2006/10/23(月) 00:30:27 ID:???] smartyのプラグインは、コントローラの$directory['plugins']に任意のディレクトリを指定しておけば そこをsmartyの$plugins_dirに登録してくれるからそれでいいんでない?
590 名前:nobodyさん [2006/10/23(月) 12:53:41 ID:iU9TDYVm] >>588 すみません。どうやってとればいいんでしょうか? ActionFormクラスのコンストラクタは確かにcontroller持ってるみたいですが、 メンバ変数には入ってないぽいのでEthnaのソースいぢるしか方法思いつきません…。
591 名前:nobodyさん mailto:sage [2006/10/23(月) 13:41:47 ID:???] >>590 試してないけど、 $ccc =& Ethna_Controller::getInstance(); ではだめかな?
592 名前:nobodyさん mailto:sage [2006/10/23(月) 15:33:36 ID:???] >>587 >>585 の言いたいところはそこじゃないと思われ
593 名前:582 mailto:sage [2006/10/23(月) 15:53:14 ID:???] >>589 pluginディレクトリを指定するところがあったんですね。 見落としていました。勉強になります。 個人的には解決です。ありがとうございました。
594 名前:nobodyさん mailto:sage [2006/10/24(火) 14:00:42 ID:???] VIEWのpreforward内で、 アクションクラスで使った変数を取得するには どうすればいいんでしょうか? 作成中のソフトで データベースの status というフィールドを 1〜5 に割り当ててるんですが、 表示させるときには 1->普通 2->駄目 3->最悪 という感じで数字ではなく日本語で表示させたいと思ってます。 よくわからんのですが、 この1を普通と表示させるようなことは ビューでするというのが一般的なポリシーになるんでしょうか。
595 名前:nobodyさん mailto:sage [2006/10/24(火) 22:19:26 ID:???] どこまで汎用的にするかによると思うけど、viewかtemplateでいいんじゃね?
596 名前:nobodyさん mailto:sage [2006/10/25(水) 01:46:10 ID:???] >>594 基底のViewクラス作ってstatusを全部のViewで有効にするか(その場合Viewは省略しないこと) 全てのstatusを継ぎたいViewClassでextends ViewWhatStatusDefined して そのpreforwardメソッドでド頭に parent::preforwardを全部させておけ。
597 名前:nobodyさん [2006/10/25(水) 04:26:17 ID:QhoBwbI3] >>469 おれは、 /index.php?action_static=true&file=page1 /index.php?action_static=true&file=page2 /index.php?action_static=true&file=page3 ってな感じで、 function preform() { return $this->af->get('file'); } ってやってるよ。 # かなり古い記事に反応していまった自分が痛い(汗)
598 名前:nobodyさん mailto:sage [2006/10/25(水) 20:28:02 ID:???] 痛いね 473でほぼ同じの出てるし
599 名前:nobodyさん mailto:sage [2006/10/26(木) 23:33:48 ID:???] ウェブサイトの左側部分を動的なプルタウンメニューを置いてます。 右側がメニューで選択した内容を表示させる部分としてます。 この場合、左側部分はどのアクションでも常に同じ内容を表示しているわけで、 できれば include とかすると楽なんですが、 ethnaでincludeのが適切なのか良く分かりません。 (actionクラスでincludeかつtplでinclude??) またincludeする場合も相対パスでどうやって記述すればいいのか、 が分かりません。 (よく本体は設置場所を動かすので、影響を受けないように相対パスで 指定したいと考えています。) 助言おながいします
600 名前:nobodyさん mailto:sage [2006/10/27(金) 01:36:41 ID:???] >>599 www.itt-web.net/modules/bwiki/index.php の 「テンプレートからEthnaのActionを起動」 とかどう?
601 名前:599 mailto:sage [2006/10/27(金) 13:23:57 ID:???] >>600 レスサンクスです 「SmartyPluginに下記の関数を用意」のところなんですが、 直接smarty自体を弄る必要が出ますよね? ここなんとかならんでしょうか?
602 名前:599 mailto:sage [2006/10/27(金) 13:38:43 ID:???] ×直接smarty自体 ○直接ethna自体 でした 極力ethna本体は弄りたくないと考えています
603 名前:nobodyさん mailto:sage [2006/10/27(金) 22:43:10 ID:???] >>599 俺はapp以下にAPPID_SmartyPlugins.phpを作って、Controllerでincludeしてるけど。
604 名前:599 mailto:sage [2006/10/28(土) 12:37:29 ID:???] >>600 >>603 おかげさまで上手くひとまずは上手く行ったのですが なぜかメインアクションのテンプレから 別のアクションをincludeすると、ループが発生します。 別のアクションというのは単にテンプレを表示させるだけの 非常に簡単なものです。 またそのアクション単体での動作も確認できました。 メインアクションもインクルードをしない場合の動作は確認できました。 しかしなぜかメインアクションのテンプレから include すると ループが発生してしまいます。 どなたかヘルプみー
605 名前:nobodyさん [2006/10/28(土) 17:56:31 ID:FIh0kQ4t] ちょっと行き詰ったので、お知恵を拝借させてください。 複数のAppManagerでの処理にまたがるトランザクションの方法について 悩んでいます。 たとえばポイント制の物販(?)のようなものがあるとして、顧客情報と 購入情報のAppManagerを用意しました。購入処理を行った場合、顧客 情報からはポイント減算処理、購入情報には履歴を書き込みます。 単位の処理だと、 $user_m->userPoint( 30 ); // 30ptを消費 $sales_m->addHistory( ... ); // 購入履歴を追加 のように実装できますが、これらは同じトランザクション内で処理される 必要があります。 一方のManagerから他方のManagerを呼び出して処理をまとめてしまうことも 可能ですが、Managerの独立性が保たれないのでそれは気持ち悪いです。 これらのManagerを管理する別のManagerを作成して、そこでトランザクションを 制御するというのも考えましたが、機能ごとに分離すると数ばかり多くなって 収拾がつかなくなってしまいました。(かといって統合すると用途がごちゃごちゃの Managerができてしまう罠…) 続きます↓
606 名前:605 mailto:sage [2006/10/28(土) 17:57:43 ID:???] (続きです↓) 呼び出しているのはActionClass/ViewClassなので、そちら側でトランザクションを 制御することも考えましたが、はたして考え方が正しいのか自信がありません。 Ethna_ActionClassを継承したHoge_ActionClassに function beginTransaction() { $db =& $this->backend->getDB(); $db->begin(); } とか書いて、実際の処理の中で function perform() { ... // 購入処理 $this->beginTransaction(); $result = true; $result |= $user_m->userPoint( 30 ); $result |= $sales_m->addHistory( ... ); if ($result) { $this->commitTransaction(); } else { $this->rollbackTransaction(); } ... } のように実装したらどうだろうかということです。ActionClassからbackendのデータベース オブジェクトを直接弄ることに若干抵抗があるので、いまいち踏み切れません。 こんな場合、皆さんならどのように実装しますでしょうか。あるいは既に実装している例など ありましたら大変参考になります。宜しくお願いします。
607 名前:nobodyさん mailto:sage [2006/10/28(土) 19:42:09 ID:???] Action で指定したビュー名と同じ名前のテンプレートがなければ 実行できないんでしょうか? ビュー名と違うテンプレートを動かそうとしてみたんですが、よくわかりません。 どなたかやったことありませんか?
608 名前:nobodyさん mailto:sage [2006/10/28(土) 23:31:34 ID:???] >>607 ビューを省略したら同じ名前のテンプレートが使われる。 省略しなければ、違うテンプレートを指定できる。
609 名前:nobodyさん mailto:sage [2006/10/28(土) 23:34:15 ID:???] >>607 Movajiなんかの考え方だとそうしたくなるけど、Ethnaでは 原則としてビューとテンプレートは一対一。 どうしてもやりたいなら、ViewClassのpreforward()あたりで $this->forward_pathを書き換えるとかで対応できるだろうけど お勧めはしない。
610 名前:607 mailto:sage [2006/10/29(日) 00:07:17 ID:???] ビューとテンプレートは1対1だったんですか。 ちょっと不便ですが、テンプレートの中でテンプレートを呼んで対応しようと思います。 ありがとうございました。
611 名前:599 mailto:sage [2006/10/29(日) 09:02:16 ID:???] どなたかヘルプミー ttp://www.itt-web.net/modules/bwiki/index.php 最初はアクションの内容で何かミスっていると思ったのですが、 どうやら上記ページに書いてあること自体がうまく行っていないようです。 空アクション(テンプレを表示させるだけのデフォルト状態)の テンプレから別の空アクション読み込んでもループが発生します。
612 名前:nobodyさん mailto:sage [2006/10/29(日) 11:56:22 ID:???] >>611 メインの処理実行中に同じControllerでtrigger()なんてやったら、Controllerで 管理している諸々のオブジェクトが上書き(破壊といってもいい)されるから、動作が おかしくなっても不思議じゃないと思うけど…。 表示のときに呼ばれるから他の処理は終わっているので大丈夫という考えは 強引というか激しく危険。まあ、いずれにしてもグローバル変数にController オブジェクトが置かれている以上、1リクエスト内で複数のControllerを走らせる ことも正しく動く保証がないので、こういったアプローチはEthnaでは難しいと思われ。 # 間違ってたら、ツッコミよろ おとなしく親のVewClassにメソッドでも用意して、必要に応じて子から呼び出すような 感じで実装するのが吉かと。
613 名前:nobodyさん mailto:sage [2006/10/29(日) 20:17:22 ID:???] ControllerをgetInstanceじゃなくてnewすれば何とかなるかもしれない。 あとはiframeとか。
614 名前:nobodyさん mailto:sage [2006/10/30(月) 13:05:37 ID:???] >>605 別にManagerからManagerを呼び出しても良いのではないですか? トランザクションを意識するのはManagerのサービスとしての 窓口(Actionから呼ばれる部分)だけで、その内部では必要に応じて 各Managerが呼び合う。 窓口の最後でそれらの結果を見てCommit/Rollbackする、みたいな。 逆に、Actionからトランザクション制御はしない方が良い気が・・。
615 名前:599 mailto:sage [2006/10/30(月) 16:51:11 ID:???] >>612 ガガーーン!! 言われてみれば納得です。 これを想定して全て作っていたので、激しく鬱です。 レスありがとうございました。
616 名前:nobodyさん mailto:sage [2006/10/30(月) 19:04:13 ID:???] そのページ、古くない?今のソース ethna.jp/doc//__filesource/fsource_Ethna__classEthna_Controller.php.html#a739 見るとtriggerの引数が違うよね。
617 名前:nobodyさん mailto:sage [2006/11/02(木) 10:43:39 ID:???] 読み込んだ現在のアクション値を得るにはどうすればいいでしょうか? 「?act=アクション名」をトリガーにしているので、 これを使うのもいいカナと思ったんですが、 actionformで毎度指定する必要があるのがしんどいです
618 名前:nobodyさん mailto:sage [2006/11/02(木) 12:39:06 ID:???] $this->session->set('hoge', 'ほげ'); で設定するのと $_SESSION['hoge'] = 'ほげ'; で設定するのってどう違うのでしょうか? $this->session->set('hoge', 'ほげ');したやつを echo $_SESSION['hoge']したら読めてしまうのですが・・・。
619 名前:nobodyさん mailto:sage [2006/11/02(木) 20:58:53 ID:???] >>617 Controllerに$action_nameって入ってるね これ直接使うのはちょっと抵抗あるな でもriafさんも使ってるから、アリなのかも riaf.org/svn/junkbb/trunk/app/Junkbb_ViewClass.php
620 名前:nobodyさん mailto:sage [2006/11/02(木) 22:42:53 ID:???] getCurrentActionName()
621 名前:nobodyさん mailto:sage [2006/11/02(木) 22:46:27 ID:???] >>618 そこだけ見るなら同じ。 startとかが少しお得。
622 名前:nobodyさん mailto:sage [2006/11/03(金) 11:29:06 ID:???] ethna.jp/ethna-document-dev_guide-misc-pager.html ここを見てページャは上手くいったんですが、 ページ数($page.indexの表示数)をどのように設定するかが分かりません。 $this->total = 1000; $this->count = 5; とした場合、 ページ数は10個分表示されます。 これを5個に変えたい場合はどこを変えればいいんでしょうか? テンプレソース、アクション側ソース、 ともに見たんですが、判断できませんでした。
623 名前:nobodyさん mailto:sage [2006/11/03(金) 16:18:19 ID:???] >>622 Ethna_Util::getDirectLinkList()内で、10と決め打ちされてるので、smarty側でcountしてやるか、Ethna本体に手を入れるか、getDirectLinkListをオーバーライドするしかないかな
624 名前:nobodyさん mailto:sage [2006/11/03(金) 16:33:03 ID:???] Ethna_Util::getDirectLinkList()の中で直値でかかれてるっぽい。 Ethna_Utilを書き換えるか、同じ機能を自前で実装するか、コミッタさんに メールしていい感じに直してもらうかかなw あと、このドキュメントではActionClassでページャの処理を行っているけど、 本来こういう処理はViewClassでやるべきだね。
625 名前:624 mailto:sage [2006/11/03(金) 16:33:50 ID:???] う、リロードしないで書いたら被った…orz
626 名前:nobodyさん mailto:sage [2006/11/08(水) 17:33:14 ID:???] CVS版で、AppObjectを使って、 $where =& new Ethna_AppSearchObject(1, '='); $filter = array('hoge_id' => $where,); $example =& appID_Example($this->backend); $result = $example->searchProp(null, $filter, null, 0, null); こんなふうに検索したんですが、生成されるSQLの検索条件が、 'hoge_id' != '1' になってしまいます。 どこか使い方間違っているんでしょうか…
627 名前:nobodyさん mailto:sage [2006/11/08(水) 19:38:51 ID:???] $example =& appID_Example($this->backend); は $example =& new appID_Example($this->backend); だよね。 $where =& new Ethna_AppSearchObject(1, '='); は $where =& new Ethna_AppSearchObject(1, OBJECT_CONDITION_EQ);
628 名前:626 mailto:sage [2006/11/09(木) 00:28:07 ID:???] >> 627 きちんと動きました! 参考にしたサイトの記事が古かったようです。 ソース読んでみて、定数が使われているなぁとは思っていたんですが、食い違いに混乱していました。 ありがとうございました。
629 名前:nobodyさん mailto:sage [2006/11/17(金) 16:31:00 ID:???] Ethna 2.3.0 Preview2がインストールできません。 環境は、FreeBSD6.1-RELEASE、PHP5.2.0、Ethna2.3.0 beta か preview1 だと思います。 # ethna -v Ethna 2.3.0-dev # pear list-channels で、 Registered Channels: ==================== Channel Summary pear.ethna.jp Ethna PEAR Channel pear.php.net PHP Extension and Application Repository pecl.php.net PHP Extension Community Library __uri Pseudo-channel for static packages の状態で、 # pear upgrade ethna.jp/pear/Ethna-2.3.0-preview2.tgz を実行したのですが、 downloading Ethna-2.3.0-preview2.tgz ... Starting to download Ethna-2.3.0-preview2.tgz (120,756 bytes) ..........................done: 120,756 bytes ERROR: pear.php.net/Ethna: conflicting files found: Ethna/bin/ethna_handle.php (pear.ethna.jp/ethna) : : というエラーでアップデートに失敗します。 手順がおかしいでしょうか?何かヒントをいただければと思います。
630 名前:nobodyさん mailto:sage [2006/11/17(金) 19:57:14 ID:???] Ethna本体をいじっていないならuninstallしてからinstallすれば?
631 名前:629 mailto:sage [2006/11/17(金) 20:33:17 ID:???] >>630 アンインストールしても同じエラーでした。 展開して適当なところに置けばよいはずだと思いファイルを手動で消して 展開したところ、こんどは ethna コマンドで、 # ethna -v Could not open input file: @PEAR-DIR@/Ethna/bin/ethna_handle.php 置き換えた ethna コマンドをみると確かに、 ETHNA_HOME="@PEAR-DIR@/Ethna" となっていたので、@PEAR-DIR@ を FreeBSD の /usr/local/share/pear/ に 書き換えたところ、無事アップグレードできたみたいです。 上記の箇所は pear install したときに書き換えられるんですかね? とにかく何とか解決しました。 お騒がせしました。
632 名前:nobodyさん mailto:sage [2006/11/20(月) 11:17:31 ID:???] 下記のページを参考にSmartyにクラスメソッドを追加しようとしています。 PHP 5.2.0/Ethna 2.3.0 preview 2 参考:いつもながら初心者には簡素すぎるマニュアル・・orz ttp://ethna.jp/ethna-document-dev_guide-misc-smarty_register_function.html これは、 class foo { function bar($vl) { return number_format($vl); } } というfoo.phpを用意して、 {ProjectID}_Contlor.phpの$smarty_prefilter_pluginに array('foo', 'bar'), を追加してやればhoge.tplにおいて{$app.hage|bar}のように使えるという理解で あってますか?その場合、foo.phpはどこに置くのでしょうか? appディレクトリやSmartyのpluginsディレクトリにおいても動作しませんでした。 error messageは以下のとおりです。 Fatal error: Smarty error: [in index.tpl line 22]: [plugin] modifier 'bar' is not implemented (core.load_plugins.php, line 118) in /usr/local/lib/php/Smarty/Smarty.class.php on line 1095 Fatal error: Call to undefined function smarty_modifier_bar() in ・・・
633 名前:nobodyさん mailto:sage [2006/11/20(月) 21:38:33 ID:???] どこに置いてもいいけど、Contorollerでinclude_onceすればおけ 汎用性があるならlib/の下とかでもいいのでわ?
634 名前:nobodyさん mailto:sage [2006/11/21(火) 00:42:33 ID:???] >>633 どうもです。 >>632 を投稿した後にすぐ気がついて、include_onceしたのですが エラーは変わりませんでした。 あ、ひょっとしてpreview 2には含まれてなくて、cvs版のみで有効な 機能だったりしますか? 明日試してみます>cvs版
635 名前:nobodyさん [2006/11/21(火) 00:44:53 ID:l75La6qC] App以下にProject_HogeClass.php というクラスファイルを置いてます。 このクラスファイルの中でActionClass内で使用している 変数などを取得するためには引数として渡す以外にどんな方法があるでしょうか? たとえば、ActionClassで $this->session->set("hoge", "ほげ") としている場合、 Project_HogeClass.php で hogeセッション値である「ほげ」を 取得するためにはどうすればいいでしょうか? $ethna->session->get('hoge') では間違ってるでしょうか? (ちなみにこれではうまく行きませんでした)
636 名前:nobodyさん mailto:sage [2006/11/21(火) 01:13:01 ID:???] >>635 そういうことしようと思ったことないから想像だけど、 $this->session->set('hage', 'hoge'); って登録したんなら、それを取り出すのは、 $this->session->get('hage'); なんじゃないの? どこから$ethnaは出てきたの?
637 名前:nobodyさん mailto:sage [2006/11/21(火) 02:06:11 ID:???] >>634 preview2でも使えると思いますよ。 えと、class foo {} じゃなくて functionだけ書いておくのです。
638 名前:nobodyさん mailto:sage [2006/11/21(火) 02:52:20 ID:???] >>635 あんまし美しくないかもだけど、こんな感じかな? $c =& Project_Controller::getInstance(); $b =& $c->getBackend(); $b->session->get('hoge'); 個人的にはHogeClassのメンバに$backendを持っておいて コンストラクタで参照を渡すと思う。他にも使えるからね。 $this->backend->session->get('hoge'); HogeClassのメソッドでは、こういう風に呼び出すような。
639 名前:nobodyさん mailto:sage [2006/11/21(火) 09:18:10 ID:???] >>637 上手くいきました。感謝! /** *@vararraysmarty prefilter定義 */ var $smarty_prefilter_plugin = array(/* *TODO: ここにユーザ定義のsmarty prefilter一覧を記述してください * *記述例: * *'smarty_prefilter_foo_bar', */ array('foo', 'bar'), (1) 'bar', (2) ); (1)のように書きましたが、コメントどおり書いて(2)もo.k.でした。 (1)の方が後でメンテするときによさそうですね。
640 名前:635 mailto:sage [2006/11/21(火) 10:04:22 ID:???] レスありがとうございます >>636 $thisは自身参照の場合ですよね >>638 前者はなんとなくは理解できましたが、 後者はあまり把握できてません、、、 ちょっと試したりしてみます、 ありがとうございました。
641 名前:nobodyさん mailto:sage [2006/11/21(火) 16:13:24 ID:???] Ethnaのサイト見て吹いたのがこのスレのやり取りがマニュアルとして そのまま載ってたこと。中の人も見てるんだ。 開発がんばってください。 マニュアル作成ももうちょっとだけがんばってください。ノシ
642 名前:nobodyさん mailto:sage [2006/11/21(火) 19:59:57 ID:???] >>635 マネージャにしちゃ駄目なん? マネージャならプロパティにsession持ってるし
643 名前:nobodyさん mailto:sage [2006/11/23(木) 00:49:18 ID:???] アクションフォームのvalidate、 javascriptでも確認するようにできませんかね? アクションフォームあたりを継承して、そうしてる人いないでしょうか。 わざわざ確認用のアクション作成するのも面倒ですが、 javascriptで確認動作してくれれば、結構省けると思うんですよね
644 名前:nobodyさん mailto:sage [2006/11/23(木) 02:29:38 ID:???] SQLのインジェクション対策がかなり面倒なんで、 SQL文を自動的にエスケープするようにしたいんですが、 良い方法ないでしょうか? $db->DB を継承しようかと考えたんですが、 ethnaクラスを完全に理解していないもので、 どこで記述するかなど$db->DBの継承の仕方がよくわからんとです
645 名前:nobodyさん mailto:sage [2006/11/23(木) 09:44:06 ID:???] >>644 prepare使え
646 名前:nobodyさん mailto:sage [2006/11/23(木) 09:55:15 ID:???] >>641 マニュアル作成はもうちょっとどころか、もっと力入れて欲しいな。 正直使い始めの漏れにはどういったことができるのか公式サイトを見ただけではよくわかりません。 公式サイトの解説は適当すぎる気がする。 アクション名の取得のやり方などの公式には掲載されておらず、 他のサイトには掲載されているとかいう内容が多すぎるのもどうかと思われ。 で、ここのリンク切れはいつになったら直すんだろう? labs.gree.jp/Top/Document/20060707.html
647 名前:nobodyさん mailto:sage [2006/11/23(木) 10:14:04 ID:???] >>646 まあ確かに楽をするためにフレームワークを導入するのに、 そのフレームワークの使い方に苦労する現状は本末転倒だわなw でもversion 2.1.2でよければ、チュートリアルを読んで順に実行していけば 一通り作れるように書いてあるよ。 version 2.3.0の新機能については同意。まだ開発中だからしょうがないけどね。
648 名前:nobodyさん mailto:sage [2006/11/23(木) 13:00:12 ID:???] 最近ふじもと神は更新してますか?
649 名前:nobodyさん mailto:sage [2006/11/23(木) 14:47:54 ID:???] version 2.3.0の新機能イイよ。どんどん楽に融通が効く感じ。 機能知るにはコード追っかけるしかないけどさ、たいした量があるわけじゃないし、 全然「見て分かる」範囲じゃね?
650 名前:nobodyさん mailto:sage [2006/11/23(木) 18:14:51 ID:???] >>649 新機能ってなによ
651 名前:nobodyさん mailto:sage [2006/11/24(金) 00:24:45 ID:???] >>649 Ethna工作員乙 利用者数及び使いやすさ、習得期間等でsymfonyに負けんよう精々ガンガレヨォ〜
652 名前:nobodyさん mailto:sage [2006/11/24(金) 01:11:10 ID:???] version 2.3.0をリリースしたらドキュメント強化に取り組んでもらえるとか。 個人的にはUnittest関係のドキュメントをお願いしたいな。 PHP5に移行してからエラーは全てthrow exceptionするようにしてるので その辺も考慮した解説になるとうれしいな。
653 名前:nobodyさん mailto:sage [2006/11/27(月) 13:27:13 ID:???] class Test_HogeManager extends Ethna_AppManager { var $hoge = $this->config->get('hoge'); function abc() { echo $hoge; } } $this->Hoge->abc(); とすれば $this->config->get('hoge') の値が表示されるはずかと 思いますが、上手くいきません。 どこか根本的に間違ってますでしょうか?
654 名前:nobodyさん mailto:sage [2006/11/27(月) 13:53:42 ID:???] >>653 Ethnaのバージョンは?
655 名前:nobodyさん mailto:sage [2006/11/27(月) 22:25:04 ID:???] >>653 これでどう? class Test_HogeManager extends Ethna_AppManager { var $hoge; function Test_HogeManager(&$backend){ parent::Ethna_AppManager(&$backend); $this->hoge = $this->config->get('hoge'); } function abc() { echo $hoge; } }
656 名前:nobodyさん mailto:sage [2006/11/28(火) 01:56:02 ID:???] >>653 var $hoge = $this->config->get('hoge'); が、PHPとして間違ってない?それとも俺が知らないだけ? いつこの$hogeメンバはconfigのgetを実行するの?
657 名前:nobodyさん mailto:sage [2006/11/29(水) 11:53:08 ID:???] PHP 5.2.0, Ethna 2.3.0 preview 3 な環境でUnitTest(Simple Test)をやってみた。 で、なんとなく上手く動いているようなのだけど、 Notice: Only variable references should be returned by reference in /usr/local/share/pear/simpletest/simple_test.php on line 74 Notice: Only variable references should be returned by reference in /usr/local/share/pear/simpletest/simple_test.php on line 62 なる notice がでます(php.ini では error_reporting = E_ALL にしてます)。 エラーの意味はそのまんまですが、皆様の環境でも同様の notice が でますでしょうか?
658 名前:657 mailto:sage [2006/11/29(水) 13:55:00 ID:???] やはり上手く動いてないかも。 authenticateを使わないprepareとperformだけのaction formで $forward_name = $this->ac->prepare(); $this->assertNull($forward_name); $forward_name = $this->ac->perform(); $this->assertEqual($forward_name, 'hage'); と記入すると両ケースともpassするけど>>657 のnoticeとExceptionが4つでる。 エラー処理を全てthrow exceptionしてるのがいけないのかな?
659 名前:657 mailto:sage [2006/11/29(水) 17:29:08 ID:???] テストで簡単なプロジェクトを作成して、throwやtry、catchを 使わないようにしたらnoticeやExceptionは出ませんね。 SimpleTestとEthnaのどちらに原因があるのか分からないけど、 これらを改造するスキルは無いのであきらめるしかなさそうです。
660 名前:nobodyさん mailto:sage [2006/11/29(水) 20:31:18 ID:???] NoticeはSimpleTestでしょう。 Exceptionはcatchしてないだけじゃないの?
661 名前:nobodyさん mailto:sage [2006/11/29(水) 22:21:59 ID:???] >>660 > NoticeはSimpleTestでしょう。 ですかね。 > Exceptionはcatchしてないだけじゃないの? それは無いです(たぶん)。 テスト自体は成功するのですが余分なExceptionがでます。 今、例外をraiseErrorに書き換えようか激しく思案中・・・。
662 名前:661=657 mailto:sage [2006/11/29(水) 23:29:07 ID:???] 一応現象が再現する最低限のコードを・・・。 任意のApplicationManager(仮にProject_FooManager.php)に 例外をthrowするだけのfunctionを追加 function thex() { thrown new exception ('exception test'); } コントローラに追加(include & 'foo' => 'Foo',) app/action/bar.phpのperformに try { $this->foo = $this->backend->getManager('foo'); $this->foo->thex(); } catch (exception $e) { $this->ae->addObject(null, $e); return 'error'; } return 'bar'; これでちゃんとerror.tplが表示されます。 次にethna add-action-test bar としてBarTest.phpに // barアクションの実装 $forward_name = $this->ac->perform(); $this->assertNotEqual($forward_name, 'error'); と書くとテストにはパスするが他に4つほどEceptionが表示されます。 こんな感じです。
663 名前:nobodyさん mailto:sage [2006/12/02(土) 13:29:39 ID:???] ttp://ethna.jp 鯖落ちてる?
664 名前:nobodyさん mailto:sage [2006/12/02(土) 13:34:12 ID:???] >>663 俺も同じくアクセスできないです pear install ethna.jp/pear/Ethna-2.3.0.tgz しても Connection to `ethna.jp:80' failed: Success サイトは見れるんですけどね
665 名前:663 mailto:sage [2006/12/02(土) 14:36:09 ID:???] サイトは見れるようになりましたね。
666 名前:nobodyさん mailto:sage [2006/12/04(月) 15:06:04 ID:???] 2.1.2から2.3.0へアップグレードしましたが、 ethna_renderer_smarty.setplugin(class/Ethna_Controller.php:1624): Does not exists. [ERROR CODE(1)] というエラーが表示されます。 ethna.jp/ethna-document-dev_guide-misc-migrate_project.html を見てやってますが、 依然としてこのエラーメッセージだけ解決できません。 ご助言プリーズ
667 名前:nobodyさん mailto:sage [2006/12/04(月) 20:47:07 ID:???] それだけじゃなんとも。 renderer関連を見直しましょう。
668 名前:nobodyさん mailto:sage [2006/12/05(火) 03:58:07 ID:???] またダウンしてないか?
669 名前:657 mailto:sage [2006/12/05(火) 19:37:00 ID:???] >>657 ですが、その後ソースを見たりして例外を利用していてもNoticeは でなくなりました。テスト項目以外のExceptionが出るのは変わりませんが。 とにかく例外は利用できそうなのでほっとしました。
670 名前:nobodyさん mailto:sage [2006/12/05(火) 23:11:23 ID:???] 確認画面に関して、何か良いロジックないでしょうか? 作り方次第では非常に簡単にできそうなのですが。 ちなみに確認画面とは、アクションを実行する前の、 一度本当に〜〜してもいいですか?みたいな感じの画面のことです。 自分が思いついた一番楽そうな方法は ・prepare()内で確認フラグがたってたら、returnで確認画面表示、 確認フラグがたってなかったら、アクション実行。 です。もっと楽そうな方法ってあるでしょうか?
671 名前:nobodyさん mailto:sage [2006/12/07(木) 16:51:48 ID:???] Ethnaの2.3.0に乗り換えましたが、AppManager内で etc/hoge-ini.php 内の 値を取得するには、いちいち controller のインスタンスを取得して、Backendを 読み出して、getConfig()して…とやっていかなくてはいけないんでしょうか? なんだかどんどんめんどくさくなっていきますね…。
672 名前:nobodyさん mailto:sage [2006/12/07(木) 22:21:58 ID:???] 昔から$this->configで取れるけど?
673 名前:nobodyさん mailto:sage [2006/12/08(金) 09:36:28 ID:???] >>672 質問に対しての回答の仕方がおかしい件について
674 名前:671 mailto:sage [2006/12/08(金) 10:00:57 ID:???] >>672 すみません。取れました。 昨日散々やったのですが、何故か取得できなくて・・・。 >>673 意味は通じたのでOK
675 名前:nobodyさん mailto:sage [2006/12/08(金) 10:05:51 ID:???] $sessionに登録されたキー一覧を取得することってできませんか? 自分で登録したキーぐらい覚えとけよと言われたらそれまでなんですが。 セッションに関するメソッドにはそれらしいのがなさそうですね。 [Ethna_Session] => Array ( [0] => ethna_session [1] => restore [2] => isvalid [3] => start [4] => destroy [5] => regenerateid [6] => get [7] => set [8] => remove [9] => isstart [10] => isanonymous [11] => _validateremoteaddr )
676 名前:nobodyさん mailto:sage [2006/12/08(金) 12:04:06 ID:???] array_keys
677 名前:nobodyさん mailto:sage [2006/12/08(金) 13:29:29 ID:???] >>673 >質問に対しての回答の仕方がおかしい件について 全然おかしくないぞ。
678 名前:nobodyさん mailto:sage [2006/12/09(土) 15:19:40 ID:???] ethna.jp/ethna-document-dev_guide-form-type.html ココを参考に ファイルのアップロードプログラムを作っています。 単体ファイルなら上手く成功したのですが、 複数ファイル(配列)をアップロードしようとすると、 どうもform値としてわたっていないようです。 フォーム側では <INPUT type="file" name="up_file[]"> ActionFormクラスで 'up_file'に 'type' => array(VAR_TYPE_FILE), という指定を行ってます。 どこか誤りはあるでしょうか?
679 名前:nobodyさん mailto:sage [2006/12/10(日) 15:03:52 ID:???] >>678 私もそれ知りたいですね、 今は$_FILEを直接使って逃げようかと思案中・・・ ethnaのメリットが下がりますが。
680 名前:nobodyさん mailto:sage [2006/12/10(日) 21:35:54 ID:???] >>678 間違ってないと思う。 とりあえず、ActionClassで、 var_dump($this->af->get('up_file')); ってしたらどうなる?
681 名前:nobodyさん mailto:sage [2006/12/11(月) 18:58:01 ID:???] formタグにマルチパート指定は入れてるよな 当然だよな
682 名前:nobodyさん mailto:sage [2006/12/11(月) 22:06:03 ID:???] >>681 単数の場合はOKってんだから、大丈夫だと思うんだけど、678じゃないけど。
683 名前:nobodyさん mailto:sage [2006/12/12(火) 04:16:06 ID:???] あー、requiredをtrueにしてると、array(VAR_TYPE_FILE)はどうやってもエラーになった気がするなー FILEはそもそもが配列なので、そこんとこでethnaがなんか変なことになっていた気がする オレはethnaに適当にパッチ書いて動くようにしてしまった
684 名前:nobodyさん mailto:sage [2006/12/12(火) 07:11:19 ID:???] >>683 >オレはethnaに適当にパッチ書いて動くようにしてしまった それをぜひ公開して・・・
685 名前:nobodyさん mailto:sage [2006/12/12(火) 09:29:08 ID:???] >>684 683じゃないけど。 Ethna_ActionForm.phpの533行目辺り foreach (array_keys($form_vars) as $key) { // 値が空かチェック if ($type == VAR_TYPE_FILE) { if ($form_vars[$key]['size'] == 0 || is_uploaded_file($form_vars[$key]['tmp_name']) == false) { この辺やね。 $form_vars[$key]['size']しか使って判定してないんで、Arrayの時はこけるね。確かに。
686 名前:nobodyさん mailto:sage [2006/12/12(火) 14:04:54 ID:???] 2.3.0でやってみたけど、複数ファイルもrequiredも特に問題ないよ? >>685 もその前にis_arrayしてるから問題ないし。
687 名前:nobodyさん mailto:sage [2006/12/12(火) 17:06:29 ID:???] Ethnaではフォーム値に対してActionForm内に関数を定義してフィルタを かけることが可能ですが、この関数をひとつのファイルに収めて各フォーム で共有することは可能でしょうか? function _filter_str2upper($value) { return strtoupper($value); } こういう細かい関数をいっぱい定義しているのですが、各ページに書くのも 手間なので・・・
688 名前:nobodyさん mailto:sage [2006/12/12(火) 17:57:01 ID:???] そのために継承がある。
689 名前:nobodyさん [2006/12/12(火) 18:00:26 ID:ymrP8Ip7] 683だけど、確かに2.3.0で確認したら、その問題は解消されていたわ 俺が問題に対処してたバージョンは2以前だったけど、 さすがに678さんがそんな古いバージョンを使っているとは思えんし、 なんか別原因と考えたほうがよさそーね
690 名前:687 mailto:sage [2006/12/12(火) 19:35:37 ID:???] >>688 なるほど。 {Project_ID}_ActionForm.php に書いておけば良いのですね。 ありがとうございました。
691 名前:nobodyさん mailto:sage [2006/12/14(木) 22:19:50 ID:???] Ethna-usersにRoRの大物キタ━━━━(゚∀゚)━━━━ッ
692 名前:nobodyさん mailto:sage [2006/12/15(金) 01:52:12 ID:???] でかいひとキター
693 名前:nobodyさん mailto:sage [2006/12/15(金) 09:19:35 ID:???] データベーステーブルをいじくる画面作る際に ・新規(new new_do) ・更新(update update_do) ・削除(delete delete_do) の6画面が1テーブル毎に毎回必要になります。 importform() exportform()があるので コーディング自体はそれほど苦ではないのですが テンプレートの枚数が多くなって鬱になってきます。 上手くまとめる方法ないのでしょうか・・
694 名前:nobodyさん mailto:sage [2006/12/15(金) 10:03:40 ID:???] PHP on Ethnaとか… ねーなw
695 名前:nobodyさん mailto:sage [2006/12/15(金) 10:44:48 ID:???] ポエ…名前はかわいいな
696 名前:nobodyさん [2006/12/15(金) 14:25:35 ID:dxQfzRie] 試したことないけど blog.as-roma.com/BoBlog/index.php?itemid=1267
697 名前:nobodyさん mailto:sage [2006/12/16(土) 00:15:34 ID:???] 共有レンタルサーバーで ethnaを使おうと思うのですが、 CGIでPHPを動作させたい場合、 プロジェクト名/www 内を.cgiにするだけでいけます?
698 名前:nobodyさん mailto:sage [2006/12/16(土) 00:38:37 ID:???] >>697 やってみりゃいいじゃん。 まだ借りてないから出来ないとか言うなよ。w
699 名前:nobodyさん mailto:sage [2006/12/16(土) 01:38:20 ID:???] >>698 実際どうなるか、より理論上、どうなるかを聞いておきたいです、
700 名前:nobodyさん mailto:sage [2006/12/16(土) 03:22:58 ID:???] 「理論上」なら何だってできるだろ。
701 名前:nobodyさん mailto:sage [2006/12/16(土) 03:25:51 ID:???] EthnaでCLI での使用を想定したスクリプト作っている人いますか? Actionだけ作成して、みたいな感じですかね。 ethnaでやるメリットが少なそうですが。
702 名前:nobodyさん mailto:sage [2006/12/16(土) 03:27:55 ID:???] >>700 日本語読めてますか
703 名前:nobodyさん mailto:sage [2006/12/16(土) 11:46:54 ID:???] >>701 バッチ処理とかに使ってる人もいるんじゃないかな。 >>699 揚げ足取ってないで、自分は理論上どうなると思ってるのか書きなよ。 700の言うとおり、理論上ならどうにでもなる。
704 名前:nobodyさん mailto:sage [2006/12/16(土) 12:46:19 ID:???] >>697 いけるよ♪
705 名前:nobodyさん mailto:sage [2006/12/16(土) 12:48:08 ID:???] >>701 Webの方でAppManager類が充実してきてて、CLIでもDB処理したいなーと 思う時は使います。あと、メールの送信とか楽だし。もちろん、Viewレスの ActionClass::perform()のみね。 >>699 理論上でできないと思ったらそのワケを。 実践してできなかったら、どこで詰まったかを書けばいいんじゃないの?
706 名前:nobodyさん mailto:sage [2006/12/16(土) 15:32:44 ID:???] 非常によく悩むんですが、 似たような種類のデータを扱うとき、 そのデータ名のID(?)って変えますか? 例えば、苗字データと名前データを表示するアクション、テンプレをそれぞれ作る場合、 それぞれのアクションで $this->af->setApp('myouji_data', $myouji) $this->af->setApp('namae_data', $namae) と名前を分けますか? 私はそのつど対象のデータによって分けているんですが、 テンプレが似通ってる場合、.tplの{$app.***}の***の部分をいちいち 変更するのが非常に手間に感じます。 $this->af->setApp('data', $myouji) $this->af->setApp('data', $namae) としておけばほぼテンプレの変更は必要なくなるわけで。 一方で、分けておくと、ミスなどに気づきやすくなります。 普通の人はどうしてますでしょうか? 自分は完全独学なのでこういうコードデザインなどにひどく悩みます。
707 名前:nobodyさん mailto:sage [2006/12/16(土) 21:01:30 ID:???] 普通は分けると思う。 内容にまとまりがある部分は 配列でまとめて渡すのが良いんだろうけど。
708 名前:nobodyさん mailto:sage [2006/12/17(日) 01:34:22 ID:???] >>706 テンプレート内で呼び出されるテンプレートにしちゃって $this->af->setApp('myouji_data', $myouji);として smartyなら{include file="hoge.tpl" data=$app.myouji_data}で {$data}とかするのは?と言おうとしたけど EthnaはテンプレートにViewクラスが個別に作れるんだから $this->af->setApp('data', $myouji); で良いと思った。 個人的には、dataは名前が不意に衝突しそうでいやだ $person = array('myouji' => $myouji, 'namae' => $namae); $this->af->setApp('person', $person); とか、他のViewでも使う時に名前変えないですむ意味のある名前つけたいところ
709 名前:nobodyさん mailto:sage [2006/12/23(土) 19:38:14 ID:???] 今、サイト落ちてる?
710 名前:nobodyさん [2006/12/23(土) 23:49:18 ID:gjDqizfh] 落ちてるようですね。困ったーAPIDocsが見たいのに
711 名前:nobodyさん mailto:age [2006/12/24(日) 00:37:30 ID:???] サイト(というかサーバ)もふじもと神の頭脳のように強くあってほしいもんだな
712 名前:nobodyさん mailto:sage [2006/12/24(日) 01:05:05 ID:???] 同じくAPI見たい
713 名前:nobodyさん mailto:sage [2006/12/24(日) 14:19:52 ID:???] 自分でphpdocumentator使って生成せよ。
714 名前:nobodyさん mailto:sage [2006/12/25(月) 11:12:56 ID:???] ちと相談というか勘所をお聞きしたいのですが、Ethnaのサイトでは ActionClassのperformメソッドにはあまり処理内容を書かず、AppManagerに ロジックを書くことを推奨していたと思います。 しかし、ビジネスロジックの中にはサイトの中で一度しか呼ばれない 処理が多く、AppManagerがどんどん膨らんでいきます。 こういう場合もperformにビジネスロジックを書くのってやはり推奨されないんでしょうか? 一度しか呼ばれない処理なのにいちいちAppManagerクラスを見に行かねば ならないのは、返って可読性を落とすような気がするのですが・・・。
715 名前:nobodyさん mailto:sage [2006/12/25(月) 11:38:53 ID:???] >>714 程度問題かな。ActionForm値に依存しすぎる場合はAppManagerじゃなくて、 基本のActionClassに記述してそれを継承。 それでも自分はAppManagerに書くことのほうが多いです。 後で別どころで使う可能性もあるので。 または、「とりあえず」performに記述しておいて、後で「あ、前のを使う」と思えば、 その時にAppManagerに移植とかも結構やる。 ただ、一人ならいいけど複数人開発の場合は基本設計をちゃんとしないと混乱するよね。
716 名前:nobodyさん mailto:sage [2006/12/25(月) 11:55:23 ID:???] >>715 どうもです。 現在一人で開発してまして、引き継ぐ人があらわれたとしても複数人での開発には ならない規模の社内アプリです。 現在は極力AppManagerに書いてますが、ツール的なものはいいとして、ビジネス ロジックは共通化できそうなのが少ないので迷ってきました。 「とりあえず」performに書いて汎用的に使えそうなのは抽出していくって言うのも よさそうですね。 ちょっとこの路線でやってみます。
717 名前:nobodyさん mailto:sage [2006/12/27(水) 19:43:12 ID:???] アクション内で別のアクションに飛ばしたいときはどうしたらいいんでしょ... 結局、 header(Location: /?action_hoge=true); とかしてるけど。 UrlHandlerの使い方がまだよくわからん。
718 名前:nobodyさん mailto:sage [2006/12/27(水) 20:24:34 ID:???] 前の方に書いてあったけど、アクション内で、別のアクションが 呼びたくなっちゃう事自体が設計ミスらしいですよ。 処理を別クラスに作成して、それを共通で呼び出すようにした 方が良いかと。
719 名前:nobodyさん mailto:sage [2006/12/27(水) 20:28:07 ID:???] >>717 自分のしったか、だったかも・・・ >>215 あたりから読むと幸せになれるかも。
720 名前:nobodyさん mailto:sage [2006/12/28(木) 00:33:39 ID:???] >>717 ttp://dozo.matrix.jp/pear/index.php?Framework%2FEthna%2Faction こんなのも見つけてまいりました。
721 名前:nobodyさん mailto:sage [2006/12/28(木) 01:07:43 ID:???] >>717 >アクション内で別のアクションに飛ばしたいときはどうしたらいいんでしょ... すません。これ、私はこういうことを思ったことは無いんですが、 具体的にどうゆう場合にこういうことをしたい!!と思うんでしょうか? なるだけ具体的に書いてくださると、 「その場合は、***をViewに集めれば良いじゃん」 とかレスしますんで、よろしく。
722 名前:721 mailto:sage [2006/12/28(木) 01:09:30 ID:???] ちなみに、>>>215 のようなバリデートエラーの場合は=ActionFormが一緒 ということなんで、ActionClassも自動的に似通ったものになり、やっぱり ActionClassの継承を使って parent::perform(); をくし島t食っています。
723 名前:717 mailto:sage [2006/12/28(木) 12:14:25 ID:???] やっぱりManagerあたりで処理まとめて呼び出すのが一番きれいなやりかたですかね... ありがとうございます。
724 名前:nobodyさん mailto:sage [2006/12/28(木) 14:52:35 ID:???] windows環境なのですが、RAMドライブを使う以外でethnaのsessionをメモリーに 持たす方法は無いでしょうか。
725 名前:nobodyさん [2006/12/28(木) 16:24:21 ID:2NQtv/LQ] ethnaでブラウザ経由での実行じゃなくて、バッチ作ってコマプロで 実行するようなものも作れます? フレームワークのイメージ自体がちょっとできてないんですが…
726 名前:nobodyさん mailto:sage [2006/12/28(木) 18:21:33 ID:???] >>725 出来るみたいです。 labs.gree.jp/Top/Document/20060707.html#h3954b09 ゲートウェイシステム ゲートウェイシステムとは,単純にいうとコントローラをゲートウェイとして利用して, 通常のブラウザからのリクエスト,コマンドラインからの実行,XMLRPCなど (現バージョンでサポートされているのはこの3つです)のリクエストを全て「アクション」として 処理するための機構です index.phpじゃなくて、コマンドライン用のヤツを作ればいいのかな?
727 名前:nobodyさん mailto:sage [2006/12/29(金) 00:16:43 ID:???] ethna add-action-cli または ethna add-action -g=cli
728 名前:nobodyさん mailto:sage [2006/12/30(土) 00:32:59 ID:???] 2.3.0で APPID_ViewClass.phpの中で $this->af->setAppしてもテンプレで使用できないんですが、 これは仕様?
729 名前:nobodyさん mailto:sage [2006/12/30(土) 16:19:09 ID:???] >>728 普通に使えますが・・・
730 名前:728 mailto:sage [2006/12/30(土) 17:57:25 ID:???] function _setDefault(&$renderer) 内で指定するんですよね? PHP4でもいけますか?
731 名前:721 mailto:sage [2006/12/30(土) 22:27:30 ID:???] >>730 >function _setDefault(&$renderer) >内で指定するんですよね? 違う。preforward() Viewクラス全部にデフォルトで適用させたい場合は _serDefaultだけども、$rendererから$smartyを取り出して その$smartyにassignする。 取り出し方はRenderer $smarty =& $render->getEngine(); function _setDefault($renderer) { $smarty =& $render->getEngine(); $smarty->assing('test', array('hoge' => 'uki')); } とかかな。多分
732 名前:nobodyさん mailto:sage [2006/12/31(日) 15:53:49 ID:???] >>728-731 _setDefaultは、 $renderer->setProp('test', array('hoge')); でできるよ。
733 名前:nobodyさん mailto:sage [2007/01/01(月) 03:52:43 ID:???] 全てのフォームからの入力値に自動的に 特定のエスケープ関数(例えばmysql_escape_string)を賭けたい場合、 app下のAPPID_ActionClass.phpに組み込めば簡単かと思うのですが、 特定のアクション(またはフォーム値)に対しては mysql_escape_stringをかけないようにする良い方法が思いつきません。 元旦早々ですが、良いアイデアありましたらお願いします。
734 名前:nobodyさん mailto:sage [2007/01/01(月) 05:19:28 ID:???] viewの中ではAPPID_ViewClass.phpが問題なく継承されるんだけど、 action内でうまくAPPID_ActionClass.phpが継承されない。 ためしにAPPID_ActionClass.phpのperform()内で echo "エコーされるか?"; としてみたが一切認知されてないっぽい。 同じような人いませんか?
735 名前:nobodyさん mailto:sage [2007/01/01(月) 17:22:12 ID:???] >>733 Ethnaに限った話しでは無いのですが、クラスのオーバーライドという概念を 調べてみてください。 「PHPの薬箱」って本のクラスの説明が解りやすいので、機会があれば 見てみると良いと思います。
736 名前:nobodyさん mailto:sage [2007/01/01(月) 21:13:24 ID:???] 733が言いたいのはむしろ、そのオーバーライドをどう使えばいいか、 ってところのキガス
737 名前:nobodyさん mailto:sage [2007/01/01(月) 21:44:04 ID:???] オーバーライドが解っていれば、共通で実行されるメソッドを、特定アクションの 中でオーバーライド(処理無しの空メソッドを作るだけ。)すれば良いので >>733 のような質問は出ないのではなかろうか・・・。 app/actionの下に作成されている、アクション達はみんな app/APPID_ActionClass.php を継承しているということに気づいてないかな?
738 名前:734 mailto:sage [2007/01/03(水) 21:03:27 ID:???] どなたかヘルプミー
739 名前:734 mailto:sage [2007/01/03(水) 22:06:08 ID:???] ちなみになぜか APPID_ActionClass.phpのauthenticate() は機能します。 APPID_ActionClass.phpのprepare(),perform()機能しないとです・・・・
740 名前:nobodyさん mailto:sage [2007/01/03(水) 23:40:00 ID:???] エラーが再現する最低限のコードプリーズ。
741 名前:734 mailto:sage [2007/01/04(木) 00:25:50 ID:???] ああ、、、すいません、 オーバーライドされてただけの話でした・・・ orz=3 メソッドのオーバーライド(上書き)というより, 加え書き、みたいなのってないですよね・・・ ある一定部分までは同じで、アクションによってちょっとだけ 違う処理を付加する、っていう場合は appmanager使うとかしかないですかね・・・
742 名前:nobodyさん mailto:sage [2007/01/04(木) 03:23:40 ID:???] extend したほうで function perform() // 処理 return parent::perform(); } みたいにするか、 処理が異なる部分のみ切り出してテンプレートメソッド風にするとか。
743 名前:nobodyさん mailto:sage [2007/01/04(木) 17:27:26 ID:???] 入力→実行っていう画面遷移のページを作る場合はMojaviみたいに1つのActionクラスで入力用、実行用のメソッドを用意するんでしょうか? それともそれぞれのアクションクラスを作ってフォームのaction属性として連携させるんでしょうか。
744 名前:nobodyさん mailto:sage [2007/01/04(木) 23:58:29 ID:???] >>743 Mojaviは知らないし「入力用」「実行用」は色んな意味に取れて 具体的にどの処理を指してるのか解らないけど 1.画面に入力 2.登録ボタン押下 3.DB更新処理 4.結果表示 という、良く行われるであろう画面を作る場合、自分的には /app/action/アクション function prepare() { 入力チェック } function perform() { DB更新処理 ※(処理が大きくなりそうだったり、他の処理と共通化出来そう だったら「アプリケーションマネージャ」で別クラス化。 処理がちょっとで済みそうだったら直書き。) } /app/view/ビュー function preforward() { 画面表示に必要な値を取得する処理。 例) ・現在時刻取得 ・コンボボックスの内容をDBから取得 } こんな感じ。
745 名前:nobodyさん mailto:sage [2007/01/04(木) 23:59:39 ID:???] 「アプリケーションマネージャ」 ttp://ethna.jp/ethna-document-dev_guide-appobj-manager.html
746 名前:nobodyさん mailto:sage [2007/01/06(土) 08:36:33 ID:???] データベースから取得した値によって、動的にラジオボタンのnameが変わる 画面を作りたいのですが、アクション設定する入力チェックはどうやったら 動的に変更出来ますか? アクションの function prepare() の中で $this->af->validate() する前に、DBを読んで動的に入力チェックを行う事が 出来ますでしょうか?
747 名前:746 mailto:sage [2007/01/06(土) 08:38:07 ID:???] >>746 × アクション設定する ○ アクションで設定する
748 名前:nobodyさん mailto:sage [2007/01/06(土) 15:46:33 ID:???] $res1 = new m9('a')->("プギャァ~"); ↑これは、もっと評価されるべきじゃないの?w
749 名前:nobodyさん [2007/01/12(金) 23:14:55 ID:l7BIz4fN] ほしゅ
750 名前:nobodyさん mailto:sage [2007/01/12(金) 23:36:56 ID:???] アプリケーションマネージャの使い方が分からんとです。 PHP5+Ethna2.3.1です。 単純化した例で申し訳ないんですが、 /*マネージャ*/ class Nichan_MonaManager extends Ethna_AppManager{ function giko(){ //いろいろ処理して、とりあえず・・・ $neko = "にゃ〜"; } } /*コントローラ*/ var $manager = array( 'Test' => 'Mona', ); /*アクション*/ class Nichan_Action_Index extends Nichan_ActionClass{ function perform(){ $this->Test = $this->backend->getManager('Test'); $this->Test->giko(); $this->af->setApp('neko', $neko); return 'index'; } } /*テンプレート*/ {$app.neko}
751 名前:750 mailto:sage [2007/01/12(金) 23:37:28 ID:???] こんな感じで、テンプレートの部分で「にゃ〜」を表示させたいんですが、 Call to a member function giko() on a non-object というエラーが出ます。 クラスとか初めて使うので、何かが根本的に間違ってる気がするんですが、 自分では気が付けず。 どなたかご指導お願いします。
752 名前:750 mailto:sage [2007/01/13(土) 01:19:54 ID:???] 自己解決しました。 コントローラのvarは不要、 アクションで $this->Mona = $this->backend->getManager('Mona'); $neko = $this->Toppage->giko(); $this->af->setApp('neko', $neko); で出来ました。 Ethnaのドキュメント、新旧入り乱れてて分かりづらいよ・・・
753 名前:721 mailto:sage [2007/01/13(土) 13:48:05 ID:???] >>752 >コントローラのvarは不要、 だね。2.3以降は$managerメンバを使う必要が無くなってるから。 Managerを呼び出す方法は幾つかあるみたいだけど、 基本的に自分も>>750 と同じ方法でやってる。 あと、PHP5だとAppManager/AppObject/ActionClass/ViewClassでは $this->backend->getManager('Mona')->giko(); で行ける。2段階にしなくてもオK。 自分は $this->backend->getManager('Mona')って長いのが嫌なので、上記の4つの クラス全部にgetM()というメソッドを追加して $this->getM('Mona') とかしてる。
754 名前:721 mailto:sage [2007/01/13(土) 13:58:50 ID:???] >>752 あと、アクションで$this->MonaってやってMonaメンバに Managerを保存してるみたいなんだけど、EthnaのgetManagerは (というよりFactory?)一度newしたManagerは使い回してくれるので 何度もgetManagerしてOK。ViewでもActionでも同じインスタンスを 使ってくれる。
755 名前:nobodyさん mailto:sage [2007/01/14(日) 11:09:33 ID:???] なんでPHPって.演算子じゃなくて->演算子にしたんだろうな フレームワーク使ってるともう->書きまくるのたるくてしょうがない
756 名前:nobodyさん mailto:sage [2007/01/14(日) 11:31:05 ID:???] >>755 >なんでPHPって.演算子じゃなくて->演算子にしたんだろうな perlの影響じゃねの?
757 名前:nobodyさん mailto:sage [2007/01/14(日) 14:46:24 ID:???] タイピングがへたくそなだけだろ
758 名前:750 mailto:sage [2007/01/14(日) 23:00:46 ID:???] >>753 おっしゃるとおり、1段階でも出来ました。スゴス 2段階も長いけど、1段階でもまだ長いっすよね。 そのgetM()メソッドというやつ、デフォで組み込んでて欲しいとか思ってみたり。 ちなみに、MonaメンバにManagerを保存してたのは、 $thisの使い方が分かってなかっただけです。 今もあんま分かってないですが。 Ethna使いながらオブジェクト指向とかも勉強しようかなって感じです。 いま、非FWで作りかけてたものを移植してるんですが、 使えば使うほどFWの便利さが身にしみますね。
759 名前:nobodyさん mailto:sage [2007/01/15(月) 01:59:38 ID:???] 配列、連想配列、クラス これの使い方が解ったら、FWの便利さが飛躍的に上がる。
760 名前:nobodyさん mailto:sage [2007/01/15(月) 02:02:42 ID:???] クラスはともかく連想配列はFW以前の知識だろう
761 名前:nobodyさん mailto:sage [2007/01/15(月) 21:50:03 ID:???] >>759 オブジェクト指向がわからない人はFWを使おうとしても挫折するんとちゃうか?
762 名前:nobodyさん mailto:sage [2007/01/15(月) 21:53:16 ID:???] >>760 > クラスはともかく連想配列はFW以前の知識だろう いや、全部フレームワーク以前の知識だと思うぞ
763 名前:nobodyさん mailto:Ethna [2007/01/15(月) 22:26:13 ID:???] ethna.jp/ethna-document-dev_guide-urlhandler.html >>この中の$action_mapを設定することでUrlHandlerが利用できます。デフォルトではなにもしません。 何でデフォルトで何もしないんだろう? こんなんはsymfonyみたいにスケルトンを作成した段階で 自動的にアクセスできるようにすればいいんジャマイカ? 上記の例で行くと ethna add-action echo_msg ってやった瞬間に /echo/msgでアクセスできるようにしたほうが便利なのでは?
764 名前:nobodyさん mailto:sage [2007/01/16(火) 01:37:46 ID:???] >>763 俺はそうするように書き換えちゃったよ
765 名前:nobodyさん mailto:sage [2007/01/16(火) 12:51:48 ID:???] >>763 >何でデフォルトで何もしないんだろう? 後方互換性
766 名前:nobodyさん mailto:sage [2007/01/18(木) 04:05:03 ID:???] マネージャってapp直下に作られるけど、 数が多いんで、app/managerとかのディレクトリに入れることは可能? ただ入れるだけだと、Fatal errorが出るんだよね。 どこを弄れば、読み込んでくれるのでしょうか?
767 名前:nobodyさん mailto:sage [2007/01/18(木) 11:20:20 ID:???] >>766 コントローラの上のほうで、 /** include_pathの設定(アプリケーションディレクトリを追加) */ $app = BASE . "/app"; $lib = BASE . "/lib"; $manager = $app. "/manager"; ini_set('include_path', ini_get('include_path') . PATH_SEPARATOR . implode(PATH_SEPARATOR, array($app, $lib, $manager))); とかしてやれば動くんじゃない? 確かめてないけど。
768 名前:nobodyさん mailto:sage [2007/01/18(木) 22:34:03 ID:???] >>767 d!動きますた。 app直下のものも動いちゃうけど、とりあえずこれでいってみます。
769 名前:nobodyさん mailto:sage [2007/01/21(日) 01:10:24 ID:???] >>764 何処を書き換えればいけるかな? >>765 kwsk
770 名前:764 mailto:sage [2007/01/21(日) 04:53:17 ID:???] >>769 俺も柔軟な方法があったら知りたいんだがw とりあえずはUrlHandlerのgetInstanceメソッドをオーバーライドして アクションのマッピングが見つからなかった時に マッピング設定をするようにしたら出来るよ 当然値を自動的にセットはしないし (ルール設けてデフォルトのマッピングをそう生成すればいいんだけど) smartyのurl関数とかも使えないんじゃないかと思う 俺の場合は元々そこら辺をフォローするマネージャとか作ってあったから どっちも使えるようマージするだけでよかったんだけどね
771 名前:769 mailto:sage [2007/01/21(日) 11:31:55 ID:???] >>770 めんどくさいなぁ 例えばスケルトンを作成する際に-url等のオプションをつければ 【利用者が何も意識しなくても】 ステキURLでアクセス出来るようにして欲しいな。 つまり>>763 の例で行くと ethna add-action -url echo_msg ↓ 特に設定を変更することなく /echo/msg でアクセス ↓ (゚д゚)ウマー
772 名前:764 mailto:sage [2007/01/21(日) 15:51:48 ID:???] >>771 無い袖は振れんのだ しょうがない 一応、UrlHandler自体もうちょっとどうにかしようという流れはあるみたいだし それに期待じゃないかね 俺は足りない部分はさくっと追加しちゃって後は本家の実装待ちみたいな感じだw 上記の変更も実質数行足すだけだったし 不満はあるけどEthnaは改造しやすくていいんだよねぇ(俺でも改造の道筋がすぐ見えるという意味)
773 名前:nobodyさん mailto:sage [2007/01/21(日) 22:50:42 ID:???] 1つ前のアクション取得する簡単な方法ってないでしょうか。 validate()した後、エラーがある場合の 遷移先を自動的に指定したいのです。 フォーム値に渡す方法しか思いつきませんでした。 もっと簡単な方法があったらおながいします
774 名前:nobodyさん [2007/01/22(月) 10:55:40 ID:grOsWXoX] > 1つ前のアクション取得する簡単な方法ってないでしょうか。 セッション使うことにこだわらなければ、セッション使う。 ViewClass::forward()のオーバーライドでその決定後のactionを保存。 っつーか、>>773 の1つ前というのが、1リクエスト前のactionという意味ならだけど。 そうではなく、PHP内の内部処理内でって言うなら、PHP5限定で現在のActionClass名 __CLASS__からActionNameを解析するしかないな。 解析はViewClassのメソッドに付け加えて、validate()でエラーが出た際はerror_viewとか適当な クラスを作ってそこでジャンプ。 んー。Backendクラスもオーバーライドしないといかんかな。
775 名前:nobodyさん [2007/01/23(火) 23:33:59 ID:OL4nj+JT] viewで、 $tests= array("1"=>"さいしょ","2"=>"つぎ","3"=>"さいご"); $this->af->setApp('tests',$tests); としておいて、 tplで、 {select name=test_select empty="選択してください" list=$app.tests} と、してるんだが・・ 出力が、 <select name="test_select"> <option value="">選択してください</option> <option value="1" >ぜ/option> <option value="2" >ぜ/option> <option value="3" >ぜ/option> という、わけのわからない化け方をするし、 最初の一文字しか出てこないし、なんだかわかりません。 どう解決すればよいか、力をお貸しくださいませm(_ _)m
776 名前:721 mailto:sage [2007/01/23(火) 23:40:30 ID:???] >>775 最初の一文字しか出てこないのは、多分PHPにおいて文字列も配列として 認識されるのが影響してると思う。 例えば、 $str = "abcde"; echo $str[0]; とすると、aって出る。 これを$strがマルチバイトの場合でバイト欠損になってるんだと思う。
777 名前:775 mailto:sage [2007/01/23(火) 23:50:58 ID:???] >>776 そ、そうなの?? 若干Ethnaから離れて大変申し訳ないですが。。 もしそうだとすると、配列を渡すようなsmarty_functionのselectとかcheckboxとか、 全滅ってことになるよねぇ??
778 名前:nobodyさん mailto:sage [2007/01/24(水) 00:43:32 ID:???] 化けるのは、ただ単に文字コードの問題じゃなくて?
779 名前:775 mailto:sage [2007/01/24(水) 00:52:45 ID:???] たぶん文字コードではないと思いますよ。 print_rで配列出すとブラウザ上に Array ( [1] => さいしょ [2] => つぎ [3] => さいご ) って中身が出てるので。
780 名前:778 mailto:sage [2007/01/24(水) 00:59:51 ID:???] select は smarty のプラグインかなんかでしょ? そのプラグインの中で値がどうなってるか調べれば委員で内科医。
781 名前:nobodyさん mailto:sage [2007/01/24(水) 01:10:21 ID:???] >>775 使い方が違うだけだろ $tests = array ( "1" => array ('name' => "さいしょ"), "2" => array ('name' => "つぎ"), "3" => array ('name' => "さいご"), );
782 名前:775 mailto:sage [2007/01/24(水) 22:01:26 ID:???] >>781 大変すまんかった。 おっしゃるとおり。
783 名前:nobodyさん mailto:sage [2007/01/24(水) 23:56:26 ID:???] ethna も sandboxほしいね。
784 名前:nobodyさん mailto:sage [2007/02/01(木) 01:29:35 ID:???] ほしゅ
785 名前:nobodyさん [2007/02/03(土) 16:20:22 ID:F0daih5C] Ethnaを勉強するのって公式サイトを見ての独学しかないんですか? 書籍を探しても見つからなかったのですが・・・ 良い勉強法をご存知でしたらご教示ください(´・ω・`)
786 名前:nobodyさん mailto:sage [2007/02/03(土) 16:44:49 ID:???] >>785 ムック系の本の中で何度か取り扱われた事があるからそれを探してみると とっかかりとしては良いかも 後は、Ethnaの公式とかgree lab見るとかコミッタの人のblogの記事を読むとか 多少内容は古いと思うけど独自にtips書いてる人もいる ようするにぐぐれって事かw 後はEthnaはコードが読みやすいフレームワークだと思うから 実行順とかわからない所のコード追っかけてみたりした方がいろんな意味で 勉強になって良いと思う
787 名前:nobodyさん mailto:sage [2007/02/03(土) 16:51:05 ID:???] >>786 なるほど、分かりました。 手始めにソースコード読んで勉強してみます! ありがとうございましたm(_ _)m
788 名前:nobodyさん mailto:age [2007/02/04(日) 10:32:16 ID:???] 外国産のPHPフレームワークばかりに目が向いていたが、Ethnaの使い方も勉強してみようかな
789 名前:nobodyさん mailto:sage [2007/02/05(月) 12:06:34 ID:???] EthnaのUrlHandlerって、アクションを一つ一つaction_mapに書いていかないといけないのでしょうか? ethna.jp/ethna-document-dev_guide-urlhandler.html ここを読んだのですが、いまいちピンときません。 hoge/foo hoge/bar とあった場合に、 hoge/index.php?action_foo=true hoge/index.php?action_bar=true となるように、一つの設定ですませたいのですが、そういうことは可能でしょうか。
790 名前:nobodyさん mailto:sage [2007/02/05(月) 18:50:46 ID:???] ttp://www.endlessbattle.net/wiki/ おちっぱなしだけど...大丈夫なのかな...
791 名前:nobodyさん mailto:sage [2007/02/05(月) 23:01:43 ID:???] ethnaで作ったスクリプトをCGIとして動作させたい場合、 どうすればいいでしょうか? ちなみに普通のPHPであれば、 #!/usr/bin/php をつければ、CGIとして動作する共用レンタルサーバーです。
792 名前:nobodyさん mailto:sage [2007/02/05(月) 23:12:49 ID:???] AppObjectの使いどころが良くわからない・・・ クエリ発行するには AppManager->db->query(); でいいんだよね? AppObjectって必要なの?
793 名前:nobodyさん mailto:sage [2007/02/06(火) 00:41:00 ID:???] 私は使ってません。
794 名前:nobodyさん mailto:sage [2007/02/06(火) 15:35:18 ID:???] /etc/[APPID]-ini.php 内で セッション値やアクションフォーム値を使用するためには どうすればいいでしょうか? $this->session->get('hoge') でやってみましたが、Call to a member function on a non-object が出ました。
795 名前:nobodyさん mailto:sage [2007/02/06(火) 15:55:40 ID:???] if( !empty( $this->af->get("hoge") ) ){ } とするとエラーが出ます。 $hoge = $this->af->get("hoge"); if( !empty( $hoge ) ){ } ならうまくいきます。へるぷみー
796 名前:nobodyさん mailto:sage [2007/02/06(火) 18:02:29 ID:???] セッションの値をsmarty内で{$session.id}みたいな感じで 使えませんかね? setApp するのがだるいのです。
797 名前:nobodyさん mailto:sage [2007/02/06(火) 19:35:30 ID:???] >>795 PHP4だからじゃね? >>796 [APP_ID]_ViewClass.phpの _setDefaultメソッドでアサインすれば?
798 名前:nobodyさん mailto:sage [2007/02/06(火) 19:52:01 ID:???] >>795 emptyで調べられるのは変数のみ jp.php.net/manual/ja/function.empty.php
799 名前:794 mailto:sage [2007/02/06(火) 20:22:16 ID:???] >>797 レスありがとうございます。 おっしゃるとおり PHP4です。 PHP5にせずに何とかする方法はないでしょうか。 あとみなさんPHP5でエスナってるんでしょうか?
800 名前:721 mailto:sage [2007/02/06(火) 23:30:31 ID:???] >>794 >/etc/[APPID]-ini.php >内で セッション値やアクションフォーム値を使用するためには >どうすればいいでしょうか? そんなやり方はしないヨ。 /etc/hogehoge-ini.php には、設定値を書くから、設定値をセッションで上書きするって言う使い方はしない。 設定値はethna_configオブジェクト(のサブクラス)として存在してて、 そのロードはControllerのコンストラクタで行われてて、それってEthnaの起動のほぼ直後。 もちろん、Sessionが始まるより遥か前。 そもそも、セッションオブジェクトやアクションフォームオブジェクトは AppManager/AppObject/ActionClass/ViewClass内のみで使われることを 想定としてるから、そんな変なところではアクセスできるわけがない。
801 名前:nobodyさん mailto:sage [2007/02/07(水) 09:06:56 ID:???] >>793 792です。 自前のクラスを使うことにしました、ありがとう。 いろいろ調べてみて、現状ではAppObjectを他のフルスタックフレームワークのModelと同じように考えてはいけないと思いました。 何でこんな中途半端なものがくっついてるんだろう? 混乱するだけなのにな・・・。
802 名前:nobodyさん [2007/02/07(水) 17:46:41 ID:hhcgJkB/] >何でこんな中途半端なものがくっついてるんだろう? 私はメチャメチャ使っています。 とにかく、ActionClassの行数を増やしたくないので、とりあえずAppManager/AppObjectにという感じで。
803 名前:nobodyさん mailto:sage [2007/02/10(土) 12:18:29 ID:???] .tplが勝手にキャッシュされて htmlミスりまくりの自分としてはテスト中はかなり不便なんですが、 どこかでキャッシュの設定はできるんでしょうか? smartyのキャッシュ設定はoffになってました。 本家でキャッシュで調べましたが、見つかりませんでした。
804 名前:nobodyさん mailto:sage [2007/02/11(日) 11:49:01 ID:???] アクションのフォワードってどうやるんですか?
805 名前:nobodyさん mailto:sage [2007/02/11(日) 15:03:58 ID:???] >>804 できません。
806 名前:nobodyさん mailto:sage [2007/02/11(日) 23:05:45 ID:???] >>804 やはりリダイレクトかアクションの継承になるんでしょうか。
807 名前:nobodyさん mailto:sage [2007/02/12(月) 01:51:26 ID:???] >>806 継承だったらこんな感じになるのでしょうか? Base_Action { function doHoge() { } function doFuga() { } } class Action_A extends Base_Action { function perform() { $this->doHoge(); } } class Action_B extends Base_Action { function perform() { $this->doHoge(); $this->doFuga(); } }
808 名前:nobodyさん [2007/02/14(水) 23:01:46 ID:pcigeSJ1] 行数のかさむコードには誰も反応しない。。w
809 名前:nobodyさん mailto:sage [2007/02/15(木) 00:08:38 ID:???] 行数がかさまないように、括弧の前後にある改行を消せばいいの?
810 名前:721 mailto:sage [2007/02/15(木) 03:31:47 ID:???] >>808 >行数のかさむコードには誰も反応しない というか、何したいかいまいちよくわからん・・・・。 アクションのフォワードとかリダイレクトとかそれっぽい言葉があるが、 とりあえず言葉を使ってるだけ感がいっぱいで。
811 名前:nobodyさん mailto:sage [2007/02/16(金) 17:19:24 ID:???] プロジェクトディレクトリまでの絶対パスの取得方法教えてくださいまし。 APPID/lib 内のファイルを操作したいです。
812 名前:nobodyさん mailto:sage [2007/02/17(土) 12:43:45 ID:???] >>811 $_SERVER["SCRIPT_FILENAME"]からwww/index.phpを抜くのじゃ駄目か?
813 名前:nobodyさん mailto:sage [2007/02/17(土) 13:00:20 ID:???] 普通に__FILE__使えばいいだけでは。
814 名前:nobodyさん mailto:sage [2007/02/19(月) 17:44:59 ID:???] ethnaでmod_rewriteが上手く使えない。 ?や&で切れる。どうやればいいですか?
815 名前:>>814 マルチ乙www mailto:ワロタヨ [2007/02/19(月) 23:38:21 ID:???] mixi.jp/view_bbs.pl?id=11662178&comm_id=261369 19: 普通 ( mixi.jp/show_friend.pl?id=2134264 ) つい先日から、ethnaを使い始めたものですが、mod_rewriteで上手く飛ばせないので、どうかご教授ください。 簡単なブックマーク的なものを作成しようとしてるのですが、URLを entry?uri=hoehoge をentry/hogehogeのようにしたいのですが、hogehogeに?や&などが含むとそこでとぎれてしまいます。 簡単に、 RewriteRule ^entry/(.+) /entry?uri=$1 [L] や RewriteRule ^entry/(.+) /entry?url=$1%{QUERY_STRING} [L] こんふうに書いたのですが、これがいけないのでしょうか? ?や&が含まれなければ、全てを取得できるのですが。。 はてブさんとかのエントリーと比較した場合、http://の://がはてブさんだとそのままだったのですが、自分のエントリーを見ると、http%3A%2F%2Fのようにエンコードされてしまいます。 これが原因なのでしょうか? Smarty側のほうには、エスケープさせるsetAppNEがありますがこれは表示の問題で今回とは関係ないと思いますし。 もしかしたら、mod_rewriteの問題でここでの質問はおかしかったらすいません。すぐに削除します。 ただ、ethnaのエスケープ関連の問題でしたら、どうか解決法をご教授くださいませ。 よろしくお願いします。
816 名前:nobodyさん mailto:sage [2007/02/20(火) 00:59:16 ID:???] 解決法。 もっと簡単なプログラムから勉強し直す。
817 名前:nobodyさん mailto:sage [2007/02/21(水) 05:44:31 ID:???] Smartyにcache_idを渡してページごとに複数のキャッシュを持たしたいんだけど、 できなさそうですね?
818 名前:nobodyさん mailto:sage [2007/02/22(木) 14:22:50 ID:???] >>817 ここはEthnaのスレ よそで聞け ちなみに余裕で出来るぞ
819 名前:nobodyさん mailto:sage [2007/02/22(木) 15:16:44 ID:???] Ethnaでって話しだろ?
820 名前:nobodyさん mailto:sage [2007/02/23(金) 04:10:03 ID:???] >>818 Ethnaでの話ですよ、もちろん。 >>819 その通りです ちょいと改造して解決しました
821 名前:nobodyさん mailto:sage [2007/03/01(木) 00:08:12 ID:???] wamp環境でEthna使ってるんだけど、ethnaコマンドが黙り込むのはなぜ? ethna add-action --basedir=dir sample とかやるとき。
822 名前:nobodyさん [2007/03/01(木) 16:07:38 ID:ue5nOCQJ] AppObjectで SQLの関数使いたいとき、 たとえば update some_table set some_date = now() where some_id = 1; ↑こんなかんじのことをAppObjectでやりたいときって どうやればいいんでしょう ちなみにPostgreSQLです
823 名前:nobodyさん mailto:sage [2007/03/02(金) 00:59:24 ID:???] >>822 今のところ確かできなかったはず。 そのうち出来るようにしたいと言ってた気がする。
824 名前:nobodyさん mailto:sage [2007/03/02(金) 01:00:04 ID:???] そのうちじゃなくて将来的に出来るようにしたいと言ってたんだったかな。 どっちでもいいが。