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/
12 名前:nobodyさん mailto:sage [2007/08/29(水) 21:15:28 ID:???] >>11 接続先はlocalhostでいいの?
13 名前:nobodyさん mailto:sage [2007/08/29(水) 21:58:30 ID:???] >>12 11です。 Apache(PHP,Ethna)から見て、同一マシンにインストールした DBに接続する為、localhostで問題ないのかと思っておりました。 この認識は間違っているのでしょうか? 確認の為、サーバのIPアドレスを指定してみましたが、結果は同じエラーでした。 的外れな事を言っていたら申し訳有りません…。
14 名前:nobodyさん mailto:sage [2007/08/30(木) 00:48:46 ID:???] confiureとか、phpinfoの情報さらしてみれば?(可能な限り)
15 名前:nobodyさん mailto:sage [2007/08/30(木) 03:24:32 ID:???] >>13 つーーか。Ethnaどうこう言う以前に、普通にpg_connectしてselectできるのかと。
16 名前:nobodyさん mailto:sage [2007/08/30(木) 11:41:22 ID:???] >>14 ,15 11です。ありがとうございます。 15様の仰る通り、pg_connectしてみた所、以下のエラーが発生しましたが Warning: pg_connect() [function.pg-connect]: Unable to connect to PostgreSQL server: could not connect to server: Connection refused Is the server running on host "localhost" and accepting TCP/IP connections on port 5432? お陰様で、エラーメッセージがより直接的になった為、これを調べたところ pg_connect("dbname=testdb user=dbuser password=password") の形で(host指定外し)行ける事が判明しました。全くEthna関係なかったです。大変申し訳有りませんでした…。 もう少し詳細に調べ、pgsql/data/postgresql.confのtcpip_socket = trueを変更する事で host指定も可能なようですが、localhostから以外は接続しないため、これは設定しない形で終えました。 解決の糸口を下さった方々に感謝致します。本当にありがとうございました。
17 名前:nobodyさん mailto:sage [2007/08/30(木) 15:25:18 ID:???] >>16 あっ。俺もその問題なったよw 違うフレームワークだけどさ。 同じようにlocalhostはずしたら動いた。
18 名前:nobodyさん mailto:sage [2007/08/30(木) 16:02:13 ID:???] localhostだとUnix Socket経由で接続しにいくけど、127.0.0.1だとTCP/IPで つなぎに行くからな。 Ethna関係なしsage
19 名前:nobodyさん [2007/09/09(日) 00:35:07 ID:R9DBCM/b] しかしethnaは開発続けていく気があるのだろうか。 最近更新が少ないよね。 まあGREEで使用されているからGREEが潰れないうちは 開発続けていくんだろうけど。
20 名前:nobodyさん mailto:sage [2007/09/09(日) 00:58:35 ID:???] 何も予備知識無くて質問するけど、ethnaってPEARがいるそうだけど、 レン鯖にPEARが入ってない場合、どうすればいいの?
21 名前:nobodyさん mailto:sage [2007/09/09(日) 01:09:28 ID:???] >>20 libにPEARコピーしておいておく。
22 名前:nobodyさん mailto:sage [2007/09/09(日) 01:19:37 ID:???] PEARがなくても動くCakePHPにしたよ。
23 名前:nobodyさん mailto:sage [2007/09/09(日) 10:56:51 ID:???] HACKED BY ALEMIN KRALI?なんかされたのかな ethna.jp/
24 名前:nobodyさん mailto:sage [2007/09/09(日) 11:40:17 ID:???] >>23 これはw Ethnaで運用してたらEthnaの穴と思われたけど Pukiwikiで運用してるからセキュリティホールのそしりは免れたね
25 名前:nobodyさん mailto:sage [2007/09/09(日) 11:45:09 ID:???] 単に凍結してなかったから編集されただけだろ。 ロボットに釣られんなよ。
26 名前:nobodyさん mailto:sage [2007/09/12(水) 07:43:28 ID:???] AppObject周りをがっつりレビューしてるサイトないかなぁ ORM初めて何でなかなかコツが掴めない
27 名前:nobodyさん mailto:sage [2007/09/12(水) 10:00:03 ID:???] AppObjectはコミッターの人たち使ってないらしいからな・・ itohさんとかriafさんとかのブログでいくつか記事があるかな。
28 名前:nobodyさん mailto:sage [2007/09/12(水) 23:01:07 ID:???] そうなのか。 そのブログ当たってみます ありがとう
29 名前:nobodyさん [2007/09/13(木) 02:43:53 ID:k28u4udr] Ethnaの長所って、「コードが全部読める範囲」って言うとこだと思う。 コードも相当きれいだし、読みやすい。 SymfonyとかcakePHPとか、確かになんでもできるんだろうけど、 フレームワーク病に掛かりやすい。RoRのレールを外れた時の ものすごい無力感に似た感じで。 あと、軽いね。F.W自体のベンチって難しいけど。 だから、Ethnaをベースにオレ的汎用コードを少しずつ加えていって 割と資産を作りやすい。あくまでオレ的汎用なんだけど。 まぁ、自分の本業がいわゆるホームページ制作だからだけど、 2年Ethna使って「これできない!」ってことなかったし、 使い続けて良かったと思うことは多いな。
30 名前:nobodyさん mailto:sage [2007/09/13(木) 02:45:30 ID:???] >>28 自分も相当AppObject/AppManagerは使ってるから分からなかったら ここで答えるよ。
31 名前:nobodyさん mailto:sage [2007/09/13(木) 07:49:48 ID:???] 何々がわからないって質問できるほど理解してないだなこれが 例えば、 user { id primary name gid } group { id primary name } user_group_link { uid gid } って3つのテーブルがあるとしてMySQL、MyISAMなDBな場合に ユーザ一覧→ユーザ個別修正 グループ一覧→グループ個別修正 の4つの画面を作るとしてその中でどんな感じでAppObject/AppManagerを使えばいいのかを ざっくり書いて貰えると嬉しいにょー 一覧にuser.nameでのlike検索とか付ける場合どんな感じでAppManagerを 使えばいいかとか、joinするときはAppObjectを合成してほげほげとかもあると最高
32 名前:nobodyさん mailto:sage [2007/09/13(木) 18:53:31 ID:???] riafさん優しすぎるwwwww
33 名前:nobodyさん mailto:sage [2007/09/14(金) 03:30:34 ID:???] riafさん、ありがとう。 join編期待してあす。 テーブルの項目名に日本語を使いたいので ちょっとアレして↓な感じで遊んでみます。 // Ethna_AppObjectをSmartyに渡すとMemory使いすぎで怒られる // ので怒られないようにヘルパーを入れてみる // AppObject::getMinimal() とか作ってそこで生成した方が // よいかも知れない class APPID_MinimalAppObject { var $prop; function APPID_MinimalAppObject(&$obj) { // AppObjectからハッシュをゲッツ $this->prop =& $obj->prop; } function get($key) { return $this->prop[$key]; } } if($diary->isValid()){ //あったとき - $this->af->setApp('diary', $diary->getNameObject());// テンプレートで{$app.diary.body}とかで取得できるようになる + $smarty =& $this->backend->ctl->getRenderer(); + $helper =& new APPID_MinimalAppObject(&$diary); + $smarty->assign_by_ref('diary', &$helper); } else { //無いとき } お目汚し失礼しました。
34 名前:30 mailto:sage [2007/09/14(金) 03:44:54 ID:???] >って3つのテーブルがあるとしてMySQL、MyISAMなDBな場合に > ユーザ一覧→ユーザ個別修正 典型的なパタンだね。 俺の場合一覧と個別は、 action/Admin/User.php action/Admin/User/Edit.php action/Admin/User/Edit/Conf.php action/Admin/User/Edit/Do.php view/Admin/User.php view/Admin/User/Edit.php view/Admin/User/Edit/Conf.php って作る。 actionとしては上から、 ・ユーザー一覧 ・ユーザー登録(編集) ・ユーザー登録編集確認 ・ユーザー登録実処理 で、 view/Admin/User.php でユーザー一覧表示させるためのリストを作るけど、一覧データを持ってくるのは User.phpでは基本的には1行(PHP4なら2行) preforwardで $this->af->setApp('user', $this->backend->getManager('User')->getUserList()); って書く。 PHP4だと、これできないから $user_m =& $this->backend->getManager('User'); $this->af->setApp('user', $user_m->getUserList());
35 名前:30 mailto:sage [2007/09/14(金) 03:45:29 ID:???] このとき使ってるのがAppManager AppManagerは、デフォルトで使うもんとすると PROJECTID_UserManager.php に PROJECTID_UserManager extends Ethna_AppManager ってできてる。これをインスタンス化してよんでるのが $this->backend->getManager('User') だから、PROJECTID_UserManager.php に PROJECTID_UserManager::getUserList() を作成する。 で、これの中身で一番シンプルなのは function getUserList() { return $this->getObjectPropList('User'); } 帰ってくるのは配列で、1つ目の要素は検索した全ユーザーのリスト。2つ目の要素は、ユーザー情報を配列で。 まぁ、素直にvar_dumpすればわかる。
36 名前:30 mailto:sage [2007/09/14(金) 03:46:35 ID:???] 実際はこれだけだと意味がないんで、 function getUserList($name) { } とかして、$nameに部分一致なUserのリストを返すようにする。このとき使うのはEthna_AppSearchObject 具体的には function getUserList($name) { $filter = array('name' => new Ethna_AppSearchObject($name, OBJECT_CONDITION_LIKE)); return $this->getObjectPropList('User', null, $filter); } ってする。 IDの逆順にしたい!というときもあるかと思う ORDER BY ID DESC, NAME ASC とかしたい場合もあると思う。その場合は function getUserList($name) { $filter = array('name' => new Ethna_AppSearchObject($name, OBJECT_CONDITION_LIKE)); $order = array('id' => OBJECT_SORT_DESC, 'name' => OBJECT_SORT_ASC); return $this->getObjectPropList('User', null, $filter, $order); } ってやる。
37 名前:30 mailto:sage [2007/09/14(金) 03:47:13 ID:???] さらに、 LIMIT 10,20 ってやりたい場合は、 function getUserList($name, $offset, $limit) { $filter = array('name' => new Ethna_AppSearchObject($name, OBJECT_CONDITION_LIKE)); $order = array('id' => OBJECT_SORT_DESC, 'name' => OBJECT_SORT_ASC); return $this->getObjectPropList('User', null, $filter, $order, $offset, $limit); } って感じ。 とりあえず、Ethna_AppManager::getObjectPropListを覚えておけば9割くらい AppManager使えることになる。 本当は、getObjectPropListの返り値がEthna::isError()でエラー起こしてないか チェックするんだけど。
38 名前:30 mailto:sage [2007/09/14(金) 03:48:27 ID:???] AppObject使うのは、 action/Admin/User/Edit/Do.php だけだな。 AppObjectは、MySQLのテーブルデータの1ラインそのものだと思ってもらってかまわない。 それがORM。 なので、新しくユーザーを追加したい場合は、データが空のAppObjectを一つ作る PROJECTID_Action_AdminUserEditDo::perform();で function perform() { $user =& $this->backend->getObject('User'); } ってやる。これだけだとまだ追加してないので何も起こらない。 そこで$userに、データを詰め込む。これはActionFormとの連携で function perform() { $user =& $this->backend->getObject('User'); $user->importForm(OBJECT_IMPORT_IGNORE_NULL); } これで、適切に設定してればフォーム値がそのままAppObjectに入る。
39 名前:30 mailto:sage [2007/09/14(金) 03:49:19 ID:???] まだDBには追加されてない。最後に function perform() { $user =& $this->backend->getObject('User'); $user->importForm(OBJECT_IMPORT_IGNORE_NULL); $user->add(); } で終わり。 新しくユーザーを作るんじゃなくて、既存ユーザーの編集なら function perform() { $user =& $this->backend->getObject('User', 'id', $id); $user->importForm(OBJECT_IMPORT_IGNORE_NULL); $user->update(); } で終わり。最初の行で、id=$idのユーザーデータを持ったAppObjectが取れる。 ただ、この場合は、確実にid=$idのレコードが存在して、取れているかを 確認するために function perform() { $user =& $this->backend->getObject('User', 'id', $id); if ($user->isValid()){ $user->importForm(OBJECT_IMPORT_IGNORE_NULL); $user->update(); } } ってやって、有効性を確認する。
40 名前:30 mailto:sage [2007/09/14(金) 03:50:25 ID:???] で、AppManagerからAppObjectを一括取得して、一括Updateとか掛けたい場合は、 Ethna_AppManager::getObjectListを使う。getObjectPropListは配列を返したけど、 getObjectListは第二引数がAppObjectを要素に持った配列になってる。当然getObjectPropListより重いよ。
41 名前:30 mailto:sage [2007/09/14(金) 03:52:06 ID:???] 間違えた >getObjectListは第二引数がAppObjectを getObjectListは返り値の2つ目の配列がAppObjectを
42 名前:26,33 mailto:sage [2007/09/14(金) 07:57:02 ID:???] おお、ありがとうございます。 週末試しまくります。 ありがとうありがとう。
43 名前:26,33 mailto:sage [2007/09/15(土) 07:04:30 ID:???] 30さん、raifさん、ありなとうありがとう。 俺的まとめ WebProgを極めて居酒屋を開発する - AppObjectの使い方 d.hatena.ne.jp/riaf/20070913/1189675267 WebProgを極めて居酒屋を開発する - AppObjectでJOINする方法 d.hatena.ne.jp/riaf/20070914/1189747693 AppManagerの使い方 pc11.2ch.net/test/read.cgi/php/1186096518/34-41
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に書くべきなのでしょうか?
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まわりがよくなればいいのにねえ
177 名前:nobodyさん mailto:sage [2008/05/18(日) 22:38:14 ID:???] CakePHPに乗り換えたけど、まだちょっと期待してるよ
178 名前:nobodyさん [2008/05/26(月) 12:53:26 ID:eXimI0Ql] Ethna_ActionForm::handleError() ってオーバーライドできますか? なんか {APPID}_ActionFormに書いても出来ないんですけど(´;ω;`)
179 名前:nobodyさん mailto:sage [2008/05/28(水) 01:02:10 ID:???] ちゃんと{APPID}_ActionFormを継承してるか?
180 名前:178 [2008/05/30(金) 10:07:06 ID:mNLSpKje] >>179 どうもです。 $use_validator_plugin に falseを設定したら動きました。 が、pluginが使えないと色々面倒ですね。 エラーメッセージを全体的に変更したくて、Ethna本体を変更しないように ってなると、やはり Pluginを自分で書くなりするしかないですか? たとえば未入力のエラーは標準が {form}を入力してください ですが {form}を入力してくださいね♪ にしたい場合など、みなさんはどうしているんでしょうか? $form_template とか使うんでしょうか?
181 名前:nobodyさん mailto:sage [2008/05/30(金) 12:00:15 ID:???] $form => array( 'required_error' => '{form}を入力してくださいね♪ '
182 名前:nobodyさん mailto:sage [2008/06/02(月) 10:16:58 ID:???] ethnaのサイトウィルスはってあったから注意 iframeのやつね 誰か連絡してやってくれ・・・
183 名前:nobodyさん [2008/06/02(月) 16:14:36 ID:aKm7Z/AW] ethnaのサイト落ちてますか?
184 名前:nobodyさん mailto:sage [2008/06/02(月) 19:44:54 ID:???] >>183 ethena.jpが乗っ取られてたらしい。 現在は閉鎖中。
185 名前:nobodyさん mailto:sage [2008/06/02(月) 20:09:21 ID:???] そして復活した模様
186 名前:nobodyさん mailto:sage [2008/06/02(月) 22:36:44 ID:???] ethna.jp/ethna-news.html#q6a79399 リリース出たね
187 名前:nobodyさん mailto:sage [2008/06/03(火) 04:54:20 ID:???] さくらインターネットのルータがウイルスに感染してたってこと? その方が怖いんだが
188 名前:nobodyさん mailto:sage [2008/06/03(火) 05:15:50 ID:???] さくらスレ見たらやっぱりさくらが問題みたいね こえーな
189 名前:nobodyさん [2008/06/03(火) 06:03:26 ID:GVCDkPaZ] ってか大問題なのに騒がれなさすぎだろw 上流でクラックされてたらどうしようもない サーバ単位の感染の比じゃねーぞ
190 名前:nobodyさん mailto:sage [2008/06/03(火) 06:30:55 ID:???] memo.st.ryukoku.ac.jp/archive/200806.month/9458.html ルータと同じIPを名乗るマシンがいたんだってよ。ひどいもんだな。
191 名前:nobodyさん mailto:sage [2008/06/03(火) 09:34:43 ID:???] そんなに簡単に乗っ取れるインターネットっていったい
192 名前:nobodyさん [2008/06/03(火) 17:20:00 ID:khCiq63d] 簡単に言うけど、ssl化すればいいんじゃね? ところで、Ethnaで アクションからアクションを呼びたい場合って同かけばいいのでしょうか? 今作っているのがバッチ処理の関係なんですけど、バッチ処理をコントロールする アクションがいて、条件によってサブの処理アクションを呼び出したいんですけど... /batch.php <= 一定時間ごとに起動 /batch/proc1 <= サブアクション /batch/proc2 〃 /batch/proc3 〃 あと、2.3.5がリリースされましたが、2.3.2からはそのままアップデート して何か問題ありますか?
193 名前:nobodyさん mailto:sage [2008/06/03(火) 19:46:36 ID:???] >>192 確か公式にアクションチェインの方法かいてあったはず
194 名前:nobodyさん [2008/06/03(火) 20:13:41 ID:khCiq63d] >>193 どうもです。 マニュアル見ててわかりました。 $this->backend->perform($action_name); を perform()に書いてあげればいいみたいですね。
195 名前:nobodyさん mailto:sage [2008/06/04(水) 03:06:30 ID:???] >>192 そのままアップデートして問題ないよ。大きくは変わってないので。
196 名前:nobodyさん [2008/06/10(火) 10:19:27 ID:w4tQWM9Z] $this->session->start() のあとに $this->session->isStart() してもtrueが返らないのは仕様ですか? $this->session->isStart(true)とすれば返るんですが... Ethna_Session::start()のなかで $this->anonymousに代入していないのは わざとですか? $_SESSION['__anonymous__'] と Ethna_Session::anonymouse には何か使い 分けている理由があるのですか?
197 名前:nobodyさん mailto:sage [2008/06/11(水) 08:10:19 ID:???] $this->session->start()じゃなくてsession_start()してんじゃないの? auto_startとか。 あと匿名と通常のセッションを同時に使い分けることはできない。 気にくわないならEthna_Sessionを継承しる。
198 名前:JK [2008/06/11(水) 08:31:19 ID:xujtuY+c] >>197 ソース見て見れ! Ethna_Session::start() で $anonymousに代入していないから restoreが呼ばれてからじゃないと isAnonymous() で取得できないから、isStart()が正常な値を返せない これは仕様なのか? ログイン処理で匿名から、通常のセッションに切り替える処理を入れたんだが ログインチェック処理が何故かうまく通らないから調べたら、そうなっていた start() ttp://ethna.jp/doc/__filesource/fsource_Ethna__classEthna_Session.php.html#a142 isStart() ttp://ethna.jp/doc/__filesource/fsource_Ethna__classEthna_Session.php.html#a276 isAnonymous() ttp://ethna.jp/doc/__filesource/fsource_Ethna__classEthna_Session.php.html#a295
199 名前:nobodyさん mailto:sage [2008/06/11(水) 15:20:49 ID:???] >>198 素直にMLに投げてみたら?
200 名前:nobodyさん mailto:sage [2008/06/11(水) 20:46:44 ID:???] >>198 だから「同時に使い分けることはできない」んだってば。 これが仕様なのかバグなのかは知らないけど。
201 名前:JK [2008/06/11(水) 21:08:49 ID:xujtuY+c] >>200 だから、切り替えたいんだってば。 というより。 Anonymous関係なく、 session->start()した直後 isStart()よんでみ?
202 名前:nobodyさん mailto:sage [2008/06/11(水) 21:59:31 ID:???] start前はbool(false)、 start後はbool(true)になるけど?
203 名前:nobodyさん mailto:sage [2008/06/11(水) 22:07:52 ID:???] 「切り替え」も「同時に使い分ける」と同義。 匿名セッションをdestroy()してから、そのまま通常セッションをstart()してもだめってこと。
204 名前:JK [2008/06/11(水) 23:40:12 ID:xujtuY+c] >>203 なるほど、そういう説明なら納得。 ログイン前の情報を匿名セッションで保存していて、ログイン後にそれらの 情報を扱いたい場合ってどうしているんですか? Ethna_Sessionを new して $this->session に渡しちゃうとかですか?
205 名前:nobodyさん mailto:sage [2008/06/15(日) 01:00:02 ID:???] わざわざ匿名セッションを使う意味がわからんのだけど。 「匿名セッション」=「Ethnaアプリではないアプリが開始したセッションを使うため」かと。
206 名前:JK [2008/06/15(日) 01:48:12 ID:vmTqGR6A] >>205 実はよくわかってないのです。 匿名=アプリには非ログインだけど、セッションを使いたい 非匿名=アプリにログイン状態 かな〜と、勝手に思っていました。 たとえばログインのアクションを起こす直前の情報を匿名状態で持っていて ログインが必要なアクションを起こした場合にログイン画面へジャンプ。 ログイン処理が正常に済んだら、保存していた情報でページにジャンプしたり フォームに入力したりする。 一応ロールっぽい概念は持っているんだけど、一番簡単なログインチェックは isStart() を呼ぶだけで出来るから便利だなぁなどと思っていたけど、 ちょっと違うのかな?
207 名前:nobodyさん mailto:sage [2008/06/15(日) 11:45:46 ID:???] それならログインしていようといまいと普通にセッションを使うべし。 ログインしたらセッションの中にフラグを立てる。 あとはisStart()じゃなくてそのフラグを確認するだけ。
208 名前:JK [2008/06/15(日) 17:30:32 ID:vmTqGR6A] なるほど、ありがとうございます。 えーと、こうなったいきさつを少しだけ、ethnaのサイトに isStart()で ログインをチェックしているサンプルがあってセッションスタート=ログイン 状態というような感じのサンプルでした。 それでそれを元に開発を進めていったんですが、非ログイン状態でもセッション を使って何かしたいなぁ。となったときにセッションを明示的に開始していないと セッションが使えないという罠にはまり、しばらく悩む。 で、ソースを眺めていたら、匿名というのを見つけて、匿名時はisStart()が falseを返すという性質があるなぁそれなら。 となったわけです。 普通に考えたら、セッションにフラグを持つのが正解ですね。 事実FWを使わないときはそうやって書いていたし... 逆切れすみませんでした。 PHP全般とおしていえることですが、無駄にセッションを開始したくない場合 ってどうやるのが正解ですか? sessionのauto_startを無効にして if (!empty($_COOKIE['SESSID'])){ session_id($_COOKIE['SESSID']); session_start(); } というような感じでしょうか?
209 名前:nobodyさん [2008/06/24(火) 20:05:23 ID:et7OSP74] >>208 たぶんそれで問題なあいと思うよ。 まぁそんなに神経質にならなくてもGCがうまいことやってくれます。 ところで、過疎化しているから回答がつかないかもしれないけど質問。 HiddenVarsを使うという記事を見つけたのですが、これって 1.input 2.check 3.do という 3phaseで処理する場合 2で validate しても 2と3の間でデータを書き換えできますよね? 3の直前に validateを入れたとしても書き換えたデータがそれなりの ものであれば、2でチェックした内容と違うもので更新できますね? さらにいうろ 3のアクションのみでデータを登録できちゃうから、 不正登録とか連投ができますよね? これを防ぐにはセッションやチェックファイル、DBなどを使わないと だめですよね? 何かいいアイディアありますか?
210 名前:nobodyさん mailto:sage [2008/06/25(水) 07:08:45 ID:???] >>209 >>170
211 名前:nobodyさん [2008/07/01(火) 08:37:05 ID:2M+ISpJV] すんません、たとえば複数のテーブルを扱うと時って アクションクラスには どのように書けばいいのでしょうか? 例えば会員情報に会員状態を表す status(仮登録、本登録、退会、削除)があり、 付随するデータにそのデータの状態をあらわす status(下書き、公開、閲覧停止、削除) があったりします。
212 名前:nobodyさん mailto:sage [2008/07/01(火) 11:34:32 ID:???] このスレにレスが付くのは不思議だよな・・・。
213 名前:nobodyさん [2008/07/03(木) 08:29:19 ID:cyN9Rfkc] >>212 おまいの自作自演だったりして、このレスもw
214 名前:nobodyさん [2008/07/28(月) 10:13:22 ID:YSIM2iDa] 過疎化しているようなので、レスがつくか不安ですが質問です。 $this->backend->perform() でサブアクションを実行したいのですが、 $form要素は呼び出し側のものしか反映されていないようです。 サブアクションのアクションクラスで$form要素を定義したいのですが どのように書けばいいのでしょうか?
215 名前:214 [2008/07/28(月) 10:25:20 ID:YSIM2iDa] 間違えた >サブアクションのアクションクラスで$form要素を定義したいのですが >どのように書けばいいのでしょうか? サブアクションのアクションフォームクラスで$form要素を定義したいのですが どのように書けばいいのでしょうか? です。 よろしくお願いいたします。
216 名前:nobodyさん mailto:sage [2008/07/28(月) 14:37:54 ID:???] 質疑は社内ですればいいのに・・・。
217 名前:nobodyさん mailto:sage [2008/07/28(月) 21:06:11 ID:???] >>215 そもそもチミは$formの定義をなんだと思ってるのかね・・・。 ActionClassと一対一なんだよ。 サブアクションとか勝手に言っても、それは勝手に言ってるだけだから 自分でちゃんとActionformもnewして_setFormDefしたまえ。
218 名前:nobodyさん mailto:sage [2008/10/01(水) 11:11:33 ID:???] Ethnaのサイトに繋がりません。
219 名前:nobodyさん mailto:sage [2008/10/01(水) 22:42:24 ID:???] ethnaみたいなゴミフレームワークよく使えるな
220 名前:nobodyさん mailto:sage [2008/10/14(火) 23:49:51 ID:???] え?砂フレームワークだよ
221 名前:nobodyさん mailto:sage [2008/10/18(土) 13:20:02 ID:???] >>219 なにつかってる? 最近乗り換えけんとうちう
222 名前:nobodyさん mailto:sage [2008/12/15(月) 15:11:08 ID:???] RSSパーサーってみなさんはpear使ってますか?
223 名前:nobodyさん [2009/01/12(月) 20:55:45 ID:ZFy7iIA6] GREEの腐ったCMのおかげで Ethnaも腐ったフレームワークと見られるようになりました
224 名前:nobodyさん [2009/03/01(日) 19:57:05 ID:Hv9B/Cgp] labs.gree.jp/Top/Document/20060707.html#d1ddfba7 手始めに↑を動かしてみたんですが、 エラーメッセージが2重に出てしまっています。 例えば、全ての項目を空にして送信ボタンを押した場合に 以下のようなエラーメッセージが表示されてしまいます。 * メールアドレス が入力されていません * パスワード が入力されていません * パスワード(確認) が入力されていません * メールアドレス が入力されていません * パスワード が入力されていません * パスワード(確認) が入力されていません 2重のエラーメッセージが表示されないようにするには、 $errorsを自前で処理にしないといけないのでしょうか? 環境: Ethna 2.5.0-preview3
225 名前:224 mailto:sage [2009/03/01(日) 22:40:13 ID:???] すみません、こちらのミスでした。 prepare()メソッドにvar_dump($this->af->validate());を書いていた為に エラーが2重で出力されていたようです。 function prepare() { if ($this->af->validate() > 0) { var_dump($this->af->validate()); return 'index'; } return null; } var_dump($this->af->validate());を削除したら2重で表示することはなくなりました。
226 名前:nobodyさん mailto:sage [2009/07/30(木) 12:43:43 ID:???] ethnaでサイト作ってあるんですけど、メンテのときだけ どのページにアクセスしてもメンテ中画面に飛ばす方法ないですか?
227 名前:nobodyさん [2009/07/30(木) 12:48:49 ID:XFFHqckQ] あげ! ・・・って前の書き込み5ヶ月前かよ・・・。
228 名前:nobodyさん mailto:sage [2009/07/30(木) 22:16:06 ID:???] >>226 決まったActionしかしないってことにさせればいい。 エントリポイントを1つにルーティングしてるなら、そのエントリポイントの main()の第2引数をarray('undermaintainance')にしちゃえば。 たくさんエントリポイントがあるなら、Controllerの getActionFormNameをoverrideして、つねに'undermaintainace'の Stringを返すようにすれば良いんじゃない?
229 名前:nobodyさん mailto:sage [2009/07/31(金) 09:14:02 ID:???] Webサーバの方でリダイレクト設定するとかでもいいんでない? Apacheなら.htaccess一個書けば済む
230 名前:nobodyさん mailto:sage [2009/07/31(金) 09:29:00 ID:???] >>228 どうもです。 やってみます〜
231 名前:nobodyさん [2009/08/25(火) 11:28:16 ID:X6yGpm6m] 誰かまだ使ってるの? これ使って作られたオープンソースものがあれば教えて欲しいと思ったんだけど
232 名前:nobodyさん [2009/08/26(水) 16:38:32 ID:UZkILcW9] 誰か見てますか…此処。 質問とかしていいのかな? <select name="aaa" id="aaa" size="7" multiple class="bbb"> {foreach from=$app.hoge item=item} <option value="{$item.hoge}">{$item.fuga}</option> {/foreach} </select> と、tplで書いています。 ここに出されたデータをアクションの方で $this->af->get('????'); って風に取り出したいんです。 やってみた事↓ [action側] 'aaa'=>array( 'type'=>array(VAR_TYPE_INT), 'name'=>'ほげ', ), [tpl側] 上のname="aaa"をname="aaa[]"に [action側] $this->af->get('aaa'); 結果はNULLでした…。 <input type=~..... のつもりでやってたんですけど…どうにかしてselectに入ったデータって取り出せないですかね。
233 名前:nobodyさん [2009/08/31(月) 14:48:44 ID:ueVwiefa] とれるが、ちゃんと調べて説明する暇がないのでがんばってくれ そもそもとれないとプログラムとしておかしいだろ?
234 名前:232 [2009/09/03(木) 14:48:01 ID:42dHYBvA] ありがと。 別のややこしい方法で取ったよ。
235 名前:nobodyさん [2009/09/29(火) 11:04:09 ID:0+eTXppc] actionフォームの方からテンプレートのラジオボタンとか…弄れないかなあ…。 検索前の画面でラジオボタン1、2とテキストボックスがあって 2を選んだ場合はテキストボックスが使えなくなる(disables) 検索する前に、2のラジオボタンが選択されてたら、検索後の画面で2のラジオボタンが選択されたままになってて、 テキストボックスは使えないまま表示される。 って事がしたいんですけどね。 現在は最初の読み込みでラジオボタンどっちも選択されてないし、検索後もどっちからも外れ、 テキストボックスの使用不可もはずれちゃう状態…。 1のラジオボタンに<input.......checked = true />って入れてみたら 最初の読み込みではラジオボタン1にチェック入るようになったのは良いんだけど、 2を選んで検索した後も1が選択されてるんですよね…。 誰か解決策知ってる方いらっしゃったらよろしくお願いします。
236 名前:235 [2009/09/29(火) 11:11:57 ID:0+eTXppc] すみません。ラジオボタンの問題は自己解決しました。
237 名前:235 [2009/09/29(火) 11:12:36 ID:0+eTXppc] すみません。ラジオボタンの問題は自己解決しました。
238 名前:235 [2009/09/29(火) 11:13:21 ID:0+eTXppc] 書き込めない…? ラジオボタンの問題は自己解決しました。
239 名前:nobodyさん mailto:sage [2009/09/29(火) 23:19:45 ID:???] >>235 うーん、ActionFormからHTMLにdisabledを入れるのって 今時のやり方じゃない感じがする。 disabledってあくまで補助だから、補助は補助らしくjavascriptで後付け設定かなぁ。 しかも、radioとtextの連動だからなおさらその感じがする。 自分だったら、適当にradioとtextにid振って $(function(){}); か Event.observe(window, 'load', function(){}); するかなぁ。
240 名前:nobodyさん mailto:sage [2009/10/02(金) 03:07:29 ID:???] これ面白そうだな。 いまやってるDrupalが落ち着いたら手を出してみたい。 CMSはページ管理には便利だけど、ハマると結構てこずるや。 ZFWとどっちがMVCの分け方判りやすいかな
241 名前:nobodyさん mailto:sage [2009/10/06(火) 02:01:12 ID:???] >>240 Zend
242 名前:nobodyさん [2009/10/08(木) 15:15:39 ID:2JJQdndq] Fatal error: Call to a member function getAll() on a non-object in …というエラーが出ます。 getAllを用意した__DB_PEAR.phpもlibに入れてControllerからincludeしてるのに…。 Ethnaは最新バージョンです。 何故飛べないのか原因がさっぱりです。
243 名前:242 [2009/10/08(木) 18:57:42 ID:2JJQdndq] MySQLの設定で何か問題があったようです。 詳しくは分かりません。
244 名前:nobodyさん [2009/10/19(月) 23:28:51 ID:/Zspq1xO] ethnaにPEAR::PAGERのようなページング用のメソッドは 用意してありますでしょうか? ご存知の方が居られましたらご教授よろしくお願いいたします。
245 名前:nobodyさん mailto:sage [2009/10/20(火) 10:02:54 ID:???] つttp://ethna.jp/ Ethna > ドキュメント > 開発マニュアル > デモ > ページャを作成する
246 名前:nobodyさん [2009/10/23(金) 18:04:21 ID:7dG7Qup9] hoge.com/ethna/?hoge=1&peko=1 というURLがあったとして、hogeとpekoが入れ替わることもあるとするとき、 1つ目の引数がhogeであるかpekoであるかを知る方法ってありますか? $this->af->get(name[0]) とかで、hogeって入ってるとか。 今のところpathinfoあたりから自分で分解するしか思いつかないです・・・
247 名前:nobodyさん mailto:sage [2009/10/23(金) 22:38:55 ID:???] >>246 $_SERVER['QUERY_STRING']からとるしかねーじゃん。
248 名前:nobodyさん [2009/10/26(月) 15:52:54 ID:jayyJSrP] >247 やっぱそうなりますか。 ありがとうございますた
249 名前:nobodyさん mailto:sage [2009/10/27(火) 21:30:22 ID:???] アクションloginのフォーム表示画面でsubmitするとURLがindex.phpになってしまうんですけど これを同じloginにするにはどうしたらよいでしょうか?エントリはindex.phpです。
250 名前:nobodyさん mailto:sage [2009/10/28(水) 00:20:21 ID:???] >>249 hogehoge.tpl <form action="login.php" method="post"> <input type=hidden value=1 name=action_login_do> <input name=id> <input name=pass> <input type=submit> </form> login.php <?php include_once Hoge_Controller.php Hoge_Controller::main('Hoge_Controller', array('login', 'login_*'), 'login');
251 名前:nobodyさん mailto:sage [2009/11/04(水) 10:10:05 ID:???] >>250 ありがとう
252 名前:nobodyさん mailto:sage [2009/11/10(火) 11:26:10 ID:???] クエリエラーが発生したとき、画面上に ***[508](ERR): Ethna_DB_PEAR._query(\class\DB\Ethna_DB_PEAR.php:306): Query Error SQL[〜〜] みたいな感じで表示されるんだが、これを止める方法ってない? 一応、ロジックで $res = $db->query($sql); if (Ethna::isError($res)) { return Ethna::raiseNotice('登録エラー',E_DATA_REGIST); } みたいな感じにはしてるんだけど・・・・。
253 名前:nobodyさん [2009/11/25(水) 12:11:40 ID:KpnnUhSV] EthnaってもうちゃんとO/Rマッピング対応してんの? joinとかサブクエリーとか、Postgresとか使える?
254 名前:nobodyさん [2009/12/08(火) 08:35:32 ID:YO3TGVaP] >>253 使えるよ アダルトサイトでもEthnaの導入が増えてる yourvideo.jp/?action_rank=true
255 名前:nobodyさん mailto:sage [2010/01/28(木) 12:15:27 ID:???] アダルトサイトなんてXOOPSか下手するとブログ程度かと思ってたのに。 進んでんな。
256 名前:nobodyさん [2010/02/10(水) 11:31:46 ID:SPzWL0O/] {form_input name="hoge"} の形でcheckedフラグ入れれる方法知りませんか? 最初からchecked=trueにしておきたいのですけど…。 型はチェックボックスでoptionに連想配列入れてるので<input...の形にはしたくないのです。 actionで$formに何か指定できるとか、{form_input...に何か付け足すとか ご存知の方いらっしゃいましたらお願いします。
257 名前:nobodyさん mailto:sage [2010/02/10(水) 11:41:00 ID:???] >>252 if (Ethna::isError($res))を何処に書いてるのか分からんが Managerに書いてるんだったら処理全体をtryで囲って、 エラーの場合はcatchにthrowしてfalseを返す仕様にしたらどうだろう 呼び出し元の方で$this->ae->addObject();を使う
258 名前:256 [2010/02/10(水) 17:21:50 ID:SPzWL0O/] 自己解決しました。 $this->af->set('hoge', "valueの値"); とすることによって、指定の箇所へチェックを入れれました。