トップページ⇒php
982コメント331KB

【PHPフレームワーク】Ethna【スケルトン自動作成】

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2005/08/03(水) 21:00:39ID:TuHx69hT
国産フレームワーク、Ethnaでいい意味で手抜きなプログラミングライフを。

Ethna -PHPウェブアプリケーションフレームワーク-
http://ethna.jp/

SourceForge.jp: Project Info - Ethna
http://sourceforge.jp/projects/ethna/
0482nobodyさん2006/09/06(水) 20:20:01ID:???
PHP5.0のEthnaの2.1.2ですけど、AppObjectでgetしたあとremoveすると
$conditionがNULLでWHERE IS NULLとかいうSQLになっちゃう...。

$key, $key_type付きでwhere付きのgetはできるのに、getせずにインスタンスしたそのままでremoveしてもかわらず...

皆さんはちゃんとうごいてます?
0483nobodyさん2006/09/07(木) 00:23:32ID:???
>>482
なんかよくわからないけど、いままで変な挙動したこと無いから何か間違ってると思う。
AppObjectでgetしたっていうのがよくわからない。
AppManagerでgetObjectPropとかgetObjectListとかじゃなくて?
AppObjectでgetするのは、AppObjectのpropだけだよね。

新しく作りたいならnewだし。
04844822006/09/07(木) 16:25:20ID:???
わかりづらかったですね、ご迷惑おかけしまいた...

$key_type = array('userid', 'config');
$key = array($userid, $config);
$config1 =& new Test_Config1($this->backend, $key, $key_type);
$data['config'] = $config->get('config');
//$data処理
$config2_values = array(
'userid' => $config->get('userid'),
'config' => $data['config'],
);
$config2 = new Test_Config2($this->backend, NULL, NULL, $config2_values);
$config2->add();
$config1->remove();
とすると
クエリエラー SQL[DELETE FROM config1_tbl WHERE IS NULL]
のエラーで返されます
04854832006/09/07(木) 19:29:19ID:???
これだと、オブジェクトを2個作らないで$config1->update();の方がいいと思うけど、
まぁそれはおいといて。

$config2->add();
するなら、
$config2 = new Test_Config(&$this->backend);
$config2->set('userid', $user_id);
$config2->set('config', $data['config']);
$config2->add();
する方が良い。なぜなら、AppObjectをnewするときの第4引数は
全てのプロパティをセットする必要があるからな。2つのプロパティじゃなければ面倒でしょ?

あと、$config1->remove();でWHERE IS NULLは、Test_Config1の
primary_keyがAppObjectでちゃんと設定されて無いと思われる。

もう一度、appobjectのMappingをチェックするのが吉と、
0486nobodyさん2006/09/07(木) 22:55:15ID:???
$config1 = new
してるのに何故
$config->get()

typo?
0487nobodyさん2006/09/08(金) 10:48:28ID:???
トランザクションや複数テーブルを使用するときなどに
どうしても生SQLを発行する場面があると思うのですが、
AppObjectを使ったりSQLを書いたりするコードが混ざっていると
気持ち悪い(というか不適切なコード?)な気がします。

実際にEthnaを使っている方はどうされているんでしょうか?
0488nobodyさん2006/09/09(土) 00:40:11ID:???
>>487
俺の場合、どうしても生SQLのときは、ManagerにSQL発行メソッドを作るかな
0489nobodyさん2006/09/09(土) 18:41:06ID:???
controllerにsmartyのプラグインを登録できるのはわかってるけど、
どこに記述したいいのか、どこにファイルを置けばいいんでしょう?
どこに書いても、libやappにおいてもだめだし


