- 1 名前:nobodyさん [2005/08/03(水) 21:00:39 ID:TuHx69hT]
- 国産フレームワーク、Ethnaでいい意味で手抜きなプログラミングライフを。
Ethna -PHPウェブアプリケーションフレームワーク- ethna.jp/ SourceForge.jp: Project Info - Ethna sourceforge.jp/projects/ethna/
- 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 で指定したビュー名と同じ名前のテンプレートがなければ
実行できないんでしょうか? ビュー名と違うテンプレートを動かそうとしてみたんですが、よくわかりません。 どなたかやったことありませんか?
|

|