[表示 : 全て 最新50 1-99 101- 201- 2chのread.cgiへ]
Update time : 05/10 00:57 / Filesize : 93 KB / Number-of Response : 259
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

【PHP】Ethna part.2【国産フレームワーク】



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/

44 名前:nobodyさん mailto:sage [2007/09/21(金) 02:13:40 ID:???]
誰かurlhandlerを解りやすく説明して・・・・


45 名前:nobodyさん mailto:sage [2007/09/25(火) 15:30:02 ID:???]
セッションオブジェクトからセッションIDって取得出来るんでしょうか?

46 名前:nobodyさん mailto:sage [2007/09/25(火) 18:45:28 ID:???]
$session->session_name
とか?

47 名前:nobodyさん mailto:sage [2007/09/25(火) 19:42:56 ID:???]
>>44
そもそもが分かりやすくないので俺にはミリでした。
が、
ethna.jp/ethna-document-dev_guide-urlhandler.html
に加えて、はまりどころ
・www/index.phpに$_SERVER['URL_HANDLER']を忘れない
・AppID_UrlHandler.phpに_getPath_Hogeを忘れない。
・pathが被る場合は順番に気をつける
例:
var $action_map = array(
'hoge' => array(
'archive' => array(
'path' => 'archive',
...(snip)...
),
'archive_recent' => array(
'path' => 'archive/recent',
...(snip)...
),
とすると、'path' => 'archive'が先にマッチして'path' => 'archive/recent'まで見てくれない。
$action_mapはforeachでループしてるだけなので順番がまずいとまともに動かない。
pathとpath_regexpは、複雑なマッチを配列上で優先させること。

・path_extが要らない場合でも'path_regexp'と配列の個数を合わせる。
'path_regexp' => array('|^hoge$|', '|^hogehoge$|'),なら、
'path_ext' => array(array(), array()),としておかないと動かない(っぽい)。
アクションをサイト直下(example.com/とか)にマップする場合は'path_ext'=>array(),で。

48 名前:nobodyさん mailto:sage [2007/09/25(火) 19:49:41 ID:???]
Ethna_Sessionは
setcookie($this->session_name, "", 0, "/");
の行全部を
list(, $path, $domain,) = session_get_cookie_params();
setcookie($this->session_name, '', 0, $path, $domain);
に変えておくと
session_set_cookie_params(1200, '/admin/', '', true, true);
とかエントリポイントで指定できて便利とか。


49 名前:nobodyさん mailto:sage [2007/09/27(木) 17:12:13 ID:???]
ある入力画面で、マスタの数によってINPUTの数が変わる画面があるんですが、
アクションフォームの定義の仕方がわかりません
$_POST等を直接弄るしか無いんでしょうか・・・

50 名前:nobodyさん mailto:sage [2007/09/27(木) 21:55:07 ID:???]
>>49
この頁の解説なんかどうでっしゃろう?
ethna.jp/ethna-document-dev_guide-form-type.html

-- html
<input name="foo[]" value="v1" ...
<input name="foo[]" value="v2" ...
<input name="foo[]" value="v3" ...
-- /html

-- ActionForm
'foo' => array(
'type' => array(VAR_TYPE_STRING),
),
-- /ActionForm

51 名前:49 mailto:sage [2007/09/28(金) 09:27:35 ID:???]
うほ、ありがとうございます!
アクセスさえ出来ればあとはどうにでもなりますね
もしくはマスタ数に上限を設けて、requiredがfalseなフォーム値を
上限分書いて逃げようと思います

52 名前:nobodyさん mailto:sage [2007/10/01(月) 21:54:03 ID:???]
Ethnaにアバター機能が付くと聞いて飛んできましたw



53 名前:nobodyさん mailto:sage [2007/10/05(金) 03:08:42 ID:???]
>>47
d
規制で書けんかった(´・ω・`)

php5ならいちいさんが書いてる
Net_URL_Mapperを使ったプラグインがよさげなんだがなぁ・・・

ところで、UrlHandlerで設定した値ってもうちょっと簡単に取得できないもんなんだろうか・・・
AFに定義しないと取得できないってめんどい・・・・

54 名前:nobodyさん mailto:sage [2007/10/05(金) 18:13:07 ID:???]
基本的にindex.phpのみでテンプレートを切り替えて
アクションをPOSTして動かしていくイメージで作っていたのですが
当然ですが、アクセスログを見ても全てindex.phpになっているため
画面毎に固有のURLを割り振りたいと考えています。

イメージとしては、 入力画面 -> 確認画面 -> 完了画面
のそれぞれに固有のURLを割り振る方法を模索しています。
入力画面:index.php?code=input
確認画面:index.php?code=confirm
完了画面:index.php?code=finish
と言うレベルでも付与出来るならば問題無いのですが、アクションをPOSTしながら
URLに変化を付ける方法が分かりませんでした。

素直にGETで渡すしかないのでしょうか?

55 名前:nobodyさん mailto:sage [2007/10/05(金) 18:22:49 ID:???]
>>54です。
書いた直後に気が付いた…。
これなら普通に<form action="index.php?=***">で渡せば良いやと言う事で…
スレ汚し、大変失礼致しました。

56 名前:nobodyさん mailto:sage [2007/10/06(土) 01:24:36 ID:???]
>>54
<input type="hidden" name="action_*">
とか
<input type="submit" name"action_*" value="じっこ〜">
とかname属性に入れれば良い

ここらへんはEthnaのチュートリアルにあるよ

57 名前:nobodyさん mailto:sage [2007/10/11(木) 16:33:35 ID:???]
smartyのincludej関数を使って、ヘッダー部やフッター部を別ファイルにしたいのですが
それ様の格納フォルダみたいなものってないのでしょうか?もしくは何か良い方法あれば
お願いします

58 名前:nobodyさん mailto:sage [2007/10/11(木) 17:31:02 ID:???]
>>57
テンプレートディレクトリの中に好きなようにディレクトリ作って突っ込めばいいですよ。

59 名前:nobodyさん [2007/10/25(木) 15:41:25 ID:1vHLTuW2]
ログの出力をなんでもいいから全部ファイルに出力したいときはどうするのん?

60 名前:nobodyさん mailto:sage [2007/10/25(木) 16:15:34 ID:???]
'log_facility'          => 'file',
'log_level'             => 'debug',

61 名前:nobodyさん mailto:sage [2007/10/25(木) 23:58:03 ID:???]
おお、ありがたい

ちなみになんだけど
Ethna_Controller の getManagerClassName と getObjectClassName 。
微妙に名前の変換ロジックが違う
CVS版だと同じになってんのかな?

62 名前:nobodyさん [2007/10/27(土) 21:04:42 ID:euGofwdi]
ihc.mydisk.jp/



63 名前:nobodyさん [2007/10/31(水) 13:59:03 ID:G97Omn6y]
EthnaのADODBって Starttrans() 使えないのかな?トランザクション。

64 名前:nobodyさん mailto:sage [2007/10/31(水) 15:51:24 ID:???]
直接
$this->db->db->StartTrans();
って呼べば使えたと思う

65 名前:nobodyさん mailto:sage [2007/11/01(木) 14:26:56 ID:???]
>>63-64
いやいや、PEAR_DB版でもADOdb版でも、トランザクションは
$this->db->begin();
$this->db->rollback();
$this->db->commit();
で統一されてるよ。


66 名前:nobodyさん mailto:sage [2007/11/01(木) 15:16:48 ID:???]
Ethna_DB_ADOdb.phpだとbegin()で単にBeginTrans()を呼んでるだけだけど、ADOdbのStartTrans()ってBeginTrans()より色々とよきに計らってくれるんですよ
/**
 Improved method of initiating a transaction. Used together with CompleteTrans().
 Advantages include:
             
 a. StartTrans/CompleteTrans is nestable, unlike BeginTrans/CommitTrans/RollbackTrans. Only the outermost block is treated as a transaction.
 b. CompleteTrans auto-detects SQL errors, and will rollback on errors, commit otherwise.
 c. All BeginTrans/CommitTrans/RollbackTrans inside a StartTrans/CompleteTrans block are disabled, making it backward compatible.
 */
function StartTrans($errfn = 'ADODB_TransMonitor')
{....

67 名前:65 mailto:sage [2007/11/01(木) 18:02:36 ID:???]
ぐあ、StartTrans()のことは知らなかった。ごめん、typoかと…orz
CompleteTrans()でエラーを自動判定したり、トランザクション中に
別のメソッドでcommitされても大丈夫というのは便利ですね。
ADOdbの独自拡張ぽいから、Ethna_DB_ADOdb.phpを拡張するか、>>64氏の
書いたように直接呼ぶのが良さそう。

# ドキュメントに「毎回エラーチェックする必要ないよ」て書いてあるのは
# 無駄にSQLの実行回数が増えてしまうので微妙な気もするけど…

68 名前:nobodyさん mailto:sage [2007/11/01(木) 23:50:53 ID:???]
詳しい人おしえて、

Ethna使ってて actionに書くべきか viewに書くべきか迷うんだが、

例えばactionで
AppManager使って必要なデータ取ってきてたとして
ついでに af->set()で出力のお膳立てもしてしまった方が楽に感じるんだが、

あえて、どこかに溜めておいてview側でaf->set()すべきなのかね?


69 名前:nobodyさん mailto:sage [2007/11/02(金) 00:16:52 ID:???]
>>68
actionformのsetはactionclassのperformに入る前の段階
つまり、authenticateとprepareで行うべき。

viewでやるのはもってのほか。

AppObject/AppManagerなどのModelにも極力行かすべきではない。


というルール付けでやってMVC意識してる。

70 名前:68 mailto:sage [2007/11/02(金) 00:42:53 ID:???]
>69 Ethna使わないでください。


71 名前:69 mailto:sage [2007/11/02(金) 01:00:21 ID:???]
>>70
どういうこと?

72 名前:nobodyさん mailto:sage [2007/11/02(金) 15:32:51 ID:???]
>>68
その辺はMVCのジレンマだと思う。
効率的には、Actionで取得した情報をViewで使えるのがいいけど
特定のActionを通過しないとView側で正しい情報を利用できない
となると、処理と表示が分離されないことになるから微妙。

自分は多少無駄だとは思いつつも、ActionとViewでそれぞれ取得
しているよ。結果をキャッシュできるものはキャッシュしたり、memcachedを
使ったりして、DBの負荷は上げないように少し考えてはいるけど。




73 名前:69 mailto:sage [2007/11/02(金) 17:06:05 ID:???]
>>72
それ af->setApp() するときだよね?
>>68 は、af->set()って書いてるから、フォームの値を調整したいんだろ?
そう思って>>69 の書き込みなんだが。

> 自分は多少無駄だとは思いつつも
AppObjectはキャッシュ持ってるから一回取りに行った値は保存してる。
なんでAppObject使ってやればActionで判定にとった値をViewで
使いまわしてもDBには行かない。

その辺はORMの仕事じゃないかとも思うけど。

74 名前:nobodyさん mailto:sage [2007/11/02(金) 17:10:22 ID:???]
なかなか興味深い

75 名前:68 mailto:sage [2007/11/02(金) 23:44:12 ID:???]
ごめん af->setApp()のこと。。。orz >69

MVCの切り口でいくと
やはりそうなるんですかね。>72 >73

キャッシュされているにせよ
viewでもう一回AppObject取り直して
af->setApp()を数行書くってのも、たいそう無駄な気がしてます。

結局どんなAppObjectが渡って来るか
view自体知ってなくてはならない訳だし、

俺の場合描画上の小細工はSmartyのテンプレートにやらせる事が
多いんで、
それだったら、set()とかsetApp()ひっくるめて、
ActionForm全体を渡すから、viewさんあとは描画よろしく。
って方が潔い気がしてます。

Ethnaは viewの定義省略できるんだし、
ワザワザ2,3行だけのViewのファイル作らなくても良いかなと
思ってる。

こういうのMVC的にはダメなのかな。


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に書くべきなのでしょうか?






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](*・∀・)<93KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef