トップページphp
983コメント418KB

Pear

■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。 NGNG
ってどうよ。
0331 ◆AngelH/kMI 03/12/29 18:48ID:???
>>330
おお、素早い。
早速見てきますねー。
0332 ◆AngelH/kMI 03/12/29 23:16ID:???
で、現在試してるんだけど・・・
どうやらPHP5だと駄目っぽい?

Fatal error: Class 'Filter' not found in /home/hogehoge/mojavi/mojavi-all-classes.php on line 6

こんな感じ。

0333nobodyさん03/12/30 02:37ID:???
Web + DB 発売されたんで立読みしてみました。
なにやら新しいテンプレート(名前わすれた)とかコードを暗号化する
やつとか色々あってよさげでしたよん。あの雑誌最近 JAVA ばっかだし
値段もあれなんで買ってないんだけどね。その割に MDB とか興味ある
記事がちょぴっとだけ載っててほんと困ったもんです。。
0334nobodyさん03/12/30 08:03ID:???
>>333
今号はPostgreSQLのコネクションプーリングの話とかも乗ってる。
PEARも第2特集だし買ってもいいのでは?

あと俺は著者ではない。
0335 ◆AngelH/kMI 03/12/30 11:10ID:???
>>333
立ち読みでなく買ってほしいなぁ(苦笑
売れ行きが良ければ、頻繁にPHPのこと掲載されるかも?

自分は著者の一人なので露骨な宣伝ですが。
0336nobodyさん03/12/30 11:28ID:???
Linux Magazine みたいに全部 DVD に入れば最高だけど、
それが無理なら PHP のとこだけまとめてムック化してほしい。
0337nobodyさん03/12/30 13:46ID:???
>>336
のんのん、月刊専門誌創刊ですよ。
入門/初心者記事切り捨ての歯ごたえ抜群なヤツ。

カナダ、フランス、ドイツじゃぁ専門誌出来てるんだし。

# まぁ無理てのは解ってるけど (´・ω・`) 言わせるだけは言わせて
0338nobodyさん03/12/30 13:56ID:???
http://www.phppro.jp/
0339nobodyさん03/12/30 19:24ID:???
>>338
それの元はカナダの php|architect
アシアルさんが改訂加えたりオリジナル記事を入れたりといった事があるようなのでその辺期待したいけど。
0340nobodyさん03/12/30 19:25ID:???
>>333

新しいテンプレート,「Flexy」ですな。
買って読んだけど,結構面白かった。

しかし・・Web+DB,1480円はちょっと高いよ・・・
0341nobodyさん03/12/30 19:57ID:???
>>340
3食 袋ラーメンにして買いますた。
今号が特別に高いワケではなくコンスタントに \1,480 なんだよね。
まぁマイナー雑誌の宿命というか。
LinuxJapan を思い出した。
0342nobodyさん03/12/30 22:47ID:???
>>335
誤解を招くような表現でごめんなさい。今回の特集はさすがに
立ち読みで済ませられるような量じゃないしちゃんと買います
よん。英語のドキュメントすら乏しい状況であそこまで記事書
くのって並大抵の苦労じゃないと思いますし。

別に JAVA が嫌いなわけじゃないけど PHP の記事がもっと増
えるといいですね。ムック化されたら絶対買います。
0343nobodyさん03/12/31 03:15ID:???
連載じゃないのでムック化されないような。
あとPEARって腐るの早いからムック化作業も死ねそう。
PHP子供相談室の Template_IT 記事とかもう遅れちゃってるし。
修正が多いって事はその分買う価値もあるって事なんだけど。

# 雑誌に \1,480 無理ーってのはよく解る。
# 筆者の人数増やして青マンモス形式で緑マンモスとか?
# 雑誌/出版の業態が合致してないんかな。いっそアシアルさんで出版とか。
0344 ◆AngelH/kMI 04/01/03 12:48ID:???
mojavi + Smartyで少しつまづき中・・・

1. Smartyでプリフィルタ/ポストフィルタ使いたい時はどうする物?
 派生クラス作ってそこで書き換えようと思ったら
 compile_dirは書き換わってるんだけどフィルタが効いてない様子

2. 他のページへのリンク
  Aタグとかで他のページに飛びたい時に
  <a href="/index.php/module/ModuleName/ActionName/">
  とかそのまま書いてしまう物なんでしょうか?

// というか、これをPEARスレに書くってのも何か違うかな(苦笑
0345nobodyさん04/01/03 13:38ID:???
mojavi で Google すると AdWords が出る。金払ってるんだね。
0346nobodyさん04/01/05 10:46ID:???
>>343
ムック化は別に連載じゃなくてもいいと思うよ。
PHP 記事は無差別にページスキャンでもして PDF 化、で十分。
日経ソフトウェアも PDF 化してるね。>>336
034732104/01/05 15:45ID:???
>>344
1 についてです。どういう動作を期待されているのか把握できていませんので推測に
なります。ご了承下さい。
確認のために書きますが、現状のコードでは View の子クラスから Renderer の子ク
ラスのインスタンスが戻ってきた直後に $renderer->execute() によって変数の展開
が行われます。 (ExecutionFilter.class.php の 157 行目以降を参照。)
なのでポストフィルタで $smarty->compile_dir 等を変更することは (可能だとして
も) 意味を持たないように思えます。

Smarty の設定や変数を自由に設定しながらフィルタを使用して最終的に表示させるた
めの私の考えつく要件は、
1. SmartyRenderer (またはその派生) クラスに対して singleton() メソッドを実装
したクラスを用意する。
2. SmartyRenderer (またはその派生) クラスで execute() メソッドで何も行わない
ようにする。あるいは少なくとも $smarty->fetch() メソッドを呼び出さないよう
にする。そして元の execute() 相当のメソッドを別に用意する。

長いので次に続きます。
034832104/01/05 15:46ID:???
347 の続きです。

3. Smarty 用のフィルタを作成する。
3.1. プリフィルタを実装する。
3.1.1. この段階で singleton メソッドを呼び出しレンダリングモードを RENDER_VAR
に設定する。現在のところ何故かレンダリングモードを設定する箇所が 2 つ
あります。 $controller->setRenderMode($mode) と
$renderer->setMode($mode) です。 2 つうちどちらかが RENDER_VAR になっ
ている場合は $renderer->_result に結果を格納するようです。このプロパテ
ィは $renderer->fetchResult() で取得できます。デフォルトは、
$renderer->_mode => RENDER_VAR
$controller->_rederMode => null
です。
3.2. ポストフィルタを実装する。最後に 2 の execute() 相当のメソッドを呼び出し
てから $renderer->fetchResult() を使用して結果を出力させるようにする。
Note. View 派生クラスの execute() メソッド内では上記 singleton() メソッドを使
用して必要な操作を行う。

長文申し訳ない。あと勘違いしていたらすみません。
034932104/01/05 15:59ID:???
>>344
2 についてです。
現状では下記のメソッドが用意されています。
$controller->getRequestModule()
$controller->getRequestAction()
$controller->getCurrentModule()
$controller->getCurrentAction()

決めうちする場合は現状では便利なものは用意されていません。
自前でユーティリティクラスを用意すると便利かもしれませんね。

関係ないですが、 ActionChain クラスは現在のところ使われていませんね。
あと重複しているメソッドもどうにかしないと混乱を招くと思う...

>// というか、これをPEARスレに書くってのも何か違うかな(苦笑
一応 2ch PEAR Wiki の趣旨には沿っていると思いますが、皆さんいかがでしょうか?

332 の件はもう解決されました?
0350 ◆AngelH/kMI 04/01/05 16:37ID:???
>>347
う、ちょっとわかりづらかったですか。
えっとやりたいことはテンプレートファイルの文字コード変換で
プレフィルタでテンプレートファイルをUTF-8に変換。
ポストフィルタでSJISに変換、という感じです。

SmartyRendererクラスから派生させたMySmartyRndererクラスを作り、
その中で
$this->_engine->register_postfilter('postfillter01');
とかしてみたんだけど、変化無い様子・・・。

// $smarty->compile_dirの件は一緒に書くべきじゃなかったですね。
// こちらは解決してます。
0351 ◆AngelH/kMI 04/01/05 16:40ID:???
続き。

>現状では下記のメソッドが用意されています。
このメソッドで返ってきたアドレスを
setAttributeメソッドでセットする、というのであってるでしょうか。

>332 の件はもう解決されました?
とりあえず時間無かったので環境の方をPHP4に入れ替えてしまい、
原因追いかけてません(苦笑
また時間のあるときに見てみます。
035232104/01/05 17:48ID:???
>>350
なるほど Smarty のフィルタのことでしたか。 Mojavi のフィルタのことだと勘違い
してました。 Smarty のフィルタに関しては素人なので残念ながらアドバイスできま
せん...

>>351
それで良いと思います。
0353nobodyさん04/01/05 23:16ID:???
# Smartyという事で反応。

>>350
Smartyのフィルタ関係は、mojaviでもちゃんと動作するようです。
文字コードを変換する目的となる仕様が分からないので何とも言えないんですが、
適用するフィルタの使いどころが適切じゃないかも。
フィルタ動作に関しては、

・prefilter -> {}タグを含む素のテンプレートに対して何かする。

・postfilter -> テンプレートタグがSmartyによってパースされ、php構文とスタティックなhtmlが混在する。
./templates_cに保存される寸前の内容、これに対して何かする。

・outpufilter -> Smartyがdisplay()またはfetch() した時の出力に対して何かする。

(※補足: テンプレートで{include ...}した場合にも、その度にprefilter, postfilterが呼ばれる。)

だと思うので、文字コードをそれらのフィルタで変換するのはマズそう。
0354 ◆AngelH/kMI 04/01/06 00:09ID:???
>>353
文字コード変える目的は、
テンプレートをSJISで書いていてその場合一部の文字の中に
Smartyにとって意味のある文字(中括弧とか)が含まれてるらしく、
エラーになってしまうのですよ。

// http://ns1.php.gr.jp/pipermail/php-users/2003-February/013595.html

で、普通にSmarty使ってる時には正常に動いてるんだけど
mojavi組み込みでregister_*メソッドによるフィルタの登録が
うまくいってない気がしたので何故かなぁと。

0355nobodyさん04/01/09 23:38ID:???
Perlのh2xsみたいなのってある?
0356nobodyさん04/01/11 14:40ID:???
>>355
perldoc h2xs にある、
h2xs - convert .h C header files to Perl extensions
という機能が Pear にあるかということでしたらありません。
PEAR パッケージは現在のところ Perl のような C エクステンション混在型で
はなく Pure PHP のものばかりです。

スケルトンファイル生成のコマンドも私の知る限りはないようです。

もし C エクステンションに関して知りたいなら PECL の方を調査なさった方
がよいと思います。

お役に立てずに申し訳ない。
0357nobodyさん04/01/11 20:06ID:???
CVSでPEARまるごと取得したやつを実際に使いたいんですけど
pear install hogehoge
としてインストールした時とディレクトリ構成が違います。
HTML_Menu というふうに1つ1つディレクトリが存在してるん
です。これってそのままコピーしても問題ないんでしょうか。
0358nobodyさん04/01/11 20:23ID:???
>>357

PEAR CVS はパッケージごとにディレクトリが作成されています。
PEAR CVS のパッケージをインストールしたい場合は、下記のようにして下さ
い。

1. インストールしたいパッケージのディレクトリに cd する。

$ cd /path/to/CVSWORK/pear/HTML_Menu

2. pear install package.xml とする。

$ pear install package.xml

あとは同じように使用できます。
0359nobodyさん04/01/11 23:57ID:???
>>358
ありがとうございます。pearのマニュアルで cvs installer の項目が
まだ完成してないみたいで困ってました。

ところで、sourceforge が死んでるみたいで
http://hoover.ktplan.ne.jp/kaihatsu/php/index.php?type=doc&txt=dl
にある htmltemplate がダウンロード出きまえん。どこかに二次配布
してるところないでしょうか。説明を見た感じだと smarty より100倍
単純っぽいので使ってみたいなと思ったんですが。。
0360h2xsの件04/01/12 00:20ID:???
ありがとう。
Cならext_skelでひな形には十分なんだけど,
pure PHPなパッケージなひな形あるのかなって疑問でした。
sakuraエディタのマクロにPEAR互換のひな形を生成するものがあったので,
とりあえず,それでよしとします。
0361nobodyさん04/01/12 00:21ID:???
pear download-all
pear install package

じゃいけんのけ?
0362nobodyさん04/01/12 06:04ID:???
>>359 じゃないけど手元のPHP-4.3.4だとpearにdownload-allなんて
オプションないよ?
0363nobodyさん04/01/12 19:23ID:???
>>362
Changelog によるとリリース 1.2 から導入されたようです。
http://pear.php.net/package-changelog.php?package=PEAR

PHP にバンドルされている PEAR のバージョンがそれより古いのではないでし
ょうか。
0364nobodyさん04/01/13 09:10ID:???
>>363
情報ありがとうございます。pearあたらしくしてみますね。
おそまきながら本日 WEB+DB 購入予定。
0365nobodyさん04/01/20 12:16ID:nITe0q1V
QuickFormの話なのですが、お知恵を拝借させてください。
require_once "HTML/QuickForm.php";

$form =& new HTML_QuickForm('form', 'post');
$form->addElement('select', 'test', 'Select:', array('A'=>'A', 'B'=>'B','C'=>'C','DEFAULT'=>'--選択してください--'));
$form->addElement('submit', 'mode', 'submit');
$defaultValues['test'] = 'DEFAULT';
$form->setDefaults($defaultValues);
$form->display();

submitボタンを押してページが遷移した後に、
再びDEFAULT(--選択してください--)を選択させたいのですが、
setDefaults()が有効にならずに、前の画面で選択された項目が表示されてしまいます。
何か別の方法があるのでしょうか?
0366nobodyさん04/01/20 13:53ID:???
>>365

$form =& new HTML_QuickForm('form', 'post');
$form->addElement('select', 'test', 'Select:', array('A'=>'A', 'B'=>'B','C'=>'C','DEFAULT'=>'--選択してください--'));
$form->addElement('submit', 'mode', 'submit');
$element =& $form->getElement('select');
$element->setValue('DEFAULT');
$form->display();

当然、このままだとひたすら DEFAULT になるんで
validate() が true なら本処理、false なら getElement, setValue で値を狙い打ち
みたいな形になるかと。
というか、値を戻したい理由が validate false くらいしか思いつかんのだが。
036736504/01/20 17:11ID:???
>366
ありがとうございます。うまくいきました。
選択肢を「初期値に戻すボタン」をつけてみたかったのです。

で、実際にはフォームのオブジェクが複数あるので、
こんな感じにしてみようと思うのですが、_defaultValues使うのは反則ですよね、、、
function setMyDefaults(&$form) {
__foreach ($form->_defaultValues as $key => $var) {
____$element =& $form->getElement($key);
____$element->setValue($var);
__}
}
なにか良い方法をご存じの方いらっしゃいましたらアドバイスお願いします。
0368nobodyさん04/01/20 17:15ID:???
>>365
setDefaults() の代わりに setConstants() を使いましょう.

Defaults は SubmittedValues で上書きされますが,Constants は上書きされません.
>>366の提案の setValue() を使うのとほとんど同じ効果になりますが,
getElement() する手間が省けます(w

ちなみに getSubmittedValues() や process(),validate() 等に渡される値は
setValue() しても setConstants() しても,POST で渡された値になります.


っつーか一番の疑問は,なんで DEFAULT に戻したいのか?ですが……
036936804/01/20 17:25ID:???
すれ違った……

初期値に戻すボタンなら,

$defaultValues['test'] = 'DEFAULT';
$form->setDefaults($defaultValues);

のトコを

$defaultValues['test'] = 'DEFAULT';
if ($_POST['default_button']) { // 初期値ボタンが押された
$form->setConstants($defaultValues);
} else {
$form->setDefaults($defaultValues);
}

って感じでしょーかね.
0370nobodyさん04/01/20 19:13ID:???
>368
ありがとうございます。setConstantsがまさに望んでいたものです。
アドバイスくださった366さん、368さん、どうもありがとうございました。

以下、同じ悩みに直面した人用のサンプルです。誰かのお役に立てば幸いです。
$form =& new HTML_QuickForm('form', 'post');
$form->addElement('select', 'max', '閾値', array('10'=>'10%', '20'=>'20%','30'=>'30%'));
$form->addElement('submit', 'mode', '設定');
$form->addElement('submit', 'mode', '初期値に戻す');

$defaultValues['max'] = '20';
if (isset($_POST['mode']) && $_POST['mode'] == '初期値に戻す') {
$form->setConstants($defaultValues);
} else {
$form->setDefaults($defaultValues);
}
$form->display();
0371nobodyさん04/01/20 21:16ID:???
>>370
input type="reset" じゃだめなの?
0372365=367=37004/01/20 22:33ID:???
>371
レスありがとうございます。
submitする前ならresetで元に戻せば良いのですが、
submitしてページが遷移した後に、再びデフォルトの値に戻したかったのです。
わかりにくい説明ですみません、、、
0373nobodyさん04/01/22 11:38ID:???
あらぁぁ……いつの間に MDB2 なんてのが……
どんどん進歩に取り残されていく実感.

どなたか使用されてますか? 安定性は実用レベルでしょうか?
0374nobodyさん04/01/22 11:53ID:???
あぁ,失礼,MDB2 はまだ alpha なんですね.
安定性が云々って話じゃないか(実際に安定してるかどうかは別として).
0375nobodyさん04/01/22 20:34ID:???
pecl についての質問ってここでいいんでしょうか? apd がうまく動いてくれません。

環境:
Plamo Linux 3.0 , Apache-1.3.2.8 , PHP-4.3.4 , apd-0.4p2

やったこと:
% tar xzf apd-0.4p2.tgz
% cd apd-0.4p2
% phpize
% ./configure
# make install
# mkdir /home/httpd/apd

php.ini に次を追加
extension=apd.so
apd.dumpdir = /home/httpd/apd

# apachectl restart

apache のエラーログ:
PHP Warning: Unknown(): Invalid library (maybe not a PHP library) 'apd.so' in Unknown on line 0

php_info() を実行してみると apd の項目がありません。APC や xdebug なんかは正常に動作
してます。何かアドバイスいただけると嬉しいです。
0376nobodyさん04/01/22 20:49ID:???
>>375
PECL は詳しくないですが、 Description に
APD is a full-featured profiler/debugger that is loaded as a
zend_extension.
~~~~~~~~~~~~~~
と書いてあるので、

zend_extension="/path/to/apd.so"

じゃないでしょうか?
0377nobodyさん04/01/23 07:53ID:???
>>376
そうでした。zend_extension で指定したらうまく動作しました。ありがとう
ございます。

ついでに質問なんですが xdebug を ON にして php_info() を実行すると次
のようなエラー?が表示されます。これってどういう意味なんでしょうか。

Fatal error: Maximum function nesting level of '64' reached, aborting! in Unknown on line 0
Call Stack
# Function Location
1 {main}() /home/httpd/_local/test/info.php:0
2 {main}() /home/httpd/_local/test/info.php:0
省略
64 {main}() /home/httpd/_local/test/info.php:0

xdebug を OFF にすれば普通に php_info() の結果は表示されるのですが。
デバッガとか使ったことないんでトンチンカンなこと言ってたらごめんな
さい。
0378nobodyさん04/01/23 08:10ID:???
>>377
php_info() じゃなくて phpinfo() でした。
ここに書きまちがえただけでコードには正しく書いてます。
0379nobodyさん04/01/28 19:40ID:???
>>186
PHPKitchen
ttp://www.phpkitchen.com/
ここいいね!
0380nobodyさん04/01/30 22:54ID:???
>>379
あとここもおすすめ。
http://www.phpdeveloper.org/

pearのMLで流れたBlogのいいね。
0381nobodyさん04/02/01 10:18ID:???
pear download-all すると

Parse error: parse error in /usr/local/lib/php/XML/RPC.php(689) : eval()'d code on line 79
Notice: Undefined variable: v in RPC.php on line 696
Fatal error: Call to a member function on a non-object in /usr/local/lib/php/XML/RPC.php on line 1018

こんなエラーが出ます。XML/RPC.php だけ手動でダウンロードして上書きして
みたんですけど結果は同じでした。何がいけないんでしょうか。
0382nobodyさん04/02/03 12:24ID:jS8jQfMH
ラージオブジェクトをサポートしてるみたいなんでDBからMDBに移行しようと思って現在勉強中。
誰か PostgresQL + MDB の組合せで使ってる人いませんか?接続時に

require_once('MDB.php');
$dsn = "pgsql://user:password@localhost:5432/database";
$db = MDB::connect($dsn);

すると Unknown Error と表示されて接続できません。PostgresQLのログを見てみ
ると、databaseじゃなくtemplate1に接続を試みてるようです。$dsnのパースに失敗
してるのかと思って次は

$dsn = array(
"phptype"=>"pgsql",
"username"=>"user",
"password"=>"password",
"hostspce"=>"localhost:5432",
"database"=>"database"
);

のように配列で指定してみたところ、一応接続には成功しましたが、databaseに接続
する前にtemplate1にも接続しにいってます。ソースを追ってみたけどよく分からず。
うちでは普通に動いてるよっていう情報でもいいんで何か教えて下さい。
0383nobodyさん04/02/03 12:25ID:???
>>382
書き忘れましたが MDB-1.2 つかってます。
0384nobodyさん04/02/03 12:47ID:???
>>382
MDB 1.2 の MDB/pgsql.php の 333 行目以降で pg_cmdtuples()
(現在の pg_affected_rows()) が使用可能か確認するために template1 に接
続しています。気にする必要はないと思います。
0385nobodyさん04/02/03 13:03ID:???
>>384
すいません。過去ログにも同じ内容の書きこみあったみたいですね。

PEAR::MDBを使ってみる
http://angelicwing.net/php/?n=3

ここを参考に修正してみました。ところで、$dsn の指定の件ですが

$dsn = "pgsql://user:password@localhost:5432/database";
$db = MDB::connect($dsn);

これでうまくいってますか?うちの環境だと template1 にしか接続してくれない
んですが。。
0386nobodyさん04/02/03 13:13ID:???
>>385
自己レス。
apache と postgresql を再起動したら接続できました。おさわがせしました。
0387nobodyさん04/02/04 17:06ID:???
なんだか MDB + PostgresQL 安定しない。
接続できたりできなかったり。とりあえず DB つかっとくかな。
0388nobodyさん04/02/10 00:09ID:GCC9mdph
Net_UserAgent_Mobileがバージョンアップしてますね。
携帯用のコンテンツ作るのに重宝してます。
0389nobodyさん04/02/10 00:28ID:???
>>388
誰も使って無さそうだったので(笑、そういって頂けるとありがたいです。
最近は PC 用の Web アプリケーション開発に掛かりきりで、更新が滞りがち
で申し訳ない。
API の整備やら機能追加やら PEAR ドキュメントやら、やりたいことはたくさ
んあるのですが。
0390nobodyさん04/02/10 03:55ID:???
作者タン降臨でつか?こういうのって必ず必要な処理だと思うのでライブラリとして
提供してもらえると非常に助かります。新しい携帯端末は日々発売されていくわけで、
更新大変だと思いますががんばって下さい。

でもこれって日本でしかあまり有用じゃないんでしょうか?コードを追いかけた訳じゃ
ないんであまり把握してないんですが。

#imode-vodafone-auの絵文字変換クラスなんてのもpearに登録できるのかな▽
0391nobodyさん04/02/10 04:00ID:???
作者タン降臨でつか?こういうのって必ず必要な処理だと思うのでライブラリとして
提供してもらえると非常に助かります。新しい携帯端末は日々発売されていくわけで、
更新大変だと思いますががんばって下さい。

でもこれって日本でしかあまり有用じゃないんでしょうか?コードを追いかけた訳じゃ
ないんであまり把握してないんですが。

#imode-vodafone-auの絵文字変換クラスなんてのもpearに登録できるのかな?
0392nobodyさん04/02/10 09:41ID:???
絵文字変換ライブラリ、是非!
0393nobodyさん04/02/10 09:42ID:???
代替 gif に置き換える仕組みがあると嬉しいです。
例えば imode の絵文字を vofafone, PC なら jpg で表示する機能。
0394nobodyさん04/02/10 11:54ID:???
>>391
どうもです。もちろん海外でも有用だと思いますよ。
公開直後に海外の方から打診はありましたが、その後音信不通になってます。

PEAR へのパッケージの登録についてはまずこちらに目を通して下さい。
http://pear.php.net/manual/en/guide-developers.php
http://pear.php.net/manual/ja/guide-developers.php

現在ではパッケージ提案の処理は PEPr というツールで行われています。

絵文字に関しては、キャリア間の変換に加えて
- データベースや HTML テンプレートへ保存可能な形式へのエンコード
- 上記からの実際の絵文字コードへのデコード
があるといいのではないでしょうか。

参考
http://search.cpan.org/~miyagawa/HTML-Entities-ImodePictogram-0.06/
0395nobodyさん04/02/11 23:57ID:???
>>394
>絵文字に関しては、キャリア間の変換に加えて
>- データベースや HTML テンプレートへ保存可能な形式へのエンコード
>- 上記からの実際の絵文字コードへのデコード

そうですね。CPANのコード見てみましたが、PHPでの実装も簡単にでき
そうなんでやってみます。絵文字を文字列としてデータベースに組込むに
は色々問題があるみたいですね。変換テーブルはPHP上の配列に保存
するのが無難ですかね。
0396nobodyさん04/02/12 10:27ID:???
>>395
速度面を考えると配列が良いでしょうね。がんばって下さい。
0397nobodyさん04/02/12 17:57ID:???
DB,QuickForm,Smartyを使ってます。。
これらのクラスはオブジェクト指向で作られてすごいクラスだと思うんですが
利用してる側の自分のプログラムでは、結局は処理手順を羅列してるだけ。
全然オブジェクト指向じゃありません。どうすればオブジェクト指向的な
プログラムになるんでしょうか?どうやったらいいのかすらイメージすら沸か
なくて。何か参考になるもの教えて下さい。
0398nobodyさん04/02/12 18:07ID:???
>>397
どのようなコードがオブジェクト指向的だという認識でしょうか?
それがわからないと答えようがありませんが、もし Struts のような動作を求
められているのでしたら、そのような Web アプリケーションフレームワーク
はたくさんありますので、それらを利用されると良いと思います。

PHP のオブジェクト指向サポートはあくまでも手段のひとつですので、こだわ
りがある方は Java, Ruby, Python あたりを使用すると幸せになれると思いま
す。
0399nobodyさん04/02/12 18:24ID:???
>>398
オブジェクト指向が何なのかもよく分かってないです。ただ、1ページ作成する時に
1つのファイルにほぼ全ての処理を詰め混んでしまってる今の状況はオブジェクト指向
とは言えないと自分で思いました。

ご指摘の通り、PHPは純粋なオブジェクト指向言語ではないので、オブジェクト指向を
勉強したいなら他の言語を使ってみたほうがいいですね。Javaでも勉強してみようか
と思います。とりあえずその前に Phrame,props,Mojavi ってのを発見したんで使って
みることにします。
0400nobodyさん04/02/12 21:38ID:???
uml関連の本かったほうがいいよ。
0401nobodyさん04/02/12 22:36ID:???
>>398氏のいう通り,まずは「オブジェクト指向っぽいもの」を定義しないといかんですが……

ただ何となく>>397氏のいうこともわかる気がするのでアドバイス.

たぶん,DB_DataObject を継承したクラスを作って,ロジックをその中に収めるようにすると,
求めている「オブジェクト指向でコードを書いている気分」になれます(w

推測するに,DB クラスを使って RDBMS へのアクセスを抽象化しても,
SQL を組み立てたりするコード自体が Web 画面のプログラムに記述してあるので,
結局テーブルを操作するロジックは各プログラムにバラバラに撒かれることになり,
それが「全然オブジェクト指向じゃない感」を生んでいるのではないかと.

それで,DB_DataObject を継承したクラスを組んでいて何か違和感を感じたら,
それはたぶんオブジェクト指向的なモデリングがおかしいので,
UML とかの勉強をしてみると良いことでしょう.きっと.

読み違えてハズしてたらごめん.
0402nobodyさん04/02/13 20:52ID:???
>>401
DAOっていうやつですか?確かに SQL文をしこしこ書いて db->query() する
のに違和感を感じてるのかもしれません。

DBクラスを使っても、違うデータベースでも動くことぐらいしかメリットを
感じられないんですよね。大抵のデータベースなら、標準的なSQL文は同一
じゃないんでしょうか?INSERT,UPDATE,SELECT あたりをDBクラスがメソッド
を実装してくれると嬉しい気がするんですけど。そうしないことにはきっと
理由があるんですよね。みなさんこういったクラスは自作してるってことで
すか?
0403nobodyさん04/02/13 21:10ID:???
オブジェクト指向っていうのは
ひとつの設計方法なんですよ。
うだうだ言ってないで
UMLの本でも買ってきなさい。
あなたの認識が全く的はずれだった
ということに気づけますよ。
0404nobodyさん04/02/13 21:59ID:???
わかりました
0405nobodyさん04/02/14 00:26ID:???
おすすめは
・おぶじぇくと脳の作り方
・憂鬱なプログラマのためのオブジェクト指向入門

この2冊です
0406nobodyさん04/02/14 03:40ID:???
QuickForm の applyFilter ついて質問です。

1. addGroup で作成したグループにまとめてフィルターを追加する。
2. フィルターとして使用する関数にオプションを指定する。

という処理はできますか?
電話番号と郵便番号フォームを1つのグループとして登録して
mb_convert_kana($value, "n") を適用。一気に全角数字を半角数字に
変換する、といった処理を行いたいのですが。
0407nobodyさん04/02/14 04:21ID:???
>>406
> 1.
普通にグループの名前で applyFilter() したら全部の値が順々に apply されませんか?

> 2.
出来なかったので,引数付きで呼ぶ別の関数で wrap して使ってます.
<?php
function mb_convert_kana_n( $value )
{
return mb_convert_kana( $value, 'n' );
}
?>
なんていう,みっともない関数を作って(w
0408nobodyさん04/02/14 16:47ID:???
>>406
両方の問題が解決しました。てっきり $_POST や $_GET そのものにフィルター
がかかると勘違いしてたので、確認方法が間違ってただけみたいです。

もう1つ質問なんですが、selectフォームを作りたい時に
$form->addElement('select', 'mySelectForm', 'テスト');
とすればいいんですが、これだと HTML_QuickForm_selectクラスの メソッドが
使えないですよね(setSelected() とか)。そういう場合は、別にHTML_QuickForm_selectクラスの
インスタンスを作らないといけないです。

今作ってるプログラムには select,checkbox,radio 用のインタンスが複数存在
しています。require するファイルも増えたし、new するクラスも増えたし、
最後に accept($renderer) も複数実行しなければなりません。

Smartyに配列として渡してるからレイアウトは好きに出来るので問題はないので
すが、普通に $form->display() で出力すると

$form->display();
$selectform->display();

<form>
<input type="text" value="hoge">
</form>
<select name="selectform">
<option = "huga">
</select>

のように困った出力になってしまいます。何か使い方を勘違いしてる気
がしてます。
0409nobodyさん04/02/15 00:53ID:???
>>408
<?php
$form = new HTML_QuickForm( 'hoge' );
$form->addElement( 'select', 'mySelectForm', 'テスト' );
$mySelect =& $form->getElement( 'mySelectForm' );
$mySelect->setSelected( 'hogehoge' );
$form->display();
?>
と,たぶん getElement() のようなことを考えておられるのではないかと推測.

あるいは,

<?php
$mySelect = new HTML_QuickForm_Select( 'mySelectForm', 'テスト' );
$mySelect->setSelected( 'hogehoge' );
$form = new HTML_QuickForm( 'hoge' );
$form->addElement( $mySelect );
$form->display();
?>
なんて方式も可能だったと思いますが,メリットは薄いのではないかと.

子ルーチンがそれぞれ独自の HTML_QuickForm_Element 派生クラスを返して,
親ルーチンがそれらをまとめて addElement() する,なんて場合には,
上記のような「addElement() にオブジェクトを直接渡す式」が使えますね.
0410nobodyさん04/02/16 01:49ID:???
>>408
なるほど。それでうまくいきますね。ありがとうございます。
ネット上にあるサンプルって

if($form->validate()) {$form->freeze();}

このパターンばかりなんですが、実際に何らかの処理をするサンプルプログラム
どこかにないですかね。最初にフォームにアクセスした時は$form->validate()は
FALSEを返すみたいですが、どの変どういう仕組みになってるのか分からないので
、どういうコードを書けばいいのかイメージが湧かないです。

やっぱりソースコード読むのが一番の近道ってことでしょうか。精進します。
0411nobodyさん04/02/19 07:22ID:???
DB_DataObject_Form使ってる人いる?
0412nobodyさん04/02/19 11:22ID:???
>>411
FormBuilderね
使ってみようかと思ったんだけどexample動くように設定するのが面倒で放置中(w
使ってみてレポートきぼんむ
0413nobodyさん04/02/19 17:54ID:???
>>412
なにやら面倒そうだね。
ところで 2ch pear wiki って誰でも勝手に書きこんでいいの?
0414nobodyさん04/02/19 19:09ID:???
DB_DataObject 使ってみました。すごい便利ですねこれ。
DB_DataObjectクラスを継承した daoMytable を作って
$dao = new daoMytable;
$dao->id = 3;
$dao->name = 'mona';
$dao->address = 'tokyo';
$dao->update();

を実行すると、
UPDATE mytable SET name = 'mona', address = 'tokyo' WHERE id = 3;
のような SQL文を自動で生成して、DBクラスを使ってそれを実行してくれます。

実行前にテーブルの情報を、データベースにSQL文を使って取り出してる
みたいで、文字列のカラムには自動でクォートしてくれると至れりつくれり
のようです。

でもこのテーブルの情報を毎回問い合わせるのは勿体無いと思うのですが、
これはクラス定義の際に指定できないんですかね。各カラムの属性をクラス
で定義できたらいいなと思うんですが。
0415nobodyさん04/02/19 19:11ID:???
追記
あと、int型の列に文字列を挿入しようとすると、勝手に 0 を挿入するような
SQL文を実行されてしまうようです。ここらへんの挙動って変更できないので
しょうか。PEAR::isError() なんかでエラーを取得できると嬉しいのですが。
0416nobodyさん04/02/19 19:28ID:???
>>414
テーブル毎に DB_DataObject の派生クラスを作成して、必要なメソッドを上
書きすればお望みの動作が実現できます。この場合は INI ファイルは必要あ
りません。
最低限の実装はこんな感じです。
class MyApp_DataObject_TableName extends MyApp_DataObject
{
function MyApp_DataObject_TableName()
{
parent::MyApp_DataObject();
$this->tableName('table_name');
}
function table()
{
return array('id' => 1,
'name' => 2,
'description' => 2,
'rdate' => 2,
'mdate' => 2
);
}
function keys()
{
return array('id');
}
function sequenceKey()
{
return array('id', true, false);
}
}
0417nobodyさん04/02/19 19:35ID:???
>>413
誰でも書き込んでいいと思いますよ。
0418nobodyさん04/02/19 19:48ID:???
>>416
ありがとうございます。
DB_DataObjectクラスのコメントの部分に思いっきり書いてありましたね。
読んでもよく意味が分かってなかったので助かりました。
0419nobodyさん04/02/19 20:04ID:???
>>414
毎回自動でやるより,最初に /usr/local/lib/php/DB/DataObject/createTables.php を使って,
ini ファイルを作ってやった方が,効率も速度も利便性も良いと思います.

でも,oracle だと少しいじってやらないと動かないかもしれません.
以前に比べれば,少しはマシになっているのですが……
pg や my では素のまま動きますね.
0420nobodyさん04/02/21 00:03ID:???
mojaviでLiveUser用の権限コンテナってあるんでしょうか?
0421nobodyさん04/02/21 04:11ID:???
>>419
ありがとうございます。
Generator.php の使い方がよく分からなくて困ってました。
createTables.php から使ってみたら見事、データベースのテーブル定義を
取得して iniファイルと各テーブル用クラスを出力してくれました。

これは便利です。テーブル定義は iniファイルかクラスの変数のどちらか
に定義しておけばそれを読み込んでくれるってことですよね。ちょっぴり
感激です。

0422nobodyさん04/02/21 11:06ID:???
>>421
おめでとうございます.もうコレなしで PHP できません(w

テーブル定義は ini ファイルがメインになり,内部動作もこれに依存します.
例えば setFrom() や toArray() といった「全てのフィールドをアレコレする」というメソッドは,
クラスのコードに書いてあっても ini にないフィールドは無視されます.

テーブルのフィールド名や構成を変更した時は,
必ず createTables.php を再走行しましょう.
この時,クラス定義のコードで AUTOCODE とかなってる部分以外は保存されるので,
安心して上書きできます.
0423nobodyさん04/02/22 17:42ID:???
>>422
自分のコードががらりと変わってしまいました(・∀・)イイ!!
ところで DB_DataObject には isError() がないみたいなんで
すがどうやってエラーを検出したらいいんでしょうか。

クラス定義を見ると raiseError() でエラーを作成してる
のですが。
0424nobodyさん04/02/22 18:03ID:???
データベースの接続に失敗したときに、問答無用で

「DB Error: connect failed」

と表示されてしまうので、ここらへんを制御したいと
思った次第です。

DB_DataObject::debugLevel();

でも、このエラーは表示されてしまいます。
0425nobodyさん04/02/22 18:45ID:???
DB_DataObjectで抽出条件等を設定中に
実際どのようなSQLクエリが発行されるか確認する方法ってありますか?
->update()する前等に生成されるSQLクエリが
正しいかをテストしたいのですが・・・
それらしいメソッドが見当たらない・・・
0426nobodyさん04/02/22 18:51ID:???
>>423
PEAR::isError() が使えませんか?

>>425
DB_DataObject::debugLevel() で表示されます.
あと ini で設定する ignore_update とかそんなんも参考までに.
0427nobodyさん04/02/22 20:27ID:???
>>426
発行したSQLクエリを表示はできるようなのですが、
->update()を実行した時点で自分の書いたコードに誤りがあると
間違ったSQLクエリを実行してしまう可能性がありますよね。
なので、実質的なデータベースのupdate自体は行わずに
SQLクエリのみを表示するという事は無理でしょうか・・・?

$person = new DataObjects_Person;
$person->get(12);
$person->name='fred';
/* ここで一度確認したい */
//$person->update();
0428nobodyさん04/02/22 22:38ID:???
>>427
>>426
> あと ini で設定する ignore_update とかそんなんも参考までに.

正確には debug_ignore_updates だった.

あるいは,全てにおいてとにかくどんなクエリが実行されてるかを知りたいのならば,
_query() を自分のクラスで overload して,特定条件で引数を表示するようにしたら良いかと.
0429nobodyさん04/02/22 23:44ID:???
最初に Auth で認証して、各コンテンツで認証済みかどうかチェックする際に
どうしてますか?

いちいち Auth のインスタンスを作成して getAuth() メソッドを呼出してる
のでしょうか。それとも自前で session_start() して $_SESSION['_authsession']['registered']
を調べてますか?自分は後者なんですが何か変ですかね。
0430nobodyさん04/02/23 00:08ID:???
auto_prepend_file使ってる
■ このスレッドは過去ログ倉庫に格納されています