【PHPフレームワーク】Ethna【スケルトン自動作成】
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2005/08/03(水) 21:00:39ID:TuHx69hTEthna -PHPウェブアプリケーションフレームワーク-
http://ethna.jp/
SourceForge.jp: Project Info - Ethna
http://sourceforge.jp/projects/ethna/
0457nobodyさん
2006/08/18(金) 22:25:06ID:???0458nobodyさん
2006/08/19(土) 16:51:46ID:???0459nobodyさん
2006/08/23(水) 20:31:42ID:???Singletonとかの形でコネクションを持っているところがあるといいんだけど
0460nobodyさん
2006/08/26(土) 23:37:48ID:???ってやりゃいいじゃん
0461nobodyさん
2006/08/28(月) 06:50:58ID:???〜〜〜
{include file="footer.tpl"}
毎回書くのが激しく面倒で、何か良い方法が無いものか少し検索。
↓同じような事考えた人ハケーン
ttp://d.hatena.ne.jp/tadito/20060415/1145115774
ページ下部:Smartyのここが
何か方法はありませんでしょうか。
0462nobodyさん
2006/08/28(月) 14:10:42ID:???0463nobodyさん
2006/08/28(月) 16:19:13ID:WBoTQIamtplファイルで配列を表示させる方法を教えてくれませんか。
setAppだと通常の変数しか定義出来ない・・・
↓こんな感じに書いて、array data にテーブルhogeの一覧を格納したいのです。これだと動かないですけど。
function preforward()
{
$db =& $this->backend->getDB();
$result =& $db->query("select * from hoge");
$i = 0;
while ($data[$i] = $result->fetchRow()) {
$this->af->setApp("data[]", $data[$i] );
$i++;
}
}
0464nobodyさん
2006/08/28(月) 16:40:35ID:???>setAppだと通常の変数しか定義出来ない・・・
そんなことはなくて、普通に配列が格納された変数を渡せばいいだけ。
0465nobodyさん
2006/08/28(月) 16:55:38ID:WBoTQIamこれで動きました。ありがとうございます。
while ($data[$i] = $result->fetchRow()) {
$i++;
}
if ( $i > 0 ) {
$this->af->setApp("data", $data );
}
0467nobodyさん
2006/08/29(火) 00:49:44ID:???ethna add-template hoge
するかな。
0468nobodyさん
2006/08/29(火) 02:17:54ID:???Ethna_ViewClassをextendsして
forward()でforward_pathをレイアウト用テンプレートのパスに置き換えて
元のforward_pathをsetAppしてレイアウト用テンプレートで
{include file=$app.forward_path}
とか出来るようにする感じかな
んでレイアウト管理マネージャ作って
$Layout->disable();とか$Layout->set('admin');とか出来るようにしてる
0469nobodyさん
2006/08/29(火) 08:11:57ID:yZ1+igoY静的なコンテンツが半分以上だということが分かりました。
1つのビューに対しては、1つ以上のアクションが必要なので
たとえば、サイトの説明ページを1ページ増やすたびに
何もしないアクションを追加していかなければいけないと
思うのです。これは、そういうものだと諦めるしかないので
しょうか?
これまではフレームワークを使っていなかったので、Web
デザイナーさんに会員認証などの処理を含んだPHPテンプ
レートを渡して、ある程度自由に書いてもらっていたのですが、
アクションを追加しないとページの追加などができないのは
結構厳しいです。
0470nobodyさん
2006/08/29(火) 17:52:14ID:???0471nobodyさん
2006/08/29(火) 22:15:22ID:???自分も今似たような状況にある。
なんとか効率よくテンプレートだけを使用できないかなと思ったけど
結局、静的(半静的)用のテンプレート周りだけEthnaと切り離してやることにした。
ちなみに、↑の半静的ページっていうのは、認証結果なんかも全部必要ないページね。
認証結果や他のEthnaと結構かかわってくるようなページは全部Ethna通してる。
0472nobodyさん
2006/08/30(水) 00:01:26ID:???0473nobodyさん
2006/08/30(水) 08:24:36ID:???他のパラメータでビュー指定して。
0474nobodyさん
2006/08/30(水) 13:01:47ID:???0475nobodyさん
2006/09/03(日) 21:48:10ID:???http://labs.riaf.org/easa/
wikiが見れなくなってるけど
ほかにもいろいろサンプルが見たい
0476nobodyさん
2006/09/04(月) 00:20:13ID:???サンプルでXSS可能なものが多いし。
0477nobodyさん
2006/09/05(火) 21:37:08ID:???例えばEthna_Plugin_Logwriter_Fileを継承して
自分で書いたコードでオーバーライドしたとして
そのclassをどういう手続きを踏めば、
使えるようになるのか、だれか教えてちょうだい。
0478nobodyさん
2006/09/06(水) 07:57:33ID:???0479477
2006/09/06(水) 14:57:37ID:???元のLoggerって生成することなど意識せずとも使えます。
自作のものも生成することなく元のLoggerと置き換わるような
形で使いたいのです。
Controllerの $class_default['logger']を自作のものに書き換えればよいのでしょうか?
0480nobodyさん
2006/09/06(水) 16:21:52ID:???0481477
2006/09/06(水) 16:38:38ID:???コメントのTODOにずばり書いてあった。。。OTL
0482nobodyさん
2006/09/06(水) 20:20:01ID:???$conditionがNULLでWHERE IS NULLとかいうSQLになっちゃう...。
$key, $key_type付きでwhere付きのgetはできるのに、getせずにインスタンスしたそのままでremoveしてもかわらず...
皆さんはちゃんとうごいてます?
0483nobodyさん
2006/09/07(木) 00:23:32ID:???なんかよくわからないけど、いままで変な挙動したこと無いから何か間違ってると思う。
AppObjectでgetしたっていうのがよくわからない。
AppManagerでgetObjectPropとかgetObjectListとかじゃなくて?
AppObjectでgetするのは、AppObjectのpropだけだよね。
新しく作りたいならnewだし。
0484482
2006/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]
のエラーで返されます
0485483
2006/09/07(木) 19:29:19ID:???まぁそれはおいといて。
$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:???してるのに何故
$config->get()
typo?
0487nobodyさん
2006/09/08(金) 10:48:28ID:???どうしても生SQLを発行する場面があると思うのですが、
AppObjectを使ったりSQLを書いたりするコードが混ざっていると
気持ち悪い(というか不適切なコード?)な気がします。
実際にEthnaを使っている方はどうされているんでしょうか?
0489nobodyさん
2006/09/09(土) 18:41:06ID:???どこに記述したいいのか、どこにファイルを置けばいいんでしょう?
どこに書いても、libやappにおいてもだめだし
携帯向けにsjisのページが作りたいとおもったけど開発ページにはoutputをどこにおいたらいいの書いてない...
0490nobodyさん
2006/09/10(日) 08:05:27ID:???もちろん、ここはチェックしたよな
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.1.2から
乗り換えたいので頼んます。。。
0493nobodyさん
2006/09/19(火) 08:05:38ID:???0494nobody
2006/09/19(火) 15:05:49ID:l653wI+U以下のサンプル通りにスクリプトを書いて動作させたけど、
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:???専用のmethodはないのでしょうか?
Ethna_RendarerのgetEngineとかいうのを使ってfetchするしかないのでしょうか?
0496nobodyさん
2006/09/19(火) 22:32:04ID:???tp://some.host/~foo/?action_login=trueというようにアクセスしてる場面を見受けるけどこれを
tp://some.host/~foo/loginみたいな形式に変えることは出来ないんかなぁ?
0497nobodyさん
2006/09/19(火) 22:37:17ID:R6sen3Jlそのメソッドは無いね。
フィルタ使ってob_で拾うとか、いろいろ手段はあるけど。
>>496
mod_rewrite使えば可能。
0498nobodyさん
2006/09/19(火) 23:22:06ID:???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:???試してないので恐縮ですが、json.tplを出力しようとしている
ということは、Flare_View_Jsonクラスのforward()をオーバー
ライドしていないのではないでしょうか?
0501496
2006/09/20(水) 00:53:00ID:???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:Ni5iDH7a0510nobodyさん
2006/09/21(木) 04:53:57ID:uR4E3gkh0511sage
2006/09/21(木) 19:25:16ID:amkCKdmGご指摘ありがとうございます! ご指摘どおり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:???phpeditor使いたいとです
0513nobodyさん
2006/09/22(金) 00:20:14ID:???まぁスケルトン参考にして、必要な物を自分で用意すればいいじゃないか
0514nobodyさん
2006/09/22(金) 13:12:23ID:???という流れのアクションが30個ほどあります。
確認処理が地味にうざいのですが、
確認画面の部分を30個分テンプレ用意する方法と、
確認画面の部分を変数に入れて1つのテンプレから動的に確認画面を表示
させる方法を思いつきました。
できれば後者で行こうと思いますが、
もっと良い方法やスマートな記述法があれば教えてください。
また、今回のような場合に使えるメソッドはないでしょうか?
0515nobodyさん
2006/09/23(土) 13:04:01ID:???0516nobodyさん
2006/09/23(土) 13:42:38ID:???0517nobodyさん
2006/09/23(土) 14:00:20ID:???0518nobodyさん
2006/09/23(土) 14:34:34ID:???0519nobodyさん
2006/09/23(土) 17:47:51ID:???preview3を待ち望んでる身としては嬉しい限りだけど
9月末に出てくれるかな。。。
0520nobodyさん
2006/09/23(土) 23:15:08ID:???なんとかならないんでしょうか?
0521nobodyさん
2006/09/23(土) 23:22:39ID:???記述するのが面倒ならASP.NET+Visual Studio使ってみてはいかがでしょうか?
一考の価値はあるかと。
EthnaEditorってのもあるけど。
0522nobodyさん
2006/09/24(日) 00:57:44ID:???コピペでがんばります。ありがとう
0523nobodyさん
2006/09/24(日) 01:10:47ID:???setFormVars()をオーバーライドするとか。
mod_rewriteでCoolURIにしてるんだけど、POSTだと$_POSTの内容しか
取得しないので、自分で追加してる。
$_REQUESTから全部取らないのってメモリ節約のため?
それとも指定以外のフォーム値は受け取らないというセキュリティへの配慮?
意図しないフォーム値は使わないだけだから、とりあえず全部格納しても
問題なさそうだけど、理由があるなら教えて偉い人。
0525nobodyさん
2006/09/24(日) 11:27:27ID:???0526nobodyさん
2006/09/24(日) 22:00:35ID:???なんでそんなのを標準にしたいのかはわからんが、今でも
_getActionName_Form()の上書きでできるし、
CVSではUrlHandlerも追加されてるぞ?
0527nobodyさん
2006/09/25(月) 00:12:30ID:???その方法が標準になった場合って、サブミットボタンでアクションを振り分けるのって
できなくなるよね?あったら教えてください。
perform()
{
if ($this->af->get('submit_action_a'){
.........
} else if ($this->af->get('submit_action_b'){
.........
}
}
とかは無しね。もしかして、それでアクションチェーンがどうたらとか
言ってる奴らがいるのかな?
0529nobodyさん
2006/09/25(月) 15:06:44ID:???そのうちEthnaにも取り入れられると思うよ
0530nobodyさん
2006/09/26(火) 21:09:48ID:???つくりをしていましたが、Action別にそれぞれ用意したほうが分かりやすくないですかね?
みなさんはどうやってますか?
0533nobodyさん
2006/09/27(水) 09:47:21ID:???コードがばらけていて面倒とかはあると思いますよ。
オブジェクト指向の勉強とかするといいと思いますよ。
(語れる程詳しくは無いので、語らないですけどw)
0534nobodyさん
2006/09/27(水) 13:42:42ID:???0535nobodyさん
2006/09/28(木) 08:14:17ID:???すべての使用されているActionを見直さないといけないっていう問題がでると思うんですよね。
こういうのって画面単位で分担作業するものだから、お互いに変更時に支障がないように
作るものなんじゃないかなぁ。
0536nobodyさん
2006/09/28(木) 09:36:33ID:???それがどんな作りなのかは分からんけど、どうしても回避出来ないよっぽどの理由がない限り共用にしとくのが無難
0537nobodyさん
2006/09/28(木) 22:07:34ID:???そうなのかぁ
ということはいろんな処理に使えるようにSQLはなるべくシンプルな処理にしておくのが無難なのかな
複数Joinとかして、1つの画面に必要なデータをいっぺんにとってくることもできるけど、
ほかの画面では不要なものが多すぎて使えないってこともあると思うし。
なんか微妙だけど、共通化(オブジェクト指向ではない)しようと思います。
ありがとうございました。
0538nobodyさん
2006/09/29(金) 01:56:32ID:???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:???全部レコード取得
$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:???selectは様々なバリエーションがあってむずいな。
joinとかhavingとか、そのへんまでスマートにこなしてるORMってある?
RORのActive Record が一番ですか?
0543nobodyさん
2006/10/02(月) 16:34:53ID:???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:???0546nobodyさん
2006/10/03(火) 23:18:59ID:???全く違うDSN書けば違いがわかると思うんだけど。
0548nobodyさん
2006/10/05(木) 14:55:25ID:???普通に自分で関数カキカキしてactionディレクトリあたりに
入れればつかえる??
0549nobodyさん
2006/10/06(金) 10:09:32ID:O2kp1NLjapp/action 階層の下に
system1_hoge.php
system2_hoge.php
と設置する場合の手順が書いてありますが、
system1/hoge.php
system2/hoge.php
という風にアクションファイル自体を system1 とsystem2 で設置ディレクトリを分けたいと考えています。
この場合のアクション定義などが非常にこんがらがってしまったのですが、
どなたか助言おながいします。
0550nobodyさん
2006/10/06(金) 11:36:19ID:???のエラーが出るんだけど、
PEARのDBクラス継承してるんですよね?
ほわい?
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:Ky3gzt1xfatal Errorになったんですけど、こういう場合のエラー処理は
ethna上でのエラー処理に組み込むことはできないんでしょうか?
0555nobodyさん
2006/10/06(金) 18:01:45ID:???0556nobodyさん
2006/10/06(金) 19:31:49ID:???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
■ このスレッドは過去ログ倉庫に格納されています