- 1 名前:nobodyさん [2007/08/03(金) 08:15:18 ID:BNMV6wHx]
- 国産フレームワーク、Ethnaでいい意味で手抜きなプログラミングライフを。
Ethna -PHPウェブアプリケーションフレームワーク- ethna.jp/ SourceForge.jp: Project Info - Ethna sourceforge.jp/projects/ethna/ クラスドキュメント(phpDocumentor) ethna.jp/doc/ 前スレ 【PHPフレームワーク】Ethna【スケルトン自動作成】 pc11.2ch.net/test/read.cgi/php/1123070439/
- 76 名前:69 mailto:sage [2007/11/03(土) 00:15:59 ID:???]
- >>75
とりあえず1分でも早いことコーティング終わらせたい! って時は、確かにViewレスにしてperformでsetAppする。こともある。 前はそうやってたけど、最近面倒でもviewつくるようにしてる。 まぁ、1分かからんでしょ。 理由は2つあって、ひとつは、結局あとから追加仕様が加わった時に viewがあるとそこに流し込めば良いという意識でAction作ってしまえる。 viewを造ってないと、結局違うActionに同じsetAppするようになる。 ある意味、そっちの方が絶対使い回しできない。 もうひとつは、forwardをいじりたい場合。 view/Subview.php view/Subview/Draw.php view/Subview/Draw/Finish.php ってする場合、APPID_View_Subview::forward()に仕掛けをしてやって テンプレパス変えたりする場合、クラス定義だけでもしておけばそれ以下の viewもよろしくやってくれるけど、viewを定義しないとControllerで設定した view使っちゃうからな。まぁ、特殊な場合だけど、forwardいじれるのは強力だからな。
- 77 名前:69 mailto:sage [2007/11/03(土) 00:29:22 ID:???]
- >>75
>キャッシュされているにせよ >viewでもう一回AppObject取り直して >af->setApp()を数行書くってのも、たいそう無駄な気がしてます。 なんで、オレの場合はできる限りAction/Viewの行数を増やさないように Modelにほとんどのコードが移動した。 AppObject/AppManagerのキャッシュを利かせるには、 同じfilter/offset/limit/orderでDBからfetchさせる必要があるから。 すると、ActionとViewでぶれがあるといけないからな。 だから、全体の流れとして必然的に [Action] ActionFormの調整(デフォルト値や、セレクトタブの値生成) ↓ af->validate() ↓ 落ちるView先の決定ロジック [View] af->setApp() のみ ってなる。
- 78 名前:68 mailto:sage [2007/11/03(土) 01:16:56 ID:???]
- >>76
>もうひとつは、forwardをいじりたい場合。 これは分る。確かにforwardいじりたい時もある。 >viewを造ってないと、結局違うActionに同じsetAppするようになる。 >ある意味、そっちの方が絶対使い回しできない。 そうかなー。viewを作ってあったにせよ、viewに渡すものが抽象化 しきれてなければ、結局使い回せない気がする。 一番抽象的で、どんなviewでも理解できるもの、つまりはActionFormを 渡すというお約束が、ゆるくて最強の接点だと思うんだが。
- 79 名前:68 mailto:sage [2007/11/03(土) 01:33:38 ID:???]
- >>77
>AppObject/AppManagerのキャッシュを利かせるには、 >同じfilter/offset/limit/orderでDBからfetchさせる必要があるから。 勉強になります。
- 80 名前:69 mailto:sage [2007/11/03(土) 02:54:08 ID:???]
- >>78
>渡すというお約束が、ゆるくて最強の接点だと思うんだが。 その辺は、開発スタイルとか案件に依るんじゃない? 取りあえず「オレはこういう感じでやってる」ってだけで、別に色々な方法があると思う。 使ってるうちに変わるだろうし、ってオレがそうなんだけど。 そのへんのゆるさはEthnaのいいところだし、一人や数人でやる分には気楽。
- 81 名前:nobodyさん mailto:sage [2007/11/03(土) 15:20:42 ID:???]
- みんな、AppObjectというかORM使ってるのか。
俺はjoinのやり方が分からなくて涙目だったので、いまだにSQL書いてるよ。 ZnedFrameworkも試してみたけど、Zend_Db_Tableが全然使えないので 結局そっちもSQLというチンカスっぷりだぜ。
- 82 名前:nobodyさん mailto:sage [2007/11/03(土) 16:01:56 ID:???]
- joinは少し前まで、まともにできなかったはず。
なんで漏れもSQL書いてるよ。AppObjectはテーブルのレコードと1対1でやり取りする場面だけ 使ってる。検索して一覧引っ張ってくるようなケースは、joinする場合が多いし、 where文SQLで書く方が慣れているんで、SQL書いた処理をAppManagerに詰め込んでるよ。
- 83 名前:nobodyさん mailto:sage [2007/11/05(月) 13:41:20 ID:???]
- view作ってwhere条件だけEthna_AppSearchObjectで作るってのはナシ?
もっとも、それやった香具師がMLで「table読むときはカラム名小文字になるのに、viweを読むと大文字になる。がっでむ!」と言っていたので、あまりお勧めではないのかもしれん。 ……S2EthnaでS2Dao.PHPか?w
- 84 名前:nobodyさん [2007/11/07(水) 18:33:33 ID:NnNW38Hz]
- ethna.jp/ethna-document-dev_guide-app-sjis.html
> 入力のShift_JISを内部コードに変換 > まずは、Ethnaのフィルタで入力コードを変換してしまいます。 とあるのですが /usr/local/lib/php/Ethna/class/Ethna_Filter.php この中に書き加える訳ではないのですか? 上記で駄目だったので、APPID_Filter.php を以下のように書いて class APPID_Filter extends Ethna_Filter{ { function prefilter(){・・・} function InputEncoding($data){・・・} } APPID_Controller.phpでrequire onceしてみたりしたのですが $_POSTされたデータが変換されなくて悩んでます。 どなたかご教授ください。よろしくお願いします。
- 85 名前:nobodyさん mailto:sage [2007/11/07(水) 18:36:31 ID:???]
- APPID_Filter.php の prefilter() は preFilter() の入力ミスです。
- 86 名前:nobodyさん [2007/11/08(木) 01:13:51 ID:Wm9UgOj0]
- だれかAppManagerのgetAttrListの使い方わかる人いませんか?
これがいまいちわからないのです。フォームヘルパでセレクトボックスのoptionの値を データベースから取得したいと考えてまして。 Ethnaの開発マニュアルみていたら、アクションフォームで Optionの設定を'address,prefecture'に書けば見たいな事わかったんですが、、 プロパティの値ってのがよくわからないんです・・・ だれかわかる人教えてください。
- 87 名前:nobodyさん mailto:sage [2007/11/08(木) 02:07:11 ID:???]
- Hogeマネージャの関数から
同マネージャ内の別関数(fuga)を呼び出したい場合、 以下のどちらが適しているでしょうか? $Hoge_m =& $this->backend->getManager('Hoge'); $Hoge_m->fuga(); or $this->fuga();
- 88 名前:nobodyさん [2007/11/08(木) 02:29:21 ID:Wm9UgOj0]
- >87
$this->fuga();
- 89 名前:86 mailto:sage [2007/11/08(木) 02:56:20 ID:???]
- ありがとうございます!!
もう一点非常に疑問点があるのですが、 $Hoge_m =& $this->backend->getManager('Hoge'); と $Hoge_m = $this->backend->getManager('Hoge'); ってどう違うのでしょうか? この&って参照渡しでしょうか? 参照渡しって単なる変数だけでなく、オブジェクトに対しても 利用可能なのでしょうか?
- 90 名前:nobodyさん mailto:sage [2007/11/08(木) 16:06:31 ID:???]
- >>89
www.php.net/manual/ja/language.references.php 参照はスカラー型でもオブジェクトや配列でも使えるよ。 余談だけど、PHP5以降では関数の戻り値や変数への代入なんかで 同じオブジェクトを指し示している必要がないのであれば、参照渡しを するべきではないので注意。メモリの効率化とか思っていると、むしろ 無駄に消費されることがある。 www.phppro.jp/news/304 PHP4/5に対応するEthna(本体)には関係ない話だけどね。
- 91 名前:nobodyさん mailto:さげ [2007/11/11(日) 12:12:44 ID:???]
- このフレームワークって他のフレームワークにあるような
AjaxヘルパやHTMLヘルパーなんかは装備されないんでしょうか? あと、ルーティングをもう少し改善して欲しいですな。
- 92 名前:nobodyさん mailto:sage [2007/11/12(月) 15:41:42 ID:???]
- スマートURLを使えるようにするにはapacheの方も色々設定しないと駄目?
- 93 名前:nobodyさん [2007/11/13(火) 01:26:05 ID:41cf2n7r]
- PEAR::Authを継承したAuthクラスをこさえてみようかと思ったんだが、
構築するタイミングがわからない ActionForm辺りで $this->auth =& new $this->backend->ctl->class['auth'](&$this->backend->ctl) ってやってあげればいいんだべか。 Controllerのコンストラクタで構築するのはちょっくら早い感じだし どうするとスマートなんでげしょ。
- 94 名前:nobodyさん mailto:sage [2007/11/13(火) 21:54:07 ID:???]
- >>92
まぁ、mod_rewriteの設定を行わないと駄目でしょうね。 UrlHandlerはいまひとつって感じ。
- 95 名前:93 [2007/11/13(火) 23:45:08 ID:41cf2n7r]
- ActionClassのauthenticateで生成することにすますた
- 96 名前:nobodyさん mailto:sage [2007/11/14(水) 04:30:56 ID:???]
- 例外処理をしたいのですが、
AppManager 内で throwして アクション内でcatchしたい場合、 どのように記述すればよいでしょうか? 単にAppManager内でthrowすると PHP Fatal error: Uncaught exception 'Exception' がおきてしまいます
- 97 名前:nobodyさん mailto:sage [2007/11/16(金) 03:14:04 ID:???]
- >>67
エラーが発生したらトランザクション中の後続するSQLはスキップしそうだけどね そうじゃなきゃあんまりでしょw
- 98 名前:67 mailto:sage [2007/11/16(金) 21:30:33 ID:???]
- >>97
いや、ソース確認したらチェックしてなかったんだよ あんまりだ
- 99 名前:nobodyさん mailto:sage [2007/11/19(月) 22:11:25 ID:???]
- $obj =& $this->backend->getManager('hoge');
$obj->setParam( $param ); $obj =& $this->backend->getManager('hoge'); みたいな感じにすると $obj->setParam( $param );が既になされている状態になる理由が よくわからんです。
- 100 名前:99 mailto:sage [2007/11/20(火) 00:55:53 ID:???]
- 参照渡しってやつのせい?
$this->backend->getManager() をオブジェクト生成(new)と同じ感覚で使ってたけど、 もしそうなら大きな勘違いですよね。 newみたいに使う方法ってないでしょうか?
- 101 名前:nobodyさん mailto:sage [2007/11/20(火) 04:03:10 ID:???]
- >>100
そもそも、ManagerはObjectと違っていくつも作らんのよ。 だから、setParam()とかしてる時点で使い方間違ってるよ。 Objectにもたせなよ。
- 102 名前:nobodyさん mailto:sage [2007/11/20(火) 07:09:01 ID:???]
- getManager()の第2パラメータ指定すればシングルトンじゃなくなったはず。
- 103 名前:nobodyさん mailto:sage [2007/11/20(火) 18:19:20 ID:???]
- >>102
知らんかった… それはさておき、AppManagerにsetParamする状況なんてあるっけ? ActionForm使って、Action/View間で$this->af->setApp()/getApp()で 取りまわしたりすることはあるけど、結構イレギュラーな場合だけかな。
- 104 名前:101 mailto:sage [2007/11/20(火) 19:58:25 ID:???]
- >>102
おれも知らんかった…
- 105 名前:99 mailto:sage [2007/11/20(火) 22:31:06 ID:???]
- >>102
サンクスです!! >>101 >>103 マネージャを普通のクラスみたいに使ってます。。。 マネージャでクラス作ってnewする代わりに getManagerして。。。。 だめだろうか requireとかめんどいんだけど。
- 106 名前:nobodyさん mailto:sage [2007/11/20(火) 22:39:15 ID:???]
- 102みたいな機能があるってことは
そういう使い方も想定されてるのかね?
- 107 名前:101 mailto:sage [2007/11/21(水) 00:34:11 ID:???]
- うーん、キャッシュが鬱陶しいときじゃないかな?
AppManagerの同じメソッドで取りに行きたいけど、その間隙にUpdateしちゃってて、 そのままメソッドコールするとキャッシュが帰ってくるのがうっとうしいという状況。 たまにある。あまり設計がよくないせいかもしれんけど。
- 108 名前:nobodyさん mailto:sage [2007/11/21(水) 03:01:24 ID:???]
- >>105
ローダーとして使うなら、(AppId)_Controller.phpの$classに $class = array( ... 'foo' => 'Foo_Bar_Buzz', ... ); みたいに定義しておいて、 $obj = $this->backend->getObject('foo'); で取得するというのはどうだろうか。第2引数にtrueを指定しないと キャッシュされたオブジェクトが返るので注意ということで。
- 109 名前:nobodyさん [2007/12/14(金) 00:07:12 ID:qsT4Ha3J]
- -- actionform
'id' => array( 'form_type' => FORM_TYPE_SELECT, 'type' => array(VAR_TYPE_INT), 'option' => array(1=>'man', 2=>'woman') ) てなときに -- viewclass $this->af->set('id', array(1, 1, 2, 2, 1)); -- template {form_input name="id" emptyoption=""} ってやっても うまくselected="selected"が付いてくれないんだけど FORM_TYPE_SELECTで配列を扱うのは面倒くさいのかしら
- 110 名前:nobodyさん mailto:sage [2007/12/14(金) 01:37:02 ID:???]
- >>109
MultipuleのSelectタブ? オレは自分でガッツリとform_inputを作ってしまって、Ethnaデフォルトは もう使って無い。まぁ、面倒だけど意外と簡単ですよ。 Defaultのform_inputは対応してるのかな? Ethna_ViewClass::getFormInput_Html 見てるとしてないね。
- 111 名前:109 mailto:sage [2007/12/14(金) 07:29:06 ID:???]
- >>110
いや、マルチプルじゃなくてシングルセレクトなSelectタグの配列。 <select name="id[]"></select> <select name="id[]"></select> <select name="id[]"></select> ってな感じで使いたいんです。 そうか、Selectタグでarray(VAR_TYPE_〜〜)ってやると マルチプル扱いになるんね。 んでPOSTされたデータ上でマルチセレクトなSelectタグか Selectタグの配列かの見分けは付かないと。。。 自分でがっつり作り込むのは面倒なので ViewClassを継承したクラスで下のような変更加えて使ってみます。 マルチセレクトかシングルセレクトな配列か見分けが付かないのなら問題はないはず。 -- Ethna_ViewClass.php (function _getFormInput_Select($name, $def, $params)) -- 702行名ぐらい // default値の設定 if (isset($params['default'])) { $current_value = $params['default']; } else if (isset($def['default'])) { $current_value = $def['default']; } else { $current_value = array(); } - current_value = array_map('strval', to_array($current_value)); + if ($def['_form_counter'] < count($current_value)) { + $current_value = array_map('strval', to_array($current_value[$def['_form_counter']])); + } else { + $current_value = array_map('strval', to_array($current_value)); + } ありがとやんす。
- 112 名前:nobodyさん mailto:age [2007/12/25(火) 11:41:37 ID:???]
- ethna.jp/ ダメポ
中野人復旧頼む。リファレンスみたいよー
- 113 名前:nobodyさん [2008/01/09(水) 18:52:02 ID:I5nTeu3F]
- 上にログファイル出力についてあったけど
ログファイル名を固定ではなくて日付ごとに出すことってできないんですか? 今 log/app.log ↓ log/20080109.log みたいに。 ご存知の方いましたらお願いします。
- 114 名前:nobodyさん mailto:sage [2008/01/09(水) 21:49:38 ID:???]
- iniのログファイル名のところを文字列じゃなくて式にすればいいんじゃね?
もしくはEthna_Plugin_Logwriter_Fileあたりを継承して独自のLogwriterを作る。
- 115 名前:113 mailto:sage [2008/01/10(木) 15:35:23 ID:???]
- 独自で作るようにしました。
ありがとうございました。
- 116 名前:nobodyさん [2008/01/23(水) 21:01:59 ID:vMSy4RO6]
- おまいらさ、PHPは書けるけどEthnaなんてまるっきり知らん!って状態から
一通りEthnaでアプリ書けるようになるまでどのくらいかかった?
- 117 名前:nobodyさん mailto:sage [2008/01/23(水) 21:35:59 ID:???]
- >>116
PHP+MySQLを知らない状態、フレームワークというものが 存在するのも知らない状態から、2006/12上旬に勉強を初めて 2007/2下旬にユーザ登録型のサービスをひとつ立ち上げました。 ethnaの存在を知ったのは1月上旬だったかな? 平日昼間は別の仕事をしてたので、作業は夜+休日。 Linuxも素人だったので、むしろそっちの設定まわりで 取られた時間の方が多かったかも。
- 118 名前:nobodyさん mailto:sage [2008/01/24(木) 01:44:05 ID:???]
- S2Ethnaで、S2ContainerApplicationContext::registerAspect('/Dao$/', 'dao.interceptor'); を使って
diconファイルを作成しないでもDIできるようにしたいんですが、できた人いますか?
- 119 名前:nobodyさん mailto:sage [2008/01/24(木) 14:07:43 ID:???]
- いいから、今からEthna始める俺に使い方を教える作業に戻るんだ
- 120 名前:nobodyさん mailto:sage [2008/01/24(木) 19:24:16 ID:???]
- >>119
公式のチュートリアルでもすれば?
- 121 名前:nobodyさん [2008/01/27(日) 07:13:41 ID:Ce0IXCjK]
- 1,pearをapt-getでインストール
2,pearでethnaをインストール 3,pearでSmartyをインストール 4,Smarty付属のindex.phpを見る限りSmartyもPHPもちゃんと動いてる 5,HTTPで公開しているディレクトリで ethna add-project 。これもOK 6,そこをブラウザーで覗くと「Index of ディレクトリ名」とかいうメッセージが出る。 7,ethnaが作った www ディレクトリの下にある index.php を www でなく プロジェクトと同じディレクトリに置くと、画面真っ白。「Index of....」も出ない。 すんげー困ってます。諸先輩方、助けてくださいおながいします。
- 122 名前:nobodyさん mailto:sage [2008/01/27(日) 08:14:55 ID:???]
- index.phpのパス書き換えた?
- 123 名前:nobodyさん [2008/01/27(日) 08:48:45 ID:Ce0IXCjK]
- >>122
/ethnaアプリ/www/index.php のことでしょうか? require_onceで読んでる Controller クラスを絶対パスで読んでいるので変えていません。
- 124 名前:nobodyさん mailto:sage [2008/01/27(日) 23:57:46 ID:???]
- んじゃ、apacheの設定かな。
「Index of....」が出る時点でPHP用に設定されてないんだろうし。
- 125 名前:nobodyさん [2008/03/16(日) 23:46:07 ID:M19sLUbw]
- 開発半年でJavaをやっていてPHPのPの字も知らないのに、
今週からPHPの自社開発に引き戻されたんだが、 自分(19)より年上(45)のおじちゃんが開発経験が無いことが発覚した。 メンバーは22の開発未経験のお兄ちゃんのみ。 4末に納期....死にたいorz とりあえず、 やさしいPHP(高橋麻奈著) PHP+MySQL(小島まさご著) LLフレームワークBOOKS PEARライブラリ(佐久嶋ひろみ著) を3日で読んだんだが、 コントローラーで void main (string $class_name, [mixed $action_name = ""], [mixed $fallback_action_name = ""]) string $class_name: アプリケーションコントローラのクラス名 mixed $action_name: 指定のアクション名(省略可) mixed $fallback_action_name: アクションが決定できなかった場合に実行されるアクション名(省略可) 【ethna.jp/doc/(引用)】 string $class_name、mixed $action_name、mixed $fallback_action_nameは どこでセットしてやればいいのでしょうか、、、orz HTML(PHP)ソース上でどこで対応するのでしょうか? アプリケーションIDやらformやらvalueやらnameやらidやらclassやら頭が混乱してきてしまったよ。 そしておすすめの本あったら教えてください。。。
- 126 名前:nobodyさん mailto:sage [2008/03/17(月) 03:38:21 ID:???]
- このフレームワークに未来はありますか?
- 127 名前:nobodyさん mailto:sage [2008/03/17(月) 06:06:19 ID:???]
- Go to symfony!
- 128 名前:nobodyさん mailto:sage [2008/03/17(月) 13:41:15 ID:???]
- >>125
とりあえず ethna.jp/ethna-document-tutorial.html ここのチュートリアルから あとmainとか書かなくて良い 自動でセットしてくれるからな ソースに対応するのviewに書くsmartyのファイル
- 129 名前:nobodyさん [2008/03/17(月) 15:54:10 ID:5CS1AjM2]
- Ethna使い始めたんですけど、Ethnaって終了してますか?
Ethna公式サイトも更新ないし... ところで質問なんですけど、アプリケーションを通して使いたいユーザ定数は どこで定義すればいいのでしょうか? {APPID}_Controller.php に書けなんて事はないですよね?
- 130 名前:nobodyさん mailto:sage [2008/03/17(月) 23:08:03 ID:???]
- >>129
EthnaはGreeがある限りあるんじゃないかな ユーザ定義は自分でファイル作って コントローラでインクルードしてたかなぁ
- 131 名前:129 [2008/03/18(火) 09:20:11 ID:ZfBa+neK]
- >>130
レスありがとうございます。 >EthnaはGreeがある限りあるんじゃないかな GreeはID持ってるけど全然ログインしてない。 なんか盛り上がりに欠けるんですよね〜。 >ユーザ定義は自分でファイル作って >コントローラでインクルードしてたかなぁ なるほど、その手がありますね。
- 132 名前:nobodyさん [2008/03/18(火) 09:23:30 ID:ZfBa+neK]
- form で smartyの {html_select_date} とかを使いたいんですけど、
FORM_TYPE_DATETIMEとかでは使えないですよね? --action-form-- $form = array( 'Year' => array('form_type' => FORM_TYPE_SELECT, 'option' => range(1900,2008), 'Month' => array('form_type' => FORM_TYPE_SELECT, 'option' => range(1,12), 'Day' => array('form_type' => FORM_TYPE_SELECT, 'option' => range(1,31), ); --template-- {form_input name='Year'}{form_input name='Month'}{form_input name='Day'} とかやるしかないんですかね?
- 133 名前:125 mailto:sage [2008/03/18(火) 13:02:00 ID:???]
- >>128
読んでみたが画面単位でアクションクラスを作成するって把握でいいのでしょうか? EX: 検索ボタン、登録ボタンがともに存在する画面 ・生徒情報画面(生徒を検索、登録ができる) ・サークル登録画面(サークルを検索、登録する) だったらそれぞれの画面単位でアクションクラスを作成するってことかな.... 都内で詳しい方いたら相談乗っていただけると 助かります..... ethna77@55mail.cc
- 134 名前:nobodyさん mailto:sage [2008/03/18(火) 19:00:29 ID:???]
- >>133
アクション単位でアクションクラスを viewは必要な画面数分だけ 生徒情報一覧を出すアクション 生徒を検索するアクション 生徒を登録するアクション サークル情報一覧を出すアクション サークルを検索するアクション サークルを登録するアクション viewは 生徒情報を出すview 生徒情報を登録するview サークルを登録するview サークル情報を出すview 登録ありがとうview って感じ?
- 135 名前:125,133の人 mailto:ethna77@55mail.cc [2008/03/18(火) 20:26:02 ID:???]
- >>134
そうなのか! ありがとうございます。 Javaのフレームワークよりより難しいですね。 ではそのアクション単位で アクションオブジェクトを作ればいいって把握でいい感じなのかな? 頑張って沢山ビューつくるよorz タブ切り替えでアクションほしいとか泣きたいよ、ママー。
- 136 名前:nobodyさん mailto:sage [2008/03/18(火) 20:47:52 ID:???]
- >>135
交通費込みで金くれるなら東京までいくぜw viewは共通化出きる所を共通化してincludeして再利用 あとactionの方の共通化はmanager等を使う んでアクションのオブジェクト等はコントローラ側で勝手に生成してくれるので 実際に作製必要な処理などは各アクションのperformで処理を 表示関連の処理が必要な場合はviewクラス作って viewクラスのpreforwardで処理をすればいい
- 137 名前:135 mailto:ethna77@55mail.cc [2008/03/19(水) 01:55:57 ID:???]
- >>136
ど こ か ら く る ん だwww 北海道とかだったら...orz かっ身体で払います。 近辺なら出せないこともないです。 ethna77@55mail.cc 明日早速ググってみる。 親切にありがとうございます。 周りの人があまりに自分の開発でEthnaの本(サイト)見てるときは目付きがイっててこわがってる....。 客先PGなので自社のイメージなんて、 納会やら帰社日ぐらいで 若いだけで社長の隣に座らされてるから ニコニコしてる穏やかな人だったらしい。
- 138 名前:nobodyさん mailto:sage [2008/03/26(水) 00:45:59 ID:???]
- CSVのデータって通常どこで生成するもの?
やっぱりヴュー? 抽出用のデータをアクションで受け取って、ビューに渡して出力でいいのかな? データ量が多いとgetAllとかするとメモリオーバーで止まっちゃうからAppManager とか使えないよね。 ViewからAppManagerを呼んでAppManagerからCSVを出力って邪道?
- 139 名前:nobodyさん mailto:sage [2008/03/27(木) 16:27:33 ID:???]
- 例えば以下の様に、ラジオボタンによって入力欄のどちらを利用するかを選択させたい場合
<input type="radio" name="typeab" value="1">Aタイプ<br> <textarea name="input1"></textarea><br> <input type="radio" name="typeab" value="2">Bタイプ<br> <input type="text" name="input2"> ActionForm内にtypeabとテンプレートでの{form_input name="typeab".}をスマートに書く方法ありませんかね? 結局ActionFormに普通に書いてテンプレートはradioのみ、html直書きでchecked処理は別途行なう、と言う形になってしまうんですが。
- 140 名前:nobodyさん mailto:sage [2008/03/29(土) 03:19:28 ID:???]
- >>138
>CSVのデータって通常どこで生成するもの? >やっぱりヴュー? そのCSVをダウンロードさせたいのか? であれば、自分はviewじゃなくてactionだな。 ロジックはAppManagerに書くけど。 >抽出用のデータをアクションで受け取って、ビューに渡して出力でいいのかな? View=HTML-Templateに変数を渡すだけって考えた方が良いよ。 >データ量が多いとgetAllとかするとメモリオーバーで止まっちゃうからAppManager >とか使えないよね。 とりあえず気にするな。メモリが足りなさそうだったらコントローラの最初で ini_set('memory_limit', '32M'); とかすれば良い。しょぼいレンタルサーバとかじゃないんだろ?さすがに。 >ViewからAppManagerを呼んでAppManagerからCSVを出力って邪道? 正解だと思う。Viewまで行く必要ないと思うがな。
- 141 名前:nobodyさん mailto:sage [2008/03/29(土) 03:26:33 ID:???]
- >>133
>EX: >検索ボタン、登録ボタンがともに存在する画面 >・生徒情報画面(生徒を検索、登録ができる) >・サークル登録画面(サークルを検索、登録する) 学校のコミュニティサイトでも作ってるのか? まぁ、Ethna慣れれば↑あたりは1日あれば作れるよ。仕様とHTMLもらってればな。 頑張れ。
- 142 名前:nobodyさん mailto:sage [2008/03/29(土) 03:34:30 ID:???]
- >>139
>ActionForm内にtypeabとテンプレートでの{form_input name="typeab".}をスマートに書く方法 まず、Smartyのデリミタは { } じゃなくて{{ }} とか <{ }>にした方が良いよ。 JavaScriptとCSSで { } よく使ってうっとうしくなるから。 確かに、Ethnaデフォルトのフォームへルパはあんまりできが良いとは思えない。 ActionForm自体は良いんだけど。 <input type="radio" name="typeab" value="1">Aタイプ<br> <textarea name="input1"></textarea><br> <input type="radio" name="typeab" value="2">Bタイプ<br> <input type="text" name="input2"> は、自分だとEthnaのテンプレートでは <{form_input name="typeab" value="1" id="uki1"}><br> <{form_input name="input1" attr="id='hoge1'"}><br> <{form_input name="typeab" value="2" id="uki2"}><br> <{form_input name="input2" attr="id='hoge2'"}><br> ってやる。Smarty関数form_inputは全部自作。 で、これらのFormにはIDを振っておいてあとでJavaScriptでこっちのラジオ選択したら こっちのテキストエリアが書き込みできて、あっちのテキストエリアは 書き込み負荷にして・・・とかやるます。IDつけときゃ、とりあえずあとでJavaScriptで何とかなる。 どうせ入力補佐的なことがしたいんでしょ?
- 143 名前:nobodyさん mailto:sage [2008/04/08(火) 21:52:44 ID:???]
- 最初にController内でちょっとした計算をしたとして、その値を再度ActionClass内で使いたい場合ってどこに置いておけばよいんでしょうか?
sessionに置くのが素直なんでしょうけど、それ以外だと手軽な手はありませんかね?
- 144 名前:138 [2008/04/17(木) 18:27:49 ID:LCosruMP]
- >>140
サンクスコ action=>AppManagerでCSV出力で対応することにしました。 smartyの html_select_dateのようなヘルパは用意されていないですよね? なさそうなのでなるべく本体に修正を入れないように {APP_ID}_ViewClassで オーバーライドして作ったけど、なんかスマートじゃないですけど、何かいい 方法ありますか? あと、検索フォームなど複数の画面で共通して使いたいフォームはどこで定義 するのが正解ですか? 今は{APP_ID}_ViewClassに function addQueryForm(){ $this->af->form = array_merge($this->af->form, array(〜)); } なんて書いていて、{APP_ID}_ViewClass::preforward() から呼んでます。 FormClassに書くべきなのでしょうか?
- 145 名前:nobodyさん [2008/04/17(木) 18:34:38 ID:LCosruMP]
- Viewに書いたのには
1.フォームを表示するための処理なのでView 2.受け取るフォームは1画面なのでActionClassなどでやるべきじゃないよね? と、一応 私なりの理由があるのですが、フレームワークの作法的にはどうする のが正解なのでしょうか? 質問ばかりですみません。
- 146 名前:nobodyさん mailto:sage [2008/04/18(金) 17:41:26 ID:???]
- つーかEthnaってもう終ってます?
- 147 名前:nobodyさん mailto:sage [2008/04/18(金) 17:46:41 ID:???]
- まあ環境が自由でこれから新規で何か作ろうという時に使うもんではないな
- 148 名前:140 mailto:sage [2008/04/18(金) 18:13:47 ID:???]
- >>144
> smartyの html_select_dateのようなヘルパ EthnaでInputタグ吐き出し系のヘルパ(Smartyプラグイン)ものは、 ActionFormを絡めないと効果半減以下なので、Smarty標準のものは使わないなー。 ActionFormはグローバルで取れるから。 日付とかは、セレクトタブで選ばせるのは意外とツライかもなので、 ttp://labs.spookies.co.jp/static/ とかのを使ったSmartyプラグインとか作った方がいいのかも。 > 複数の画面で共通して使いたいフォーム これは結構悩みどころなんだけど、そういう場合は、フローとしても 共有部分が根っこにひとつありそうなものなので、そのActionFromで定義。 その時に、 var $form_template で定義すると、必要なフォーム定義だけ var $form = array( 'use_form1' => array(), 'use_form2' => array(),); てやると定義を再記述せずに良い。で、「あーだけど、'use_form1' は基本 必須だけど、ここ(以下のAction)だけは必須にしたくないなー」っていうときは、 'use_form1' => array( 'required' => false, ), とかすると、required=>falseを除いて全部定義を引き継ぐようになる。 最初、'use_form1' => array(),とか書くのさえダルイなーとか思ってたけど、 これ結構合理的。 あと、あんまり共有化を考えるとあとで縛られまくるから、ある程度差が出てきたら 「えい」ってコピペするのが吉。一度それで死にそうになったことがあるので。
- 149 名前:140 mailto:sage [2008/04/18(金) 18:15:30 ID:???]
- つーか、138=146ならもう書く気なくなた
- 150 名前:144 [2008/04/18(金) 18:36:06 ID:ImKomyWi]
- >>148
たびたび、どうもです。 /public/ /users/ /suppliers/ /admins/ とディレクトリを別けていて/public/のページにすべて検索フォームをつけたいんだけど action/public.php の $formに書くのが吉ということですね。 あと、検索、一覧、編集というような画面を作るとき面倒なので ActionFormを一つにして 変数で処理を分けているんですが、検索のときに用いる $form定義と 編集のときに用いる $form定義がかぶるんですが、これって対処するものですか? 表示・入力用 = id, pass, name とかで 検索用= s_id, s_pass, s_name とかにするとか? このへんイマイチわかっていません。 お願いいたします。
- 151 名前:140 mailto:sage [2008/04/21(月) 22:59:35 ID:???]
- >>145
>Viewに書いたのには.... それはそれで一つの解だと思う。正解は無いから自分にあった方法を見つければ。 自分の場合は、EthnaはActionForm==ActionClassなところがあるから、 ActionFormの動的な定義(セレクトタブの中身とか、ラジオの選択肢とか)なんかはActionClassのprepare()でやることが多い。 本当はActionFormのコンストラクタでやれるといいのだけど、ActionFormでは AppManagerを取れないから。(DBも取れなかったのかもな・・。) それに、あるActionFormをつかうフローでは、そのフロー以下では そのActionFromって継続的に定義されているべきなことが多い。 だから、大元で定義しちゃえば、あとはparent::prepare();でオk。 とにかく、parent::prepare();とparent::perform()を効率的に使うと良い。 使いすぎると、「あれれれれ・・・・・?どこで定義してるんだ?」になって しまうけど、まぁ通常のコードよりはスパゲティ化しにくい。少なくともActionで定義というルールを作っておけば。
- 152 名前:140 mailto:sage [2008/04/21(月) 23:03:23 ID:???]
- >>150
>action/public.php の $formに書くのが吉ということですね。 それ以降で、特にActionForm定義にカスタマイズが無ければそれでOK。 あとは、それ以降のActionClassでは定義のみの空のクラスを作ればOKなんで。 逆に、action/public以下で細かいActionForm定義を加えたい場合は、 ActionClassのprepare()でやっても良いし、 もうちょい頻繁に定義を書き換えたい場合はaction/publicの$formではなく $form_templateにしておいて、各それ以下のclassで$formを名前だけ空配列で 定義。カスタマイズするところだけを追加定義。
- 153 名前:140 mailto:sage [2008/04/21(月) 23:08:12 ID:???]
- >>150
>検索のときに用いる $form定義と 編集のときに用いる$form定義がかぶる これは自分はそのままやってる。 というのは、結局DBを背景に考えているから。 学校名で検索ってあったら、検索する時も、編集する時も、schoolテーブルの school_nameフィールドから検索すると思うが、その時に検索時と編集で formキーが違うとなんかうっとうしい。 でも、検索時はschool_nameはnot requiredだし、編集時はrequriedだから・・・ という場合にやっぱりさっきの動的なActionFormの定義が役に立つ。 んで、これをさらに共通化させて、 action/public action/admins で同じForm定義を使い回そう・・・・とか考えるとハマる。ここは素直に面倒でもどっちか 先に作ってからコピペ。そのうち仕様も変わるだろうし、pucblicとadminsで違うものに なっていくのは目に見えているからな。
- 154 名前:138 !(146) mailto:sage [2008/04/23(水) 00:39:20 ID:???]
- >>140様 超、ありがとうございます。
規制されていたので返信が遅くなりました。 聞きたいことは山ほどあるんですが..........w フレームワークを使うのは cakePHPをメンテナンスで少し触ったんですが 国産でいいのないかなぁと探して見つけたのが Ethnaだったんです。 Greeでも使われているし、それなりに信頼できるのかなぁ?ということと smartyはしょっちゅう使っていたのでヘルパに smartyが使われいたので 他のは全然評価もせずに Ethnaに決めてしまって、いまかなり苦しんでいます。 使用人口が少ないようで、WEB上にドキュメントが少ない(´・ω・`) 途中ZFに切り替えようかとも思いましたが、ZFはバージョンアップごとに色々 問題があるようなので、やめときました。
- 155 名前:140 mailto:sage [2008/04/23(水) 21:44:20 ID:???]
- Ethnaは小回りが利くっていうか、軽い。まぁちろっと使う分には便利だと思う。
Cakeは一度使ってみるかと思いつつ、コード見て「んー。汚い・・・」って思って使ってない。 SynfonyとかcakePHPとかガッツリ使うほど大きな案件請けてるわけじゃないんよ。 あと、Ethna枯れてるしな。FWって枯れ時が実案件で使い時っつーところもあるし。
- 156 名前:138 [2008/04/23(水) 22:26:16 ID:EWcSFprb]
- またまた規制されてしまった
最近、月のうち半分以上が規制されている感じ… なので携帯からです 一度書いたのになんかチェックのページが表示されて、戻ってもう一度送信しろと書いてあったからその通りしたら消えた… >>155 しかし、ドキュメント少なすぎますよね? 古いバージョンのものとか混在しているし… 今は大分慣れてきたので、普通のことをやろうとするのは大分楽にできるようになりましたが、 ちょっと凝ったことをやろうとすると、簡単にはまる。 ちなみに140さんは、自前のテンプレートを作成してしようしていますか? あと、今はeacceleratorのある環境で実行しているのですが、ない場合って結構重たいのでしょうか? 今作っているのが階層が結構深くなるんですが、深くなるほど処理は重くなりますよね?
- 157 名前:140 mailto:sage [2008/04/25(金) 00:32:52 ID:???]
- >>156
ドキュメント無い分はコード読んで何とかしたかな。3年前はドキュメント皆無だったし。 当時はプログラムあまりしらなかったから大変だったけど勉強になった。 >>138はオレが昔書き散らしたものとかどっかで読んでるかも。 基本的にEthnaでやろうとしてできなかったことは無い。 ActionChainと呼ばれるらしきものも強引気味にやったし。 まぁ、たいしたものを作ってないっていうのもあるけど、1〜2人ならEthnaで十分。 >ちなみに140さんは、自前のテンプレートを作成してしようしていますか? 自前のテンプレートって、Smarty以外でってこと?Smarty慣れちゃって、それしか使ってないなー。 Smarty重いっていうけど、早く作れるし。 eAccは、普通レンサバに無いので使ったこと無いです。 サイト立ち上げ当初は速くよりも早く作れることなんで。。。 都内なら会社来てもらえば色々説明もできます。 ステ fromdustman@imap.cc
- 158 名前:nobodyさん mailto:sage [2008/04/25(金) 13:09:06 ID:???]
- 都内ならPHP勉強会でたまに取りあげたりしてるんで是非。
>あと、今はeacceleratorのある環境で実行しているのですが、ない場合って結構重たいのでしょうか? >今作っているのが階層が結構深くなるんですが、深くなるほど処理は重くなりますよね? 階層はたぶん関係ないかと。eAあった方が早いのは間違いないですがよほどPVがない限り気になりません。 たいていフレークワーク本体よりは時間のかかるロジックがボトルネックになります。
- 159 名前:140 mailto:sage [2008/04/26(土) 00:21:00 ID:???]
- >>158
んー、PHP勉強会は昔出たことあるけどあんまり勉強会で話すことも無いかと思う。 別に目新しいことしてるわけじゃないし、良い意味で枯れかけの技術だと思ってるんで。 なんで、できるとしたら、ここでやってるような 「これ、わかんないんだけど、どうしたらいい?」 「こんな感じでEthnaコード書いてるけどどう?」 ってのに対話するぐらいで。 それはそれで楽しいけど、それってPHP勉強会の雰囲気じゃない気がするんだよね。
- 160 名前:nobodyさん [2008/05/02(金) 02:58:13 ID:DNyHDGY2]
- もうすぐ 2.3.5 が出るみたいだね。
ここ3週間でコミッタが復活したらしい。 svn.sourceforge.jp/cgi-bin/viewcvs.cgi/ethna/trunk/CHANGES?rev=518&root=ethna&view=markup
- 161 名前:nobodyさん mailto:sage [2008/05/03(土) 10:18:16 ID:???]
- 一週間いじってみたがこんな致命的バグの潜んだFWは使う気になれん
- 162 名前:nobodyさん mailto:sage [2008/05/03(土) 16:28:30 ID:???]
- >>161
具体的に書いた方がみんな幸せになれるから 具体的にお願いします。
- 163 名前:nobodyさん mailto:sage [2008/05/03(土) 16:43:32 ID:???]
- 志村ーコピペコピペ
- 164 名前:nobodyさん mailto:sage [2008/05/03(土) 23:30:29 ID:???]
- >>161
pc11.2ch.net/test/read.cgi/php/1177683436/276 276 名前:nobodyさん[sage] 投稿日:2008/04/30(水) 12:41:32 ID:??? 一週間いじってみたがこんな致命的バグの潜んだFWは使う気になれん pc11.2ch.net/test/read.cgi/php/1205475360/765 765 名前:nobodyさん[sage] 投稿日:2008/04/29(火) 00:30:20 ID:??? 一週間いじってみたがこんな致命的バグの潜んだFWは使う気になれん
- 165 名前:nobodyさん [2008/05/04(日) 14:07:09 ID:NE4g0gE+]
- [project]-ini.php
で通常DB使う場合に設定する "dsn"=>"mysql://mysql_user:mysql_userpass@mysql_server/mysql_db", といった記述なんですが、 mysql_server部分 を動的に変えたい場合、何か良い方法はないでしょうか。 [project]-ini.php 内では $this->aff->get()とか使用できないので。。。
- 166 名前:nobodyさん mailto:sage [2008/05/07(水) 09:06:27 ID:???]
- >>165
それぞれのdsnにキーを割り付けて、getDBで選択するという手はだめかな ethna.jp/ethna-document-dev_guide-db.html#zc5316fe
- 167 名前:nobodyさん mailto:sage [2008/05/08(木) 18:10:16 ID:???]
- 2.3.5 リリースsage
- 168 名前:nobodyさん [2008/05/09(金) 20:41:27 ID:lfzI+vCi]
- validate について質問
1.inputフォーム 2.validate->確認画面 3.DB更新&完了画面 という遷移をしたい場合 validateって3でも必要ですか? 2でvalidateが通った後無理やり GET引数に?varname=XXXX...略、とか したら、validateが通っていないデータで更新できてしまいますよね? あと、formでpostを繰り返して遷移していく場合、もどると期限切れに なりますよね?これって 302とかを使って解決すると思いますが、 Ethna的にはどのように書くのでしょうか? 1. GET なにがしかの form 2. POST confirm [validate] => 302 confirmed 3. GET confirmed 4. POST do => 302 done 5. GET done
- 169 名前:nobodyさん mailto:sage [2008/05/10(土) 01:48:48 ID:???]
- >>168
ヒント: class DB更新&完了画面Action extends 確認画面Action { function perform() { DB更新 return 完了画面のview } }
- 170 名前:nobodyさん mailto:sage [2008/05/10(土) 12:38:54 ID:???]
- >>168
トランザクションチェックやら、CSRFチェックやら、 validate済みデータをセッションに保存しておくやらすればいいんじゃね?
- 171 名前:nobodyさん [2008/05/15(木) 18:42:33 ID:luXnYgdJ]
- >>165
ethna.jp/index.php?cmd=read&page=ethna-document-dev_guide-db にある、「複数のDBオブジェクトを扱う場合」を参考にしてください。
- 172 名前:nobodyさん mailto:sage [2008/05/15(木) 18:46:19 ID:???]
- >>168
3でもvalidateは必要です。 複数の画面を遷移しながら移動する場合はセッションに保存するのがてっとりばやいでしょう。
- 173 名前:nobodyさん mailto:sage [2008/05/16(金) 09:22:57 ID:???]
- 戦後教育は文部省と日教組の不毛のイデオロギー対立により本来の教育を蔑ろにし、主役である子供達を放置してきた。最初にその犠牲となっ
たのがいわゆる「団塊チルドレン」と呼ばれる世代である。彼らは歪んだ「権利・自由・平等」を教えられ、「責任・義務」を教えられないま まに育った。日教組は彼らに経済と言う物差ししか与える事ができず、信念・哲学・自尊心という価値からは程遠い「金と物」にしか価値を見 出せない貧しい精神を育んだのだ。この事は「失われた十年」と呼ばれる90年代に於ける彼らの生き様に大きく影響した。 子供は幼児期に於いて父性と母性の対比の中で社会性を獲得する。「亭主元気で留守が良い」と言うコピーがはやったが、父性不在の家庭はや がて「団塊チルドレン」の社会性の無さの原因となった。当時オバタリアンと呼ばれた世代は、戦後処理もろくに済んでいないのに平気で海外 へ出かけ、金に飽かせてブランド商品を買い漁り、傲慢さを世界中にまき散らした。彼らの世代に特徴的であるこの品性・品行の悪さは、後の 世代のライフ・スタイルにまで影響を与えた。それ以上に、欧米諸国が未だに日本人を蔑視し、アジア諸国が不信感を持ち続けている事への鈍 感は不幸でさえある。団塊の世代が戦後の営みの中で経済力に見合う人生観や価値観、広義の品性・品行やモラルを獲得していれば日本社会は ここまで歪まなかっただろう。 90年代は「失われた十年」と呼ばれている。経済と言う物差ししか持たなかった我々は、旧来の発想で経済的な豊かさを追求し続けたが故にバ ブルの崩壊をもたらした。その時不幸だったのは「我々は何処へ行くのか?」と言う根源的な迷いに気かなかった事だ。この事が90年代を無為 に浪費した最大の原因である。団塊の世代は欧米を追う間は素晴らしい能力を発揮したが、追いついた後のビジョンを描く想像力が欠如してい た。彼らの責任では無い。社会が彼らにその様な能力を要求しなかったのだ。村上龍の「あの金で何が買えたか」が売れたと聞くが、悲しいの は未だにその程度の次元でしかバブルを検証できないメンタリティーの低さである。検証すべきは「何故我々が貧しい価値観しか持ち得なかっ たのか」と言う事である筈だ。まさしく教育の問題である。冒頭で述べた様に信念・哲学・自尊心を育む努力を怠らなければ、もっと違った社 会があった筈である。
- 174 名前:nobodyさん [2008/05/18(日) 05:34:12 ID:5L4/s+Ln]
- Ethnaの中の人、全然やる気無い感じが伝わってくる
- 175 名前:nobodyさん mailto:sage [2008/05/18(日) 13:33:05 ID:???]
- >>174
どのへん?
- 176 名前:nobodyさん mailto:sage [2008/05/18(日) 17:29:54 ID:???]
- DBまわりがよくなればいいのにねえ
|

|