携帯向けにsjisのページが作りたいとおもったけど開発ページにはoutputをどこにおいたらいいの書いてない...
0490nobodyさん2006/09/10(日) 08:05:27ID:???
>>489
もちろん、ここはチェックしたよな
http://www.ethna.jp/ethna-document-dev_guide-app-sjis.html
0491nobodyさん2006/09/10(日) 19:35:53ID:???
まことにすいませんが、事故解決しました、お手数おかけしました。
原因はIncludeパスがずれてたみたいです。
そこはみたんですけど、そのfunctionはどこに書いてどこにおいたらいいのかわからなくて。
0492nobodyさん2006/09/15(金) 01:32:45ID:???
そろそろ2.3.0 preview3出てほしいなぁ。
ロードマップでは未到達かもしれないけど、コンスタントに
リリースしてくれたほうが嬉しい。というか、はやく2.1.2から
乗り換えたいので頼んます。。。
0493nobodyさん2006/09/19(火) 08:05:38ID:???
mixi の雑談でpreview3は、9月末でるかも、らしい
0494nobody2006/09/19(火) 15:05:49ID:l653wI+U
Ethna + Ajax のサンプル動作させ方がわかりません。
以下のサンプル通りにスクリプトを書いて動作させたけど、
json.tplがないよと怒られます。

流れとして、actionのFlare_Action_IndexCheckからviewのFlare_View_Jsonまでは、
分るけど、この先どこの.tplに、いくの?

http://labs.gree.jp/Top/Document/20060707.html

ヒント頂戴。
0495nobodyさん2006/09/19(火) 17:21:16ID:???
Ethnaで出力結果を(html形式のファイルに)書き出す為の
専用のmethodはないのでしょうか?

Ethna_RendarerのgetEngineとかいうのを使ってfetchするしかないのでしょうか?
0496nobodyさん2006/09/19(火) 22:32:04ID:???
http://ethna.jp/ethna-document-tutorial-practice3.htmlで
tp://some.host/~foo/?action_login=trueというようにアクセスしてる場面を見受けるけどこれを
tp://some.host/~foo/loginみたいな形式に変えることは出来ないんかなぁ?
0497nobodyさん2006/09/19(火) 22:37:17ID:R6sen3Jl
>>495
そのメソッドは無いね。
フィルタ使ってob_で拾うとか、いろいろ手段はあるけど。

>>496
mod_rewrite使えば可能。
0498nobodyさん2006/09/19(火) 23:22:06ID:???
>>496
Ethna_Controller.php の ChangeLog にこんなのがある。
> Ethna_UrlHandlerクラスを追加(ステキurl対応)
これに期待する。
0499nobodyさん2006/09/19(火) 23:27:54ID:gBF89jCS
エラーのハンドリングについて、指定したテンプレートが見つからない
場合と、データベースに接続できなかった場合のエラー処理って
どこで行えばいいのでしょうか?
どちらもフレームワークに任せてしまっている部分の処理なので
いまいち解りません…orz

環境はPHP 5.1.6 + Ethna 2.3.0-dev(CVS)です。
0500nobodyさん2006/09/19(火) 23:39:38ID:???
>>494
試してないので恐縮ですが、json.tplを出力しようとしている
ということは、Flare_View_Jsonクラスのforward()をオーバー
ライドしていないのではないでしょうか?
05014962006/09/20(水) 00:53:00ID:???
>>497
mod_rewriteを使えば確かに出来そうですね


