【PHPフレームワーク】Ethna【スケルトン自動作成】
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2005/08/03(水) 21:00:39ID:TuHx69hTEthna -PHPウェブアプリケーションフレームワーク-
http://ethna.jp/
SourceForge.jp: Project Info - Ethna
http://sourceforge.jp/projects/ethna/
0792nobodyさん
2007/02/05(月) 23:12:49ID:???クエリ発行するには
AppManager->db->query();
でいいんだよね?
AppObjectって必要なの?
0793nobodyさん
2007/02/06(火) 00:41:00ID:???0794nobodyさん
2007/02/06(火) 15:35:18ID:???内で セッション値やアクションフォーム値を使用するためには
どうすればいいでしょうか?
$this->session->get('hoge')
でやってみましたが、Call to a member function on a non-object
が出ました。
0795nobodyさん
2007/02/06(火) 15:55:40ID:???}
とするとエラーが出ます。
$hoge = $this->af->get("hoge");
if( !empty( $hoge ) ){
}
ならうまくいきます。へるぷみー
0796nobodyさん
2007/02/06(火) 18:02:29ID:???使えませんかね?
setApp するのがだるいのです。
0797nobodyさん
2007/02/06(火) 19:35:30ID:???PHP4だからじゃね?
>>796
[APP_ID]_ViewClass.phpの _setDefaultメソッドでアサインすれば?
0798nobodyさん
2007/02/06(火) 19:52:01ID:???emptyで調べられるのは変数のみ
http://jp.php.net/manual/ja/function.empty.php
0799794
2007/02/06(火) 20:22:16ID:???レスありがとうございます。
おっしゃるとおり PHP4です。
PHP5にせずに何とかする方法はないでしょうか。
あとみなさんPHP5でエスナってるんでしょうか?
0800721
2007/02/06(火) 23:30:31ID:???>/etc/[APPID]-ini.php
>内で セッション値やアクションフォーム値を使用するためには
>どうすればいいでしょうか?
そんなやり方はしないヨ。
/etc/hogehoge-ini.php
には、設定値を書くから、設定値をセッションで上書きするって言う使い方はしない。
設定値はethna_configオブジェクト(のサブクラス)として存在してて、
そのロードはControllerのコンストラクタで行われてて、それってEthnaの起動のほぼ直後。
もちろん、Sessionが始まるより遥か前。
そもそも、セッションオブジェクトやアクションフォームオブジェクトは
AppManager/AppObject/ActionClass/ViewClass内のみで使われることを
想定としてるから、そんな変なところではアクセスできるわけがない。
0801nobodyさん
2007/02/07(水) 09:06:56ID:???792です。
自前のクラスを使うことにしました、ありがとう。
いろいろ調べてみて、現状ではAppObjectを他のフルスタックフレームワークのModelと同じように考えてはいけないと思いました。
何でこんな中途半端なものがくっついてるんだろう?
混乱するだけなのにな・・・。
0802nobodyさん
2007/02/07(水) 17:46:41ID:hhcgJkB/私はメチャメチャ使っています。
とにかく、ActionClassの行数を増やしたくないので、とりあえずAppManager/AppObjectにという感じで。
0803nobodyさん
2007/02/10(土) 12:18:29ID:???htmlミスりまくりの自分としてはテスト中はかなり不便なんですが、
どこかでキャッシュの設定はできるんでしょうか?
smartyのキャッシュ設定はoffになってました。
本家でキャッシュで調べましたが、見つかりませんでした。
0804nobodyさん
2007/02/11(日) 11:49:01ID:???0807nobodyさん
2007/02/12(月) 01:51:26ID:???継承だったらこんな感じになるのでしょうか?
Base_Action
{
function doHoge()
{
}
function doFuga()
{
}
}
class Action_A extends Base_Action
{
function perform()
{
$this->doHoge();
}
}
class Action_B extends Base_Action
{
function perform()
{
$this->doHoge();
$this->doFuga();
}
}
0808nobodyさん
2007/02/14(水) 23:01:46ID:pcigeSJ10809nobodyさん
2007/02/15(木) 00:08:38ID:???0810721
2007/02/15(木) 03:31:47ID:???>行数のかさむコードには誰も反応しない
というか、何したいかいまいちよくわからん・・・・。
アクションのフォワードとかリダイレクトとかそれっぽい言葉があるが、
とりあえず言葉を使ってるだけ感がいっぱいで。
0811nobodyさん
2007/02/16(金) 17:19:24ID:???APPID/lib 内のファイルを操作したいです。
0813nobodyさん
2007/02/17(土) 13:00:20ID:???0814nobodyさん
2007/02/19(月) 17:44:59ID:????や&で切れる。どうやればいいですか?
0815>>814 マルチ乙www
2007/02/19(月) 23:38:21ID:???19: 普通 ( http://mixi.jp/show_friend.pl?id=2134264 )
つい先日から、ethnaを使い始めたものですが、mod_rewriteで上手く飛ばせないので、どうかご教授ください。
簡単なブックマーク的なものを作成しようとしてるのですが、URLを
entry?uri=http://hoehogeをentry/hogehogeのようにしたいのですが、hogehogeに?や&などが含むとそこでとぎれてしまいます。
簡単に、
RewriteRule ^entry/(.+) /entry?uri=http://$1 [L] や
RewriteRule ^entry/(.+) /entry?url=http://$1%{QUERY_STRING} [L]
こんふうに書いたのですが、これがいけないのでしょうか?
?や&が含まれなければ、全てを取得できるのですが。。
はてブさんとかのエントリーと比較した場合、http://の://がはてブさんだとそのままだったのですが、自分のエントリーを見ると、http%3A%2F%2Fのようにエンコードされてしまいます。
これが原因なのでしょうか?
Smarty側のほうには、エスケープさせるsetAppNEがありますがこれは表示の問題で今回とは関係ないと思いますし。
もしかしたら、mod_rewriteの問題でここでの質問はおかしかったらすいません。すぐに削除します。
ただ、ethnaのエスケープ関連の問題でしたら、どうか解決法をご教授くださいませ。
よろしくお願いします。
0816nobodyさん
2007/02/20(火) 00:59:16ID:???もっと簡単なプログラムから勉強し直す。
0817nobodyさん
2007/02/21(水) 05:44:31ID:???できなさそうですね?
0819nobodyさん
2007/02/22(木) 15:16:44ID:???0821nobodyさん
2007/03/01(木) 00:08:12ID:???ethna add-action --basedir=dir sample
とかやるとき。
0822nobodyさん
2007/03/01(木) 16:07:38ID:ue5nOCQJSQLの関数使いたいとき、
たとえば
update some_table set some_date = now() where some_id = 1;
↑こんなかんじのことをAppObjectでやりたいときって
どうやればいいんでしょう
ちなみにPostgreSQLです
0824nobodyさん
2007/03/02(金) 01:00:04ID:???どっちでもいいが。
0825nobodyさん
2007/03/05(月) 17:42:41ID:???0826nobodyさん
2007/03/05(月) 20:12:43ID:???将来的に→実装する確率20%
はやいうちに→実装する確率70%
気が向いたら→実装する確率0%
0828nobodyさん
2007/03/07(水) 10:37:08ID:???0829nobodyさん
2007/03/08(木) 00:52:13ID:???0830nobodyさん
2007/03/08(木) 04:27:37ID:???$ pear install ethna/ethna
でインストールできません・・・
アーカイブをダウンロードして展開したEthna-2.3.1の中に
Ethna-2.3.1とpackage.xml
が入ってるのですが、パスが通ったディレクトリに移動するべきディレクトリって中に入ってる方でしょうか?
0831830
2007/03/08(木) 05:04:28ID:???0832nobodyさん
2007/03/10(土) 19:15:21ID:???せっかくマニュアル読んだのに。
0833nobodyさん
2007/03/10(土) 19:26:45ID:???0834nobodyさん
2007/03/10(土) 20:16:36ID:???使ってる人は無視して使ってるの?書き換えてるの?
0835nobodyさん
2007/03/10(土) 20:32:39ID:???php.iniで。
0836nobodyさん
2007/03/13(火) 05:04:38ID:HG/GLq71ActionFormでアップロード用とファイル名ようにフォームを2つ定義?
0837nobodyさん
2007/03/13(火) 14:29:12ID:???$db =& $this->backend->getDB();
$db->db->autoExecute(....
とかかいてるけどいいんだろうか。
AppObjectでWHERE文で一括DELETEとか出来たら楽なんだけどなぁ。SELECTはできるのに。
0838nobodyさん
2007/03/13(火) 17:06:50ID:???イマイチよくわからないが、これじゃダメなのか?
$filename = $_FILE['example']['name'];
$app_object->set('filename', $filename);
0839こんな藤本神は嫌だ
2007/03/14(水) 09:01:38ID:???0842nobodyさん
2007/03/14(水) 14:03:59ID:???0844こんな藤本神は嫌だ
2007/03/14(水) 15:25:49ID:???0845nobodyさん
2007/03/14(水) 15:28:55ID:???0846nobodyさん
2007/03/14(水) 18:58:02ID:???0847nobodyさん
2007/03/14(水) 23:56:44ID:???0848nobodyさん
2007/03/16(金) 00:48:50ID:???/ \
/ ─ ─\
/ (●) (●) \ 「カワユスナァ、カワユスナァ」・・・・と
| (__人__) | ________
\ ` ⌒´ ,/ .| | |
ノ \ | | |
/´ カタ. | | |
| l カタ | | |
ヽ -一ー_~、⌒)^),-、 | |_________|
ヽ ____,ノγ⌒ヽ)ニニ- ̄ | | | ____
0849nobodyさん
2007/03/16(金) 23:20:57ID:???http://ethna.jp/ethna-document-dev_guide-appobj-overview.html
には
....
$prop_defメンバには、フィールド定義を記述します。
今のところ、スキーマの自動取得は対応していません(有った方がいいですかねー?)。 Ethna-2.3.0では自動取得されるようになりました。
....
とあって、多分これ
http://ethna.jp/pipermail/users/2006-January/000165.html
あたりがマージされてるのかと思ったんですが
ethna add-app-object sometable
としてもpropdefは空で何も無いですよね?つーかskel.app_object.php自体がテーブル名以外は作られそうに無いし・・・
DBからスキーマを自動取得してマッピングされたAppObjectを生成するのは特別な方法があるんでしょうか?
0850nobodyさん
2007/03/17(土) 00:50:06ID:???の使い方がリファレンス見ても良くわからんのですが、
$form = $this->af->get('test');
$form_array = $this->af->getArray();
で、
$form_array['test'] と $form は等しくなる、
という考えて間違ってますでしょうか?
なぜかうまくいかないので間違ってる気がするのですが。
0851nobodyさん
2007/03/17(土) 01:26:51ID:???prop_defは省略できる
最初のDBアクセスでテーブル定義を取得して、
/tmp/cache/default(だったかな?)にseriarizeしたものが保存されるようになってる
でも、prop_def自動定義も欲しいところだな
藤本神もいちい氏もAppObjectを改良したいみたいなこと言ってるから、そのうち(相当先だろうけど)変わるかもしれない
0852nobodyさん
2007/03/17(土) 03:37:48ID:???>/tmp/cache/default(だったかな?)にseriarizeしたものが保存されるようになってる
PHP5以降な。
0853nobodyさん
2007/03/17(土) 19:32:51ID:???なんだかなぁ。
0854nobodyさん
2007/03/17(土) 21:37:37ID:???不毛だ・・・
0855nobodyさん
2007/03/18(日) 08:17:38ID:???> 現在はすっかり飽きている様子。
依存症かよw
0856nobodyさん
2007/03/20(火) 17:22:43ID:???appManagerから別のappManager呼び出したい時って
どうやってするんでしょうか?
0857nobodyさん
2007/03/20(火) 17:42:03ID:???普通に
$this->backend->getManager('hogehoge');
とかでできるんじゃないか?
0858856
2007/03/21(水) 23:53:28ID:???あ、単純にtypoしてただけでした・・
1回やってみただけでこれじゃだめなんだと決め付けてました。
$this->backend->getManager('hogehoge');
で行けました。ありがとうございました。
0859nobodyさん
2007/03/22(木) 17:24:28ID:????action_edit=true&id=1
と指定された際にDBからid=1のレコードを取得($row)して
$this->af->setApp('name', $row[name]);
したものを
name:<input type="text" value="{$app.name}">
とフォームに表示して修正、と言った感じの場合に、
validate()に引っかかって再修正とか、「修正しました」とメッセージを表示してまた同じようにフォームを表示と言った処理をしたい
場合は毎回
$this->af->setApp('name',$this->af->get('name');
と書いて回るのが普通なんでしょうか?
それとも、最初に表示する際に
$this->af->form_vars['name'] = $row[name];
と直接代入してしまって($af->setForm()って無いですよね?)
name:<input type="text" value="{$form.name}">
と処理してしまって良いものなのでしょうか?
0860nobodyさん
2007/03/22(木) 18:48:43ID:???0861nobodyさん
2007/03/30(金) 18:17:00ID:???入力画面表示を
action_add
としたら、そこからPOSTしてDB登録する動作を
action_add_do
にした場合、ActionFormの中身って両方(Add.php,Add/Do.php)に同じものを書くしか無いんでしょうか?(Do.phpのprepare()でvalidate()する)
add.tpl内で{input_name="form_a"}とか使わないで全部<input type=text name=form_a value={$form.form_a}>
とか書いていけばDo.phpだけにActionForm書くだけでも問題は無いですけど・・・
0863nobodyさん
2007/03/30(金) 19:09:22ID:???add-view action_add
して、その中で
var $helper_action_form = array('action_add_do' => null);
する。
0864863
2007/03/30(金) 19:14:21ID:???{form ethna_action="action_add_do"}
{form_input name="form_a"}
{/form}
とか書けば、Viewの省略も可能。
0865861
2007/03/30(金) 20:17:37ID:???取り合えずEthna始めたばかりなのでなるべくコアは弄らないで試してみようかなと。
私はあまりに面倒だったので簡単な書式のテキストからActionForm形式のarrayを吐き出すスクリプトは作ったんで毎回指定しても良いんですけどねぇ。
なんか二度手間は気持ち悪いというか。
>>863
なるほど、使用するActionFormを指定することが出来るんですね。
有難う御座います。
ところでSELECT,CHECKBOXなんかで
$form=array(
'managers'' => array(
'type' => VAR_TYPE_INT,
'form_type' => FORM_TYPE_SELECT,
'name' => '担当者',
'option' => array(),
),
);
なんてのを定義して、リストは
function prepare() {
...
$res = $db->getAll("SELECT id,name FROM managers");
$options = array('0'=>'--');
foreach($res as $r){
$options += array($r['id']=>$r['name']);
)
$this->af->form['managers']['options'] = $options;
return null;
}
の様に動的にDBから取って来る、ってのも良くあるパターンだと思うんですがこう言う処理はAppManagerにして使いまわすのが流儀ですかね?
なんか、物凄いありがちでフレームワークによきに計らって貰いたいselected,checked処理関連がマニュアルから良さ気なのが見つけられ無かった・・・
0866863
2007/03/30(金) 21:22:18ID:???optionの指定は、配列指定する他に2種類あって、
array(
==snip==
'option' => 'managers'
)
こう指定してやると、ActionFormにmanagersメソッドがある場合は、その返り値がoptionに入る。$af->managers = array()みたいに、直接配列が入っていてもOK
そして、'option' => 'man, managers'としてやれば、AppID_ManManagerのgetAttrListが呼ばれる。
$man->getAttrList('manager');のように呼ばれるから、
manのgetAttrListをオーバーライドしてやる。
デフォルトだと、manの変数 $managers_list を参照しようとするから、DBかませたいときは、getAttrListのオーバーライドが一番手っ取り早いかな
ブラウザのフォームで書いてるからtypoあるかもしれない、適宜脳内変換して読んでください。。
ちなみに、ActionFormの定義は、BoBppさんのビルダが便利。
http://as-roma.com/ethna/formBuilder/
0867nobodyさん
2007/03/31(土) 03:05:42ID:???呼び出すとき、どう記述すればいいでのしょうか?
例:
class Hoge_AbcManager extends Ethna_AppManager
{
function Hoge_AbcManager( $watasitai_var )
{
通常の方法ではコンストラクタに渡す変数を指定できませんよね?
$HOGE_m =& $this->backend->getManager('Hoge');
0868nobodyさん
2007/03/31(土) 09:04:45ID:???0869nobodyさん
2007/03/31(土) 10:03:27ID:???コンストラクタに渡したいって変数なら、アクションやビューに
依存しない変数だよね。managerを呼ぶ時に常に行う処理ってことだから。
で、そういうのはbackendに詰めるでしょ。
すると、そもそもmanagerはbackendを持ってるから
$this->backend->ってやればコンストラクタで変数取れるじゃん。ってことだと思う。
やるなら、backend::getManagerをオーバーライドして、ってなるんだろうけど
ただのバッドノウハウになるね。
0870nobodyさん
2007/03/31(土) 12:22:34ID:???class Sample_Form_AddDo extends Sample_Form_Add
俺はこうしてる。
0871nobodyさん
2007/04/04(水) 18:42:23ID:???それって勝手にそれぞれのDo.php等の中で
例えばAdd/Do.php内で
require_once 'Add.php';
して?
うーむ、更にModify,Modify_Doとかでも使いまわすことを考えるとそれも現実的かなぁ・・・
0872nobodyさん
2007/04/04(水) 21:23:16ID:???870じゃないが、このやり方は確か藤本氏がサンプルでやってた方法だったかと。
ひとつ上のクラスだったら
require dirname(__FILE__).'.php' でおk
別のクラス呼ぶなら、直接ファイル名記述。
0873nobodyさん
2007/04/16(月) 15:15:35ID:KZll3+phWindowsXP + IIS にEthnaをインストールしようと
「アプリケーション構築手順(1) 」に従って
インストール、スケルトン作成まで終わったのですが、
index.phpを指定してもブラウザに表示されません
何が悪いのでしょうか?
アドレスは
http://localhost/sample/www/index.php
と指定しています
0874nobodyさん
2007/04/16(月) 23:03:05ID:ty8BPgJH0875nobodyさん
2007/04/17(火) 02:22:21ID:???> 何が悪いのでしょうか?
>初心者ですが
>WindowsXP
>IIS
>http://localhost/sample/www/index.php
この4つかな。
0877nobodyさん
2007/04/24(火) 01:57:17ID:XNYrKVIb昔作ったプログラムからEthnaへ遷移したいんだけど、session変数が渡せなくて、挫折気味・・・
0878nobodyさん
2007/04/24(火) 02:45:37ID:???んー、「昔作ったプログラム」のセッションIDの付け方がまちまちだとダメだね。
でないなら、Ethna_Sessionを自前のクラスでOverrideさせて、
SessionIDを決めるロジックだけそのIDで上書きすればOK。
あとは、ActionClassでセッションをスタートさせれば普通に取れるはず。
0879nobodyさん
2007/04/24(火) 11:13:37ID:???ありがとうございます!
「昔作ったプログラム」では、session_start()だけでID決めてるんで、IDはまちまち・・・だと思います。(この辺よく理解していないですが)
Ethna_Sessionのロジックがよくわからない初心者なので、とりあえず
�@クッキー($_COOKIE["PHPSESSID"])からセッションID取得して、
�Asession_id()でセッションID設定して、
�B「昔作ったプログラム」で保存されたディレクトリのセッションファイルと照合
って流れにムリクリしてるんですが、
�@でクッキーが取得できず・・・なぜだろう・・・、
0880nobodyさん
2007/04/24(火) 19:10:42ID:/+uAa599いつの間にか消えてたんだけど、$managerってobsoleteな仕様なの?
http://cvs.sourceforge.jp/cgi-bin/viewcvs.cgi/ethna/ethna/skel/app.controller.php?r1=1.21&r2=1.22
0881878
2007/04/25(水) 02:11:01ID:???SessionIDの言い方がマズかった。というか、間違った。すまん。
PHPSESSIDならそれをEthna_SessionのセッションIDのキーにしてやる。ということ。
デフォルトではEthnaはHoge_Controllerとか使ってる場合=HogeがアプリケーションIDの
場合、HogeSESSIDをセッションIDのキーに使う。PHPのデフォはPHPSESSIDだね。
で、この「HogeSESSIDをセッションIDのキーに使う」っていうロジックをOverrideさせろ
っていうこと。
ControllerでセッションのクラスをEthna_SessionからHoge_Sessionに書き換えて、
class Hoge_Session extends Ethna_Session{
function Hoge_Session($appid, $save_dir, $logger)
{
$this->session_name = "PHPSESSID";
//あとはEthna_Sessionのコンストラクタと同じのをコピペ
// もちろん、一行目は抜かせよ。w
}
}
0883nobodyさん
2007/04/28(土) 22:48:15ID:???$this->backend->ctl->getRenderer()->getEngine()->clear_all_cache();
とかをアクション、ビュー、コントローラ辺りに書いてみたんですが無効にならんとです。
Smarty単体なら
http://sky.freespace.jp/smarty/SmartyManual_2-6-7J_html/api.clear.all.cache.html
で出来るとですがEthnaが絡むと出来んとです。
どうかEthnaでのやり方を教えて欲しいとです。
0884nobodyさん
2007/04/29(日) 12:40:34ID:???0885nobodyさん
2007/04/29(日) 12:46:44ID:???セッションキーを指定せずに、session_start()してるならそのままEthna内でも使えるはず
恐らくEthnaが内部でセッションの保存先が元アプリのと違うんじゃない?
0887nobodyさん
2007/04/30(月) 18:59:50ID:???0888nobodyさん
2007/04/30(月) 20:08:50ID:???0889nobodyさん
2007/05/06(日) 20:44:18ID:???0890nobodyさん
2007/05/08(火) 03:03:53ID:???AppObject使いたくないからadodb使うんじゃないの?
0891nobodyさん
2007/05/10(木) 00:32:00ID:???前に誰か挑戦してたなーと、ブックマークを漁ってたら出てきました。
http://riaf.org/Test_DB.phps
作者のriafさんも、途中であきらめたとか言っていたような気がするので、もしかしたら使えないかもしれません。
0892nobodyさん
2007/05/13(日) 13:34:58ID:???helper_app_objectとか知らなかったんだが…
■ このスレッドは過去ログ倉庫に格納されています