【PHP】Ethna part.2【国産フレームワーク】
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2007/08/03(金) 08:15:18ID:BNMV6wHxEthna -PHPウェブアプリケーションフレームワーク-
http://ethna.jp/
SourceForge.jp: Project Info - Ethna
http://sourceforge.jp/projects/ethna/
クラスドキュメント(phpDocumentor)
http://ethna.jp/doc/
前スレ
【PHPフレームワーク】Ethna【スケルトン自動作成】
http://pc11.2ch.net/test/read.cgi/php/1123070439/
0069nobodyさん
2007/11/02(金) 00:16:52ID:???actionformのsetはactionclassのperformに入る前の段階
つまり、authenticateとprepareで行うべき。
viewでやるのはもってのほか。
AppObject/AppManagerなどのModelにも極力行かすべきではない。
というルール付けでやってMVC意識してる。
007068
2007/11/02(金) 00:42:53ID:???0072nobodyさん
2007/11/02(金) 15:32:51ID:???その辺はMVCのジレンマだと思う。
効率的には、Actionで取得した情報をViewで使えるのがいいけど
特定のActionを通過しないとView側で正しい情報を利用できない
となると、処理と表示が分離されないことになるから微妙。
自分は多少無駄だとは思いつつも、ActionとViewでそれぞれ取得
しているよ。結果をキャッシュできるものはキャッシュしたり、memcachedを
使ったりして、DBの負荷は上げないように少し考えてはいるけど。
007369
2007/11/02(金) 17:06:05ID:???それ af->setApp() するときだよね?
>>68 は、af->set()って書いてるから、フォームの値を調整したいんだろ?
そう思って>>69 の書き込みなんだが。
> 自分は多少無駄だとは思いつつも
AppObjectはキャッシュ持ってるから一回取りに行った値は保存してる。
なんでAppObject使ってやればActionで判定にとった値をViewで
使いまわしてもDBには行かない。
その辺はORMの仕事じゃないかとも思うけど。
0074nobodyさん
2007/11/02(金) 17:10:22ID:???007568
2007/11/02(金) 23:44:12ID:???MVCの切り口でいくと
やはりそうなるんですかね。>72 >73
キャッシュされているにせよ
viewでもう一回AppObject取り直して
af->setApp()を数行書くってのも、たいそう無駄な気がしてます。
結局どんなAppObjectが渡って来るか
view自体知ってなくてはならない訳だし、
俺の場合描画上の小細工はSmartyのテンプレートにやらせる事が
多いんで、
それだったら、set()とかsetApp()ひっくるめて、
ActionForm全体を渡すから、viewさんあとは描画よろしく。
って方が潔い気がしてます。
Ethnaは viewの定義省略できるんだし、
ワザワザ2,3行だけのViewのファイル作らなくても良いかなと
思ってる。
こういうのMVC的にはダメなのかな。
007669
2007/11/03(土) 00:15:59ID:???とりあえず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いじれるのは強力だからな。
007769
2007/11/03(土) 00:29:22ID:???>キャッシュされているにせよ
>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()
のみ
ってなる。
007868
2007/11/03(土) 01:16:56ID:???>もうひとつは、forwardをいじりたい場合。
これは分る。確かにforwardいじりたい時もある。
>viewを造ってないと、結局違うActionに同じsetAppするようになる。
>ある意味、そっちの方が絶対使い回しできない。
そうかなー。viewを作ってあったにせよ、viewに渡すものが抽象化
しきれてなければ、結局使い回せない気がする。
一番抽象的で、どんなviewでも理解できるもの、つまりはActionFormを
渡すというお約束が、ゆるくて最強の接点だと思うんだが。
007968
2007/11/03(土) 01:33:38ID:???>AppObject/AppManagerのキャッシュを利かせるには、
>同じfilter/offset/limit/orderでDBからfetchさせる必要があるから。
勉強になります。
008069
2007/11/03(土) 02:54:08ID:???>渡すというお約束が、ゆるくて最強の接点だと思うんだが。
その辺は、開発スタイルとか案件に依るんじゃない?
取りあえず「オレはこういう感じでやってる」ってだけで、別に色々な方法があると思う。
使ってるうちに変わるだろうし、ってオレがそうなんだけど。
そのへんのゆるさはEthnaのいいところだし、一人や数人でやる分には気楽。
0081nobodyさん
2007/11/03(土) 15:20:42ID:???俺はjoinのやり方が分からなくて涙目だったので、いまだにSQL書いてるよ。
ZnedFrameworkも試してみたけど、Zend_Db_Tableが全然使えないので
結局そっちもSQLというチンカスっぷりだぜ。
0082nobodyさん
2007/11/03(土) 16:01:56ID:???なんで漏れもSQL書いてるよ。AppObjectはテーブルのレコードと1対1でやり取りする場面だけ
使ってる。検索して一覧引っ張ってくるようなケースは、joinする場合が多いし、
where文SQLで書く方が慣れているんで、SQL書いた処理をAppManagerに詰め込んでるよ。
0083nobodyさん
2007/11/05(月) 13:41:20ID:???もっとも、それやった香具師がMLで「table読むときはカラム名小文字になるのに、viweを読むと大文字になる。がっでむ!」と言っていたので、あまりお勧めではないのかもしれん。
……S2EthnaでS2Dao.PHPか?w
0084nobodyさん
2007/11/07(水) 18:33:33ID:NnNW38Hz> 入力の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されたデータが変換されなくて悩んでます。
どなたかご教授ください。よろしくお願いします。
0085nobodyさん
2007/11/07(水) 18:36:31ID:???0086nobodyさん
2007/11/08(木) 01:13:51ID:Wm9UgOj0これがいまいちわからないのです。フォームヘルパでセレクトボックスのoptionの値を
データベースから取得したいと考えてまして。
Ethnaの開発マニュアルみていたら、アクションフォームで
Optionの設定を'address,prefecture'に書けば見たいな事わかったんですが、、
プロパティの値ってのがよくわからないんです・・・
だれかわかる人教えてください。
0087nobodyさん
2007/11/08(木) 02:07:11ID:???同マネージャ内の別関数(fuga)を呼び出したい場合、
以下のどちらが適しているでしょうか?
$Hoge_m =& $this->backend->getManager('Hoge');
$Hoge_m->fuga();
or
$this->fuga();
0088nobodyさん
2007/11/08(木) 02:29:21ID:Wm9UgOj0$this->fuga();
008986
2007/11/08(木) 02:56:20ID:???もう一点非常に疑問点があるのですが、
$Hoge_m =& $this->backend->getManager('Hoge');
と
$Hoge_m = $this->backend->getManager('Hoge');
ってどう違うのでしょうか?
この&って参照渡しでしょうか?
参照渡しって単なる変数だけでなく、オブジェクトに対しても
利用可能なのでしょうか?
0090nobodyさん
2007/11/08(木) 16:06:31ID:???http://www.php.net/manual/ja/language.references.php
参照はスカラー型でもオブジェクトや配列でも使えるよ。
余談だけど、PHP5以降では関数の戻り値や変数への代入なんかで
同じオブジェクトを指し示している必要がないのであれば、参照渡しを
するべきではないので注意。メモリの効率化とか思っていると、むしろ
無駄に消費されることがある。
http://www.phppro.jp/news/304
PHP4/5に対応するEthna(本体)には関係ない話だけどね。
0091nobodyさん
2007/11/11(日) 12:12:44ID:???AjaxヘルパやHTMLヘルパーなんかは装備されないんでしょうか?
あと、ルーティングをもう少し改善して欲しいですな。
0092nobodyさん
2007/11/12(月) 15:41:42ID:???0093nobodyさん
2007/11/13(火) 01:26:05ID:41cf2n7r構築するタイミングがわからない
ActionForm辺りで
$this->auth =& new $this->backend->ctl->class['auth'](&$this->backend->ctl)
ってやってあげればいいんだべか。
Controllerのコンストラクタで構築するのはちょっくら早い感じだし
どうするとスマートなんでげしょ。
009593
2007/11/13(火) 23:45:08ID:41cf2n7r0096nobodyさん
2007/11/14(水) 04:30:56ID:???AppManager 内で
throwして
アクション内でcatchしたい場合、
どのように記述すればよいでしょうか?
単にAppManager内でthrowすると
PHP Fatal error: Uncaught exception 'Exception'
がおきてしまいます
0097nobodyさん
2007/11/16(金) 03:14:04ID:???エラーが発生したらトランザクション中の後続するSQLはスキップしそうだけどね
そうじゃなきゃあんまりでしょw
0099nobodyさん
2007/11/19(月) 22:11:25ID:???$obj->setParam( $param );
$obj =& $this->backend->getManager('hoge');
みたいな感じにすると
$obj->setParam( $param );が既になされている状態になる理由が
よくわからんです。
010099
2007/11/20(火) 00:55:53ID:???$this->backend->getManager()
をオブジェクト生成(new)と同じ感覚で使ってたけど、
もしそうなら大きな勘違いですよね。
newみたいに使う方法ってないでしょうか?
0101nobodyさん
2007/11/20(火) 04:03:10ID:???そもそも、ManagerはObjectと違っていくつも作らんのよ。
だから、setParam()とかしてる時点で使い方間違ってるよ。
Objectにもたせなよ。
0102nobodyさん
2007/11/20(火) 07:09:01ID:???0103nobodyさん
2007/11/20(火) 18:19:20ID:???知らんかった…
それはさておき、AppManagerにsetParamする状況なんてあるっけ?
ActionForm使って、Action/View間で$this->af->setApp()/getApp()で
取りまわしたりすることはあるけど、結構イレギュラーな場合だけかな。
010599
2007/11/20(火) 22:31:06ID:???サンクスです!!
>>101
>>103
マネージャを普通のクラスみたいに使ってます。。。
マネージャでクラス作ってnewする代わりに
getManagerして。。。。
だめだろうか
requireとかめんどいんだけど。
0106nobodyさん
2007/11/20(火) 22:39:15ID:???そういう使い方も想定されてるのかね?
0107101
2007/11/21(水) 00:34:11ID:???AppManagerの同じメソッドで取りに行きたいけど、その間隙にUpdateしちゃってて、
そのままメソッドコールするとキャッシュが帰ってくるのがうっとうしいという状況。
たまにある。あまり設計がよくないせいかもしれんけど。
0108nobodyさん
2007/11/21(水) 03:01:24ID:???ローダーとして使うなら、(AppId)_Controller.phpの$classに
$class = array(
...
'foo' => 'Foo_Bar_Buzz',
...
);
みたいに定義しておいて、
$obj = $this->backend->getObject('foo');
で取得するというのはどうだろうか。第2引数にtrueを指定しないと
キャッシュされたオブジェクトが返るので注意ということで。
0109nobodyさん
2007/12/14(金) 00:07:12ID:qsT4Ha3J'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で配列を扱うのは面倒くさいのかしら
0110nobodyさん
2007/12/14(金) 01:37:02ID:???MultipuleのSelectタブ?
オレは自分でガッツリとform_inputを作ってしまって、Ethnaデフォルトは
もう使って無い。まぁ、面倒だけど意外と簡単ですよ。
Defaultのform_inputは対応してるのかな?
Ethna_ViewClass::getFormInput_Html
見てるとしてないね。
0111109
2007/12/14(金) 07:29:06ID:???いや、マルチプルじゃなくてシングルセレクトな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));
+ }
ありがとやんす。
0112nobodyさん
2007/12/25(火) 11:41:37ID:???中野人復旧頼む。リファレンスみたいよー
0113nobodyさん
2008/01/09(水) 18:52:02ID:I5nTeu3Fログファイル名を固定ではなくて日付ごとに出すことってできないんですか?
今 log/app.log
↓
log/20080109.log
みたいに。
ご存知の方いましたらお願いします。
0114nobodyさん
2008/01/09(水) 21:49:38ID:???もしくはEthna_Plugin_Logwriter_Fileあたりを継承して独自のLogwriterを作る。
0115113
2008/01/10(木) 15:35:23ID:???ありがとうございました。
0116nobodyさん
2008/01/23(水) 21:01:59ID:vMSy4RO6一通りEthnaでアプリ書けるようになるまでどのくらいかかった?
0117nobodyさん
2008/01/23(水) 21:35:59ID:???PHP+MySQLを知らない状態、フレームワークというものが
存在するのも知らない状態から、2006/12上旬に勉強を初めて
2007/2下旬にユーザ登録型のサービスをひとつ立ち上げました。
ethnaの存在を知ったのは1月上旬だったかな?
平日昼間は別の仕事をしてたので、作業は夜+休日。
Linuxも素人だったので、むしろそっちの設定まわりで
取られた時間の方が多かったかも。
0118nobodyさん
2008/01/24(木) 01:44:05ID:???diconファイルを作成しないでもDIできるようにしたいんですが、できた人いますか?
0119nobodyさん
2008/01/24(木) 14:07:43ID:???0121nobodyさん
2008/01/27(日) 07:13:41ID:Ce0IXCjK2,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....」も出ない。
すんげー困ってます。諸先輩方、助けてくださいおながいします。
0122nobodyさん
2008/01/27(日) 08:14:55ID:???0123nobodyさん
2008/01/27(日) 08:48:45ID:Ce0IXCjK/ethnaアプリ/www/index.php のことでしょうか?
require_onceで読んでる Controller クラスを絶対パスで読んでいるので変えていません。
0124nobodyさん
2008/01/27(日) 23:57:46ID:???「Index of....」が出る時点でPHP用に設定されてないんだろうし。
0125nobodyさん
2008/03/16(日) 23:46:07ID:M19sLUbw今週から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: アクションが決定できなかった場合に実行されるアクション名(省略可)
【http://ethna.jp/doc/(引用)】
string $class_name、mixed $action_name、mixed $fallback_action_nameは
どこでセットしてやればいいのでしょうか、、、orz
HTML(PHP)ソース上でどこで対応するのでしょうか?
アプリケーションIDやらformやらvalueやらnameやらidやらclassやら頭が混乱してきてしまったよ。
そしておすすめの本あったら教えてください。。。
0126nobodyさん
2008/03/17(月) 03:38:21ID:???0127nobodyさん
2008/03/17(月) 06:06:19ID:???0128nobodyさん
2008/03/17(月) 13:41:15ID:???とりあえず
http://ethna.jp/ethna-document-tutorial.html
ここのチュートリアルから
あとmainとか書かなくて良い
自動でセットしてくれるからな
ソースに対応するのviewに書くsmartyのファイル
0129nobodyさん
2008/03/17(月) 15:54:10ID:5CS1AjM2Ethna公式サイトも更新ないし...
ところで質問なんですけど、アプリケーションを通して使いたいユーザ定数は
どこで定義すればいいのでしょうか?
{APPID}_Controller.php に書けなんて事はないですよね?
0130nobodyさん
2008/03/17(月) 23:08:03ID:???EthnaはGreeがある限りあるんじゃないかな
ユーザ定義は自分でファイル作って
コントローラでインクルードしてたかなぁ
0131129
2008/03/18(火) 09:20:11ID:ZfBa+neKレスありがとうございます。
>EthnaはGreeがある限りあるんじゃないかな
GreeはID持ってるけど全然ログインしてない。
なんか盛り上がりに欠けるんですよね〜。
>ユーザ定義は自分でファイル作って
>コントローラでインクルードしてたかなぁ
なるほど、その手がありますね。
0132nobodyさん
2008/03/18(火) 09:23:30ID:ZfBa+neKFORM_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'}
とかやるしかないんですかね?
0133125
2008/03/18(火) 13:02:00ID:???読んでみたが画面単位でアクションクラスを作成するって把握でいいのでしょうか?
EX:
検索ボタン、登録ボタンがともに存在する画面
・生徒情報画面(生徒を検索、登録ができる)
・サークル登録画面(サークルを検索、登録する)
だったらそれぞれの画面単位でアクションクラスを作成するってことかな....
都内で詳しい方いたら相談乗っていただけると
助かります.....
ethna77@55mail.cc
0134nobodyさん
2008/03/18(火) 19:00:29ID:???アクション単位でアクションクラスを
viewは必要な画面数分だけ
生徒情報一覧を出すアクション
生徒を検索するアクション
生徒を登録するアクション
サークル情報一覧を出すアクション
サークルを検索するアクション
サークルを登録するアクション
viewは
生徒情報を出すview
生徒情報を登録するview
サークルを登録するview
サークル情報を出すview
登録ありがとうview
って感じ?
0135125,133の人
2008/03/18(火) 20:26:02ID:???そうなのか!
ありがとうございます。
Javaのフレームワークよりより難しいですね。
ではそのアクション単位で
アクションオブジェクトを作ればいいって把握でいい感じなのかな?
頑張って沢山ビューつくるよorz
タブ切り替えでアクションほしいとか泣きたいよ、ママー。
0136nobodyさん
2008/03/18(火) 20:47:52ID:???交通費込みで金くれるなら東京までいくぜw
viewは共通化出きる所を共通化してincludeして再利用
あとactionの方の共通化はmanager等を使う
んでアクションのオブジェクト等はコントローラ側で勝手に生成してくれるので
実際に作製必要な処理などは各アクションのperformで処理を
表示関連の処理が必要な場合はviewクラス作って
viewクラスのpreforwardで処理をすればいい
0137135
2008/03/19(水) 01:55:57ID:???ど こ か ら く る ん だwww
北海道とかだったら...orz
かっ身体で払います。
近辺なら出せないこともないです。
ethna77@55mail.cc
明日早速ググってみる。
親切にありがとうございます。
周りの人があまりに自分の開発でEthnaの本(サイト)見てるときは目付きがイっててこわがってる....。
客先PGなので自社のイメージなんて、
納会やら帰社日ぐらいで
若いだけで社長の隣に座らされてるから
ニコニコしてる穏やかな人だったらしい。
0138nobodyさん
2008/03/26(水) 00:45:59ID:???やっぱりヴュー?
抽出用のデータをアクションで受け取って、ビューに渡して出力でいいのかな?
データ量が多いとgetAllとかするとメモリオーバーで止まっちゃうからAppManager
とか使えないよね。
ViewからAppManagerを呼んでAppManagerからCSVを出力って邪道?
0139nobodyさん
2008/03/27(木) 16:27:33ID:???<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処理は別途行なう、と言う形になってしまうんですが。
0140nobodyさん
2008/03/29(土) 03:19:28ID:???>CSVのデータって通常どこで生成するもの?
>やっぱりヴュー?
そのCSVをダウンロードさせたいのか?
であれば、自分はviewじゃなくてactionだな。
ロジックはAppManagerに書くけど。
>抽出用のデータをアクションで受け取って、ビューに渡して出力でいいのかな?
View=HTML-Templateに変数を渡すだけって考えた方が良いよ。
>データ量が多いとgetAllとかするとメモリオーバーで止まっちゃうからAppManager
>とか使えないよね。
とりあえず気にするな。メモリが足りなさそうだったらコントローラの最初で
ini_set('memory_limit', '32M');
とかすれば良い。しょぼいレンタルサーバとかじゃないんだろ?さすがに。
>ViewからAppManagerを呼んでAppManagerからCSVを出力って邪道?
正解だと思う。Viewまで行く必要ないと思うがな。
0141nobodyさん
2008/03/29(土) 03:26:33ID:???>EX:
>検索ボタン、登録ボタンがともに存在する画面
>・生徒情報画面(生徒を検索、登録ができる)
>・サークル登録画面(サークルを検索、登録する)
学校のコミュニティサイトでも作ってるのか?
まぁ、Ethna慣れれば↑あたりは1日あれば作れるよ。仕様とHTMLもらってればな。
頑張れ。
0142nobodyさん
2008/03/29(土) 03:34:30ID:???>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で何とかなる。
どうせ入力補佐的なことがしたいんでしょ?
0143nobodyさん
2008/04/08(火) 21:52:44ID:???sessionに置くのが素直なんでしょうけど、それ以外だと手軽な手はありませんかね?
0144138
2008/04/17(木) 18:27:49ID:LCosruMPサンクスコ
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に書くべきなのでしょうか?
0145nobodyさん
2008/04/17(木) 18:34:38ID:LCosruMP1.フォームを表示するための処理なのでView
2.受け取るフォームは1画面なのでActionClassなどでやるべきじゃないよね?
と、一応 私なりの理由があるのですが、フレームワークの作法的にはどうする
のが正解なのでしょうか?
質問ばかりですみません。
0146nobodyさん
2008/04/18(金) 17:41:26ID:???0147nobodyさん
2008/04/18(金) 17:46:41ID:???0148140
2008/04/18(金) 18:13:47ID:???> 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(),とか書くのさえダルイなーとか思ってたけど、
これ結構合理的。
あと、あんまり共有化を考えるとあとで縛られまくるから、ある程度差が出てきたら
「えい」ってコピペするのが吉。一度それで死にそうになったことがあるので。
0149140
2008/04/18(金) 18:15:30ID:???0150144
2008/04/18(金) 18:36:06ID:ImKomyWiたびたび、どうもです。
/public/
/users/
/suppliers/
/admins/
とディレクトリを別けていて/public/のページにすべて検索フォームをつけたいんだけど
action/public.php の $formに書くのが吉ということですね。
あと、検索、一覧、編集というような画面を作るとき面倒なので ActionFormを一つにして
変数で処理を分けているんですが、検索のときに用いる $form定義と 編集のときに用いる
$form定義がかぶるんですが、これって対処するものですか?
表示・入力用 = id, pass, name とかで
検索用= s_id, s_pass, s_name とかにするとか?
このへんイマイチわかっていません。
お願いいたします。
0151140
2008/04/21(月) 22:59:35ID:???>Viewに書いたのには....
それはそれで一つの解だと思う。正解は無いから自分にあった方法を見つければ。
自分の場合は、EthnaはActionForm==ActionClassなところがあるから、
ActionFormの動的な定義(セレクトタブの中身とか、ラジオの選択肢とか)なんかはActionClassのprepare()でやることが多い。
本当はActionFormのコンストラクタでやれるといいのだけど、ActionFormでは
AppManagerを取れないから。(DBも取れなかったのかもな・・。)
それに、あるActionFormをつかうフローでは、そのフロー以下では
そのActionFromって継続的に定義されているべきなことが多い。
だから、大元で定義しちゃえば、あとはparent::prepare();でオk。
とにかく、parent::prepare();とparent::perform()を効率的に使うと良い。
使いすぎると、「あれれれれ・・・・・?どこで定義してるんだ?」になって
しまうけど、まぁ通常のコードよりはスパゲティ化しにくい。少なくともActionで定義というルールを作っておけば。
0152140
2008/04/21(月) 23:03:23ID:???>action/public.php の $formに書くのが吉ということですね。
それ以降で、特にActionForm定義にカスタマイズが無ければそれでOK。
あとは、それ以降のActionClassでは定義のみの空のクラスを作ればOKなんで。
逆に、action/public以下で細かいActionForm定義を加えたい場合は、
ActionClassのprepare()でやっても良いし、
もうちょい頻繁に定義を書き換えたい場合はaction/publicの$formではなく
$form_templateにしておいて、各それ以下のclassで$formを名前だけ空配列で
定義。カスタマイズするところだけを追加定義。
0153140
2008/04/21(月) 23:08:12ID:???>検索のときに用いる $form定義と 編集のときに用いる$form定義がかぶる
これは自分はそのままやってる。
というのは、結局DBを背景に考えているから。
学校名で検索ってあったら、検索する時も、編集する時も、schoolテーブルの
school_nameフィールドから検索すると思うが、その時に検索時と編集で
formキーが違うとなんかうっとうしい。
でも、検索時はschool_nameはnot requiredだし、編集時はrequriedだから・・・
という場合にやっぱりさっきの動的なActionFormの定義が役に立つ。
んで、これをさらに共通化させて、
action/public
action/admins
で同じForm定義を使い回そう・・・・とか考えるとハマる。ここは素直に面倒でもどっちか
先に作ってからコピペ。そのうち仕様も変わるだろうし、pucblicとadminsで違うものに
なっていくのは目に見えているからな。
0154138 !(146)
2008/04/23(水) 00:39:20ID:???規制されていたので返信が遅くなりました。
聞きたいことは山ほどあるんですが..........w
フレームワークを使うのは cakePHPをメンテナンスで少し触ったんですが
国産でいいのないかなぁと探して見つけたのが Ethnaだったんです。
Greeでも使われているし、それなりに信頼できるのかなぁ?ということと
smartyはしょっちゅう使っていたのでヘルパに smartyが使われいたので
他のは全然評価もせずに Ethnaに決めてしまって、いまかなり苦しんでいます。
使用人口が少ないようで、WEB上にドキュメントが少ない(´・ω・`)
途中ZFに切り替えようかとも思いましたが、ZFはバージョンアップごとに色々
問題があるようなので、やめときました。
0155140
2008/04/23(水) 21:44:20ID:???Cakeは一度使ってみるかと思いつつ、コード見て「んー。汚い・・・」って思って使ってない。
SynfonyとかcakePHPとかガッツリ使うほど大きな案件請けてるわけじゃないんよ。
あと、Ethna枯れてるしな。FWって枯れ時が実案件で使い時っつーところもあるし。
0156138
2008/04/23(水) 22:26:16ID:EWcSFprb最近、月のうち半分以上が規制されている感じ…
なので携帯からです
一度書いたのになんかチェックのページが表示されて、戻ってもう一度送信しろと書いてあったからその通りしたら消えた…
>>155
しかし、ドキュメント少なすぎますよね?
古いバージョンのものとか混在しているし…
今は大分慣れてきたので、普通のことをやろうとするのは大分楽にできるようになりましたが、
ちょっと凝ったことをやろうとすると、簡単にはまる。
ちなみに140さんは、自前のテンプレートを作成してしようしていますか?
あと、今はeacceleratorのある環境で実行しているのですが、ない場合って結構重たいのでしょうか?
今作っているのが階層が結構深くなるんですが、深くなるほど処理は重くなりますよね?
0157140
2008/04/25(金) 00:32:52ID:???ドキュメント無い分はコード読んで何とかしたかな。3年前はドキュメント皆無だったし。
当時はプログラムあまりしらなかったから大変だったけど勉強になった。
>>138はオレが昔書き散らしたものとかどっかで読んでるかも。
基本的にEthnaでやろうとしてできなかったことは無い。
ActionChainと呼ばれるらしきものも強引気味にやったし。
まぁ、たいしたものを作ってないっていうのもあるけど、1〜2人ならEthnaで十分。
>ちなみに140さんは、自前のテンプレートを作成してしようしていますか?
自前のテンプレートって、Smarty以外でってこと?Smarty慣れちゃって、それしか使ってないなー。
Smarty重いっていうけど、早く作れるし。
eAccは、普通レンサバに無いので使ったこと無いです。
サイト立ち上げ当初は速くよりも早く作れることなんで。。。
都内なら会社来てもらえば色々説明もできます。
ステ fromdustman@imap.cc
0158nobodyさん
2008/04/25(金) 13:09:06ID:???>あと、今はeacceleratorのある環境で実行しているのですが、ない場合って結構重たいのでしょうか?
>今作っているのが階層が結構深くなるんですが、深くなるほど処理は重くなりますよね?
階層はたぶん関係ないかと。eAあった方が早いのは間違いないですがよほどPVがない限り気になりません。
たいていフレークワーク本体よりは時間のかかるロジックがボトルネックになります。
0159140
2008/04/26(土) 00:21:00ID:???んー、PHP勉強会は昔出たことあるけどあんまり勉強会で話すことも無いかと思う。
別に目新しいことしてるわけじゃないし、良い意味で枯れかけの技術だと思ってるんで。
なんで、できるとしたら、ここでやってるような
「これ、わかんないんだけど、どうしたらいい?」
「こんな感じでEthnaコード書いてるけどどう?」
ってのに対話するぐらいで。
それはそれで楽しいけど、それってPHP勉強会の雰囲気じゃない気がするんだよね。
0160nobodyさん
2008/05/02(金) 02:58:13ID:DNyHDGY2ここ3週間でコミッタが復活したらしい。
http://svn.sourceforge.jp/cgi-bin/viewcvs.cgi/ethna/trunk/CHANGES?rev=518&root=ethna&view=markup
0161nobodyさん
2008/05/03(土) 10:18:16ID:???0163nobodyさん
2008/05/03(土) 16:43:32ID:???0164nobodyさん
2008/05/03(土) 23:30:29ID:???http://pc11.2ch.net/test/read.cgi/php/1177683436/276
276 名前:nobodyさん[sage] 投稿日:2008/04/30(水) 12:41:32 ID:???
一週間いじってみたがこんな致命的バグの潜んだFWは使う気になれん
http://pc11.2ch.net/test/read.cgi/php/1205475360/765
765 名前:nobodyさん[sage] 投稿日:2008/04/29(火) 00:30:20 ID:???
一週間いじってみたがこんな致命的バグの潜んだFWは使う気になれん
0165nobodyさん
2008/05/04(日) 14:07:09ID:NE4g0gE+で通常DB使う場合に設定する
"dsn"=>"mysql://mysql_user:mysql_userpass@mysql_server/mysql_db",
といった記述なんですが、
mysql_server部分 を動的に変えたい場合、何か良い方法はないでしょうか。
[project]-ini.php 内では
$this->aff->get()とか使用できないので。。。
0166nobodyさん
2008/05/07(水) 09:06:27ID:???それぞれのdsnにキーを割り付けて、getDBで選択するという手はだめかな
http://ethna.jp/ethna-document-dev_guide-db.html#zc5316fe
0167nobodyさん
2008/05/08(木) 18:10:16ID:???0168nobodyさん
2008/05/09(金) 20:41:27ID:lfzI+vCi1.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
■ このスレッドは過去ログ倉庫に格納されています