何とかEthnaで頑張ってみたかったので
http://wasuren.blog67.fc2.com/blog-entry-17.html
を参考にしながらやってみたんですが
どうもうまく動かない。・゚・(ノД`)・゚・。

ちなみに公式に書いてある
http://ethna.jp/ethna-document-dev_guide-action-formname.html
は問題なく出来ますた。(・∀・)
0502nobodyさん2006/09/20(水) 14:30:41ID:Ni5iDH7a
デフォルトのテンプレートディレクトリをja以外にするにはどこに書くのが正しいですか?
0503nobodyさん2006/09/20(水) 14:55:50ID:???
>>502
App_Controller::getTemplatedir
0504nobodyさん2006/09/20(水) 16:30:50ID:???
>>494

間違えて、preforwardにコードを書いていません?
0505nobodyさん2006/09/20(水) 18:30:04ID:???
>>503
ありがとうございまっす
0506nobodyさん2006/09/20(水) 22:54:15ID:???
>>505
あんたopenPNEの人?
その語尾がキモイ。
0507nobodyさん2006/09/20(水) 23:13:16ID:???
>>506
すみませっん
0508nobodyさん2006/09/20(水) 23:29:08ID:???
>>507
どういたしましって
0509nobodyさん2006/09/20(水) 23:55:52ID:???
>>508
こっちらこそ
0510nobodyさん2006/09/21(木) 04:53:57ID:uR4E3gkh
ありがとうございまつw
0511sage2006/09/21(木) 19:25:16ID:amkCKdmG
>>500 >>504
ご指摘ありがとうございます! ご指摘どおりpreforward()をオーバライドしていました。

ですが、forward()に書き直して見ましたが、駄目でした。
メールアドレスにタイプしても、なにもエラーが表示されません。
onkeyup='alert("key Up");'なら動作するのでjavascript自体は問題なさそうです。

ためしに、Flare_View_Jsonのforward()でprint_r($json_object)と記述して、
送信ボタンをクリックすると意図したエラーが表示されるのですが、
上記を記述しないと、Web画面上は真っ白が表示されます。
 ※/etc/flare-ini.php で 'debug' => 'true'としてます。

う〜〜ん、ヘルプ プリーズ。
0512nobodyさん2006/09/21(木) 22:02:04ID:???
cli以外でスケルトン作成できんとですか?
phpeditor使いたいとです
0513nobodyさん2006/09/22(金) 00:20:14ID:???
cliでのスケルトン作成に何か不満が?
まぁスケルトン参考にして、必要な物を自分で用意すればいいじゃないか
0514nobodyさん2006/09/22(金) 13:12:23ID:???
フォーム画面->確認画面->処理

という流れのアクションが30個ほどあります。
確認処理が地味にうざいのですが、
確認画面の部分を30個分テンプレ用意する方法と、
確認画面の部分を変数に入れて1つのテンプレから動的に確認画面を表示
させる方法を思いつきました。

できれば後者で行こうと思いますが、
もっと良い方法やスマートな記述法があれば教えてください。

また、今回のような場合に使えるメソッドはないでしょうか?
0515nobodyさん2006/09/23(土) 13:04:01ID:???
なんでEthnaのテンプレートディレクトリはtemplate/ja なの? ja
0516nobodyさん2006/09/23(土) 13:42:38ID:???
ja がなければないで動くから、ja ディレクャgリ消してる。
0517nobodyさん2006/09/23(土) 14:00:20ID:???
どうしてjaってディレクトリを用意してあるのかが気になるんですが
0518nobodyさん2006/09/23(土) 14:34:34ID:???
全世界言語対応をにらんでる
0519nobodyさん2006/09/23(土) 17:47:51ID:???
CVSリポジトリに久々にコミットがあったぽいね。
preview3を待ち望んでる身としては嬉しい限りだけど
9月末に出てくれるかな。。。
0520nobodyさん2006/09/23(土) 23:15:08ID:???
画面からフォーム値を取得するのに、わざわざActionFormの中に記述するのが面倒なんですが
なんとかならないんでしょうか?
0521nobodyさん2006/09/23(土) 23:22:39ID:???
>>520
記述するのが面倒ならASP.NET+Visual Studio使ってみてはいかがでしょうか?
一考の価値はあるかと。

EthnaEditorってのもあるけど。
0522nobodyさん2006/09/24(日) 00:57:44ID:???
ASPはちょっと・・・・
コピペでがんばります。ありがとう
0523nobodyさん2006/09/24(日) 01:10:47ID:???
>>520
setFormVars()をオーバーライドするとか。
mod_rewriteでCoolURIにしてるんだけど、POSTだと$_POSTの内容しか
取得しないので、自分で追加してる。

$_REQUESTから全部取らないのってメモリ節約のため?
それとも指定以外のフォーム値は受け取らないというセキュリティへの配慮?
意図しないフォーム値は使わないだけだから、とりあえず全部格納しても
問題なさそうだけど、理由があるなら教えて偉い人。
0524nobodyさん2006/09/24(日) 02:35:31ID:???
session値をDBに格納したいんですが
>>290 よりスマートな方法ないでしょうか?
0525nobodyさん2006/09/24(日) 11:27:27ID:???
preview3では是非、?action_(アクション名)=trueを/(アクション名)という形式でアクセスしたいもんだ
0526nobodyさん2006/09/24(日) 22:00:35ID:???
>> 525
なんでそんなのを標準にしたいのかはわからんが、今でも
_getActionName_Form()の上書きでできるし、
CVSではUrlHandlerも追加されてるぞ?
0527nobodyさん2006/09/25(月) 00:12:30ID:???
>>525
その方法が標準になった場合って、サブミットボタンでアクションを振り分けるのって
できなくなるよね?あったら教えてください。

perform()
{
if ($this->af->get('submit_action_a'){
.........
} else if ($this->af->get('submit_action_b'){
.........
}
}

とかは無しね。もしかして、それでアクションチェーンがどうたらとか
言ってる奴らがいるのかな?
0528nobodyさん2006/09/25(月) 10:54:53ID:???
>>525
つmod_rewrite
0529nobodyさん2006/09/25(月) 15:06:44ID:???
まあスマートルータは流行りだから
そのうちEthnaにも取り入れられると思うよ
0530nobodyさん2006/09/26(火) 21:09:48ID:???
Ethnaのサンプルみたんですが、DBにアクセスするクラスは複数のActionから参照されるような
つくりをしていましたが、Action別にそれぞれ用意したほうが分かりやすくないですかね?

みなさんはどうやってますか?
0531nobodyさん2006/09/26(火) 21:15:44ID:???
>>530
そっちの方がありえないだろ
0532nobodyさん2006/09/26(火) 21:36:20ID:???
>>531 どっちほうがありえない?
0533nobodyさん2006/09/27(水) 09:47:21ID:???
Action別に作った場合に、単純に変更作業の時に
コードがばらけていて面倒とかはあると思いますよ。

オブジェクト指向の勉強とかするといいと思いますよ。
(語れる程詳しくは無いので、語らないですけどw)
0534nobodyさん2006/09/27(水) 13:42:42ID:???
Ethnaはオブジェクト指向を勉強するきっかけとしてはなかなかいいかもしれないね。
0535nobodyさん2006/09/28(木) 08:14:17ID:???
逆に、複数のActionで同じ処理が使われている場合、変更があったときに
すべての使用されているActionを見直さないといけないっていう問題がでると思うんですよね。

こういうのって画面単位で分担作業するものだから、お互いに変更時に支障がないように
作るものなんじゃないかなぁ。

0536nobodyさん2006/09/28(木) 09:36:33ID:???
「想定していなかった新機能を追加」とかでもやらない限りそんな大きな仕様変更はやらんでしょ
それがどんな作りなのかは分からんけど、どうしても回避出来ないよっぽどの理由がない限り共用にしとくのが無難
0537nobodyさん2006/09/28(木) 22:07:34ID:???
>>536

そうなのかぁ
ということはいろんな処理に使えるようにSQLはなるべくシンプルな処理にしておくのが無難なのかな
複数Joinとかして、1つの画面に必要なデータをいっぺんにとってくることもできるけど、
ほかの画面では不要なものが多すぎて使えないってこともあると思うし。

なんか微妙だけど、共通化(オブジェクト指向ではない)しようと思います。
ありがとうございました。
0538nobodyさん2006/09/29(金) 01:56:32ID:???
>>537
1年前の俺みたいだ。w
あと半年ほど使いまくってEthnaで10個くらい同じことやれば
「あー、この辺共有か」とか分かると思う。

自分はもうEthna使わないでPHPって書いてないからな。
0539nobodyさん2006/09/30(土) 18:02:23ID:???
他は満足してるんだけども
Ethna_AppObjectの検索部分が使いづらくてたまらない

$db->getall();//テーブル全レコード取得
$db->search($column_name,$value);//$column_nameが$valueのレコードを取得

俺の使い方だと、これだけで8割方、用が足りるんだが・・
0540nobodyさん2006/09/30(土) 23:20:58ID:???
>>539
全部レコード取得
$this->appmanager->getObjectPropList('AppObjectClassName');
$valueのレコード
$this->appmanager->getObjectPropList('AppObjectClassName', null, array($column_name) => new Ethna_SearchAppObject($value, OBJECT_CONDITION_EQ));

後者をラップするメソッドをAppObjectの基底クラスに作ってやれば、そんな面倒じゃないと思うけど。
0541nobodyさん2006/10/01(日) 00:53:21ID:???
ORMを作ろうとしたときinsert/update/delete は簡単にできるけど、
selectは様々なバリエーションがあってむずいな。
joinとかhavingとか、そのへんまでスマートにこなしてるORMってある?
RORのActive Record が一番ですか?
05425392006/10/02(月) 14:09:24ID:???
>>540 
ありがとうございます
楽になりました
0543nobodyさん2006/10/02(月) 16:34:53ID:???
複数DBの使用法がよく分かりません、

http://www.ethna.jp/ethna-document-dev_guide-db.html
上の例だと、
$this->backend->getDB('r');
した場合、
勝手に iniファイルの
'dsn_r' => 'mysql://user:pass@unix+localhost/dbname',
の設定を拾ってくるんでしょうか??

$this->backend->getDB('hoge');
なら
'dsn_hoge' => 'mysql://user:pass@unix+localhost/dbname',
でしょうか?
0544nobodyさん2006/10/02(月) 17:38:21ID:???
試してから聞け
0545nobodyさん2006/10/03(火) 16:07:08ID:???
>>544
上は試して動作したからハイOKという類の内容ではない気が。
0546nobodyさん2006/10/03(火) 23:18:59ID:???
なんで?
全く違うDSN書けば違いがわかると思うんだけど。
0547nobodyさん2006/10/04(水) 11:00:18ID:???
>>543
概ねあってるけど、Controllerの$dbにも書いておくべし
0548nobodyさん2006/10/05(木) 14:55:25ID:???
DBでsessionしたいわけなんですが、
普通に自分で関数カキカキしてactionディレクトリあたりに
入れればつかえる??
0549nobodyさん2006/10/06(金) 10:09:32ID:O2kp1NLj
ethnaの公式サイト見ると、
app/action 階層の下に
system1_hoge.php
system2_hoge.php
と設置する場合の手順が書いてありますが、
system1/hoge.php
system2/hoge.php
という風にアクションファイル自体を system1 とsystem2 で設置ディレクトリを分けたいと考えています。

この場合のアクション定義などが非常にこんがらがってしまったのですが、
どなたか助言おながいします。
0550nobodyさん2006/10/06(金) 11:36:19ID:???
Call to undefined function: getrow()
のエラーが出るんだけど、
PEARのDBクラス継承してるんですよね?
ほわい?
0551nobodyさん2006/10/06(金) 12:07:20ID:???
>>550
MLやフォーラムくらい嫁
0552nobodyさん2006/10/06(金) 12:35:34ID:???
>>551
サンクス

てか継承してないのかよ、表記修正してくれよ、
とおもいますた
0553nobodyさん2006/10/06(金) 13:47:06ID:???
アクションクラスで
$this->af->setApp('hairetu', $hairetu);
して
tplで下のようにしてみたんですが、機能しません。
{section name=cnt loop=$app.hairetu}
ほわい?
0554nobodyさん2006/10/06(金) 15:35:21ID:Ky3gzt1x
存在しないファイルをrequireしようとしたら
fatal Errorになったんですけど、こういう場合のエラー処理は
ethna上でのエラー処理に組み込むことはできないんでしょうか?
0555nobodyさん2006/10/06(金) 18:01:45ID:???
E_ERROR(FATAL)はエラーハンドラでも上書きできない
0556nobodyさん2006/10/06(金) 19:31:49ID:???
今更ながらEthna 2.3.0 Preview2リリースを入れてみたんだけど、
Ethna_ClassFactoryの変更部分で悩んでいます。

app/[project_id]_Controller.php の $class メンバに
'user' => 'Some_Foo_Bar',
と付け足すのは良いとして、
$user =& $this->backend->getObject('user');はどこに記述するのでしょうか?
Ethna_ActionFormでいちいち記述するのかな?

マニュアル直ってないし・・・
ttp://ethna.jp/ethna-document-dev_guide-appobj-manager.html
0557nobodyさん2006/10/07(土) 01:27:47ID:???
>>556
なんかねー、そのへん俺もよくわからんのだけど、とりあえず
class Hogeproject_User extends Ethna_AppObject
class Hogeproject_UserManager extends Ethna_AppManager
って作ったら、そのファイルをControllerでincludeして

$user =& $this->backend->getObject('User');
$user_manager =& $this->backend->getManager('User');

ってやってる。$classメンバには何も付け足してない。
なんつーか、以前より面倒になった気がするし。w
0558nobodyさん2006/10/07(土) 11:29:23ID:???
>>557
それは面倒ですなw
Ethna_Controllerの$classメンバに追加するのが標準的なやり方
見たいなのでもうちょっと簡易な方法があるといいのだけれど。

ウェブサイトには「(不評なら戻します@preview2)」って書いてあるけど
MLでは話題にすらなってないし、このまま定着するのかな?
とにかくサンプルかもうちょっと詳細なヘルプが欲しいです。
0559nobodyさん2006/10/07(土) 13:48:08ID:???
繰り返し部分を別ファイル(hoge.inc.php)にして require() して使いたいのですが、
どうすればいいでしょうか?

require("絶対パス/hoge.inc.php");
しか思いつきませんでした。
0560nobodyさん2006/10/07(土) 15:26:26ID:???
>>559
>>556-558の話がまさにそう。

最新版の話でなかったら、>>566のURLに詳しく載ってる。
0561nobodyさん2006/10/07(土) 18:33:16ID:???
ClassFactoryからgetManager()するならContollerでのincludeも
$classへの追加も不要でしょ。
多少面倒な気もしてるけど、俺はActionClassで毎回
$hoge_manager =& $this->backend->class_factory->getManager('Hoge');
$hoge_manager->getHogeList();
とかやってる。もしかして間違ってる?
05625572006/10/08(日) 00:31:43ID:???
>>561
いや、君が正解だと思う。
おいら、$this->backend->class_factoryプロパティを知らなかったよ。THX.

しかし、Ethnaって「多少面倒な気も」というのにいまいち合致しないよね。イメージ的に。
というのは、$this-->appmanager->って、PHPの
「メソッドを追加できないくせにプロパティはE_NOTICEも吐かずにガンガン追加可能」
っていう特徴を活かしてるなって思ったから。その辺がEthnaの「絶妙に妥協」というのに
共感を覚えてたところでもあって。

というか、シングルトンでAppObject/AppManager/ActionClass/ViewClassで
Managerオブジェクト(ActionFormオブジェクトもだけど)を持ち回ししてるところに
「すげー」って思ったのだ。最初。それが無くなったのは残念。

あと、PHP5なら
$this->backend->getManager('Hoge')->hogeManagerMethod();
ができるよね。だから
$this->gm('Hoge')->hogeManagerMethod();
くらいまで簡略化できるなら従来の
$this->hoge->hogeManagerMethod();
と同等と思える。
0563nobodyさん2006/10/08(日) 13:29:42ID:???
App_ActionClassのコンストラクタで

parent::Ethna_ActionClass($backend);

$c =& $backend->getController();
$manager_list = $c->getManagerList();
foreach ($manager_list as $k => $v) {
$this->$k =& $backend->getManager($v);
}

こうしてやれば、従来どおりなわけだが
05645632006/10/08(日) 13:34:23ID:???
http://www.itt-web.net/modules/bwiki/index.php?Ethna2.3%A4%C7AppManager%A4%CE%A5%D5%A5%A9%A5%ED%A1%BC
こことか参考にしてみたらいいと思う。
0565nobodyさん2006/10/09(月) 10:51:17ID:???
フォーム値の検証とフィルタについてなんですが、
フィルタをフォーム値検証の前に実施する方法は無いでしょうか?

ある変数を半角英数字しか受け付けないように設定、
かつ全角で受け付けたときには自動的に半角にするようフィルタを設定
しているのですが、
全角で入力してしまうと、validate()が0にならないためです。
0566nobodyさん2006/10/09(月) 13:02:01ID:???
実際のところ、クラスのメンバ変数として何が定義されているかわからないのに
Controllerの$managerに追加された名前で$this->hogeとアクセスできてしまうのは
問題ありまくりだし、気持ち悪かった。

AppManagerの呼び出し方にワンクッション追加されただけだから、個人的にはそこまで
面倒は感じてないし、記述が長いならメソッドひとつ仲介させれば済む話だと思う。

562氏の言うとおり、ActionFormやAppManagerがAction/Viewを問わずリクエスト内で
自由に使えるのは他のフレームワーク(symfonyとかZend Frameworkとか)には無い考え方で
自分がEthnaを気に入った理由のひとつだけど、そのメリットは無くなってないんじゃないかな?
0567nobodyさん2006/10/09(月) 18:37:23ID:NhVn4oaT
毎回全てのAppManagerを読み込む従来どおりより新方式のほうがいいなー。
05685622006/10/09(月) 19:52:52ID:???
>>566
>問題ありまくりだし、気持ち悪かった。
実際に問題と言うと
・DB接続しなけりゃ使えない
・Manager全てnewしてるから(シングルトン使ってるとはいえ)重い
くらいかな?他に何かある?Managerって作ってもせいぜい20くらいだったから
重いとは思わなかったけど。

キモイのは確かに気持ち悪かったけど、「PHPだしいいじゃん」という気にもさせてくれる。
その辺が「絶妙に妥協」なのかなと。

で、気持ち悪さを払拭しようとすると、Action/View/AppManager/AppObjectそれぞれを
ラップしたクラスでoverloadを使って、プロパティへのアクセス方法を定義してやれば
ちょっとは気持ち悪くなくなると思う・・・。
http://jp2.php.net/overload

自分的には「前のが便利、だけど(きっとメリット色々ありそうだから)新方式に従います」
って感じ。
05695662006/10/09(月) 20:38:58ID:???
んーと、ActionClassのコンストラクタとかでチェックもせずに
上書きしてるから、メンバ変数が破壊されるってことです。

既存のもので言うと、試しにControllerの$managerに
$manager = array( 'af' = > 'AirFrance' );
とか入れてみるとActionFormが使えなくなるのが解ると思う。
($this->af はActionForm じゃなくて AirFrance になったからね)

$managerに設定する値についての注意事項も書いていないし、使う側が
注意していればいい、というには危険な仕様じゃないかな。
05705622006/10/09(月) 21:02:06ID:???
>>569
>んーと、ActionClassのコンストラクタとかでチェックもせずに
>上書きしてるから、メンバ変数が破壊されるってことです。
あぁ、なるほど。すっごい盲点でした。
managerが増えすぎていった場合、ハマりポイントになりそうですね。
0571nobodyさん2006/10/10(火) 07:39:28ID:???
PHPだし。
厳格なのがよければにしとけば。
0572nobodyさん2006/10/10(火) 07:40:00ID:???
抜けた。
Javaにしとけば。
0573nobodyさん2006/10/12(木) 12:29:20ID:???
ttp://ethna.jp/pipermail/users/2006-June/000380.html
これと同じエラー(mysql_close)起きてるんですが、
ethna本体とか弄らないと厳しいんでしょうか・・・・
他に解決方法きぼんぬ
0574nobodyさん2006/10/12(木) 17:17:50ID:???
本体を自分でいじりたくないなら、2.3.0pr1以降か、CVS版をつっこむくらいしか。
あとは、継承してそこにパッチを当てておけば、後ほどバージョンアップしても気にならずに済むかも。
stableの保守も考えてほしいよね。
0575nobodyさん2006/10/16(月) 16:19:02ID:???
関数ぱっと作ってperform()内で使いたい場合、
function kansuu()をperform()内に書いて
$this->kansuu で呼び出すだけでOK?
0576nobodyさん2006/10/16(月) 20:51:20ID:???
>>575
素で言ってるならPHPのマニュアル100回読み直してこい
0577nobodyさん2006/10/16(月) 22:29:35ID:???
PHPっつーか、オブジェクト指向の本読んだほうがいいね。
0578nobodyさん2006/10/17(火) 13:52:04ID:???
ethna から pear 使用するためにはどうすればよかとでしょうか。
0579nobodyさん2006/10/17(火) 15:06:57ID:???
>>578
作ったプロジェクトにあるlibフォルダに解凍する。
05805782006/10/20(金) 11:47:43ID:???
>>579
サンクスです、申し訳ないついでに
呼び出しの方法もきぼんぬ
0581nobodyさん2006/10/20(金) 13:43:30ID:???
>>580
579じゃないけど
Controllerでincludeするのが一般的だと思う。
使うときは普通に使いたいところで使えばいい
■ このスレッドは過去ログ倉庫に格納されています