トップページphp
1001コメント299KB

ZendFramework Part2

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2008/03/05(水) 23:21:24ID:???
公式
http://framework.zend.com/

マニュアル
http://framework.zend.com/manual/ja/

m-takagi ver(↑よりたぶん新しい)
http://www.m-takagi.org/docs/php/zend/

API
http://framework.zend.com/apidoc/core/
0002nobodyさん2008/03/05(水) 23:25:27ID:???
ついに立った。

来るべき時が来た。

その名は勇者「Zend Framework」

君は生き残ることができるか!?
0003nobodyさん2008/03/06(木) 05:21:30ID:???
何気に公式サイトを訪れたら1.0.4になってた。
ほんの一部ZF1.0.3本体を弄ったんだよなぁ、どこだったか思い出せん...orz
差分取るしかないか。
0004nobodyさん2008/03/06(木) 16:16:28ID:???
1.5RCも出てるぜ
0005nobodyさん2008/03/06(木) 18:15:35ID:???
Zend_Formしてみようと思うんだけど、
これってZend_Viewを使うこと限定なのか?
Zend_View使わずSmarty使ってるんだけど、そのままrenderできないのかな
0006nobodyさん2008/03/06(木) 18:35:53ID:???
ちなみにソース

require_once 'Zend/Form.php';
$form = new Zend_Form;
$form->setAction('/')->setMethod('post');

$form->addElement('text', 'name');

echo $form->render();

出力「error」
0007nobodyさん2008/03/06(木) 22:21:48ID:???
>>3
svn使いなされ
000832008/03/07(金) 01:17:52ID:???
>>7
ん? ZFを自分のリポジトリにつっこんで差分取ったり管理しろってことかな?
弄ったのはどこかの正規表現だったかな。
まぁupdateの度にdiffで確認するよりSubversionにつっこんだ方が楽だろうけど、

で、実際はどうする? 俺はZF1.0.3で初めて使ったんだけど、
1.0.3をsvnにつっこんで、branch分けしてそこに俺々修正したものをつっこむ。
1.0.4をtrunkでupdateしてbranch側でmergeって感じになるのかな。
0009nobodyさん2008/03/07(金) 03:49:03ID:???
フレームワークのソースは触ったら後々面倒だろ
001032008/03/07(金) 04:59:24ID:???
>>9
そう、俺もそう思う。
弄ったのはバグだろうと思われるところだけ。
どうせそのうち修正されるだろうと思ってたから
ちょっと悩んだんだけど、継承せずに直で弄った。
確かググったら出てくる有名どころのバグだったと思うよ。
だから、修正箇所をちゃんと控えてupdateしたときに確認すればいい程度なんだろうけど、
ZFを初採用してバタバタしてたから控えてなかったのだ(´・ω・`)
0011nobodyさん2008/03/07(金) 05:00:54ID:???
メソッドの型がインタフェースと違うって話?
001232008/03/07(金) 08:55:10ID:???
ゴメソ ちょっと混同してた。
有名どころって書いたのはmb_encode_mimeheaderが入れる改行だったんだけど、
こちらはZF本体を弄る必要がないね。

ひとつはZF入門本に載っていたZend_Mailのバグなんだけど、
本当にバグなんかな? 1.0.4でも修正されてないし、修正しなくてもよさそうな気もするが、
検証せずにとりあえず適用してる。

あと、Zend_DateのRFC2822の正規表現。これはZFが悪いんじゃなくて
某メール鯖が悪いんだけど、正しく拾えないので悩みつつZF側を修正した。

/**以下チラシの裏
trunkに1.0.3をつっこむ
1.0.3を分岐して俺々修正
trunkに1.0.4をつっこむ
1.0.4を分岐して1.0.3の俺々修正をmerge

ってなかんじでやってみた。
1.0.4つっこんだときに1.0.3との差分を見たけど
1000以上のファイルで修正されてた。
追加されてたのは5ファイルだけ。
**/

0013nobodyさん2008/03/07(金) 14:48:59ID:???
まあ普通はFW本体はリポジトリに入れないな
なんとか自前で継承して挙動の変更できないか検討して
止むを得ず本体のコードを変更する場合は
その該当ファイルのみコミットしておくかな、自分なら

rubyは再定義しやすいから
FWの一部分の挙動をちょろっとだけ変えるってのも楽なんだがな
0014nobodyさん2008/03/07(金) 22:38:40ID:???
またRubyか(呆
0015nobodyさん2008/03/08(土) 00:28:19ID:???
>>12 Zend_Mailの件はiconv_mime_encodeの対応待ち扱いなので、先はまだまだ長そう
framework.zend.com/issues/browse/ZF-1950
001632008/03/08(土) 01:56:10ID:???
ZF本体を弄らずに継承などで済ませるならそもそもリポジトリにつっこむ必要ない。

で、例えばZend_Mailのバグフィックスとかデフォルト文字コードをISO2022JPに
変更したMy_MailをZend_Mailから継承して作ったとするでしょ。
当然クライアントコードにはrequire_once 'My/Mail.php'とか new My_Mail() などが
ちりばめられるのだが、将来ZF側でフィックスされたり文字コードもmbstring_language
から自動判別されるようになり、My_Mailはお役ご免になったりしても
クライアントコードをいちいち書き換えたりするのも馬鹿らしいので中身が空のMy_Mailを
引きずることになる。
どうせMy_*を管理しなきゃならんのならZF本体を弄っても手間はあまり変わらないよなぁ。
他の人はどうしているんだろうと悩みつつ、時間がないのもあって前回はZF本体を弄っちゃった。

幸い外からも接続できる鯖を持ってるし、svn+sshで接続可能な様にしているので、
ZF専用のリポジトリを作って管理していけば、出先からでもcheckoutやexportできる。
本来フレームワークを直接弄るなんて邪道なんだろうけど、それはZFの完成度がまだまだ
低いと言うことで納得して、逆にリポジトリを立てることによって、遠慮なしに弄っていけるから
ある意味"すっきり"した感じがする。
0017nobodyさん2008/03/08(土) 02:28:39ID:???
FW本体をバージョンアップして自分の意図したように変更がかかった場合はいいけど、
自分の意図してないように変更がかかったらどうすんの?
またFW本体をハックする?

あと、FWがバージョンアップしたら自分のリポジトリで管理しているバージョンと
マージするんよね?そっちの方が手間暇かかりそうな気がする。。。

まぁここらへんは人それぞれなんだろうけど。。。
俺はFW本体はいじらない派。
0018nobodyさん2008/03/08(土) 02:42:05ID:???
今日1.5RC2が出ますよ
001932008/03/08(土) 03:17:30ID:???
>>17
もろに修正箇所が衝突したら手動マージしなきゃならないが、
でなければマージそのものはそんなに手間かからないんじゃ?
と思ってる。

本体を弄らず継承でが王道で、本体を弄ってしまうのは邪道だとは思う。
Zend_Mailのデフォルト文字コードなんてのは、継承で書き換えるのが
どう考えても普通。Smartyなんかも結構弄ったけど、基本的には
継承したり、新たなプラグインやフィルターを書いてた。
でもね... まぁ人柱気分でやってみるよ。
本体再書き換えしなきゃならんときも出てくるだろうけど、
そのうち、拡張は別だが修正は減ってくるだろうと願ってる。
(まだそんなに弄ってないけど、弄りたいところは他にもあったし)
FW使いながら、貧乏コードって言われそうだ(^^;
0020nobodyさん2008/03/08(土) 03:33:37ID:???
バグなら報告すればいいのに
0021nobodyさん2008/03/08(土) 05:32:10ID:???
バグならpatch書いて取り込んでもらえばいいだけじゃん
0022nobodyさん2008/03/11(火) 14:16:57ID:???
Zend内でphpで吐き出したものを
同じZendからfile_get_contentsで読み込めないの?
0023nobodyさん2008/03/11(火) 18:55:26ID:???
読み込めるんでない?
0024nobodyさん2008/03/11(火) 19:27:58ID:???
普通にできる
0025nobodyさん2008/03/12(水) 03:54:29ID:???
パスでも間違ってんじゃね?
0026nobodyさん2008/03/13(木) 14:50:15ID:???
1.5RC3キタ
0027nobodyさん2008/03/13(木) 17:01:18ID:???
hostsの設定が原因だったわ
0028nobodyさん2008/03/13(木) 18:25:33ID:???
ACLって基本的にコントローラ単位でかけるもの?
対象が違うアクション(管理者向けの編集機能やユーザ向けの閲覧機能)が混在してるコントローラ
は別コントローラとして分けたほうがいいんだろうか
0029nobodyさん2008/03/18(火) 00:48:46ID:???
Zend Framework 1.5 が出たね。
0030nobodyさん2008/03/18(火) 01:11:51ID:???
出やがったか

ウチが検証と移行を検討できるのはいつになることやら。。
0031nobodyさん2008/03/18(火) 01:24:23ID:???
1.5になってどれだけ使える感じなんだろう
0032nobodyさん2008/03/18(火) 01:25:03ID:???
ドキュメントがああああああああああ
全部英語おおおおおおおおおおおおお
書き換わってるうううううううううう

m-takagi・・・がんばって・・・ください・・・応援してます・・・
0033nobodyさん2008/03/18(火) 01:52:51ID:???
ロケールファイルがぶっ壊れたのかなw
多分サイトリニューアル時の作業ミスだろうね。
0034nobodyさん2008/03/18(火) 23:01:29ID:???
日本語マニュアル回復した
0035nobodyさん2008/03/25(火) 01:22:11ID:???
1.5入れたらキャメルケースのアクション名が実行できなくなったんだけど仕様なの?
[controller]/fooBar/ってリクエストのとき
以前はfooBarActionメソッドが呼ばれてたんだけど、foobarActionメソッドじゃないと呼んでくれなくなった。
0036nobodyさん2008/03/25(火) 01:57:20ID:gUsYdsCk
>>35
その辺は仕様変更された。
よく確認した上で、実装しる。
0037nobodyさん2008/03/25(火) 02:09:06ID:???
しょっちゅう仕様変更するフレームワークって何なの
0038nobodyさん2008/03/25(火) 02:14:12ID:???
>>37
ZF
0039nobodyさん2008/03/25(火) 03:36:46ID:???
>>36
ごめん、悪いけどその辺りの話ってドキュメントのどこに書いてある?
テンプレートがハイフン区切りになったのは知ってたんだが、今回のは初耳で、
http://framework.zend.com/manual/ja/zend.controller.html
http://framework.zend.com/manual/ja/zend.controller.action.html
を見ても書いていなくて困ったんだ。
0040nobodyさん2008/03/25(火) 04:20:41ID:gUsYdsCk
>>39
この辺が参考になるんじゃない?
http://framework.zend.com/manual/ja/zend.controller.migration.html
0041nobodyさん2008/03/25(火) 21:28:57ID:???
>>40
ありがとうございます。
しかし
> しかし、PHP の関数名は大文字小文字を区別しないので、URL 自体を camelCasing 形式で書くこともできます。
> PHP では大文字小文字を細かく区別しないため、 これらはどちらも同じメソッドを実行することになります。
などは、ビュースクリプトはダッシュ区切りにすべきものの、アクションリクエストとアクションメソッド名はどちらでも構わないように読み取れる。

どうも腑に落ちないので、ファイルの中を検証してみた。
1.5からは最終的にZend/Controller/Action.php 498行目の
 if ($this->getInvokeArg('useCaseSensitiveActions') || in_array($action, get_class_methods($this))) {
でメソッドが存在するか確認されるようになっているが、ここで渡される$actionは既に小文字に正規化されているため、
大文字メソッド名だとin_arrayがfalseになってしまう。
ここのif文は
 if ($this->getInvokeArg('useCaseSensitiveActions') || method_exists($this, $action)) {
である方がドキュメントのニュアンスに即しているのでは。
0042nobodyさん2008/03/27(木) 15:12:28ID:???
1.5.1か
0043nobodyさん2008/03/27(木) 17:47:06ID:???
changelogどこいった
何が修正されたんだ
0044nobodyさん2008/03/27(木) 21:47:41ID:???
ここで見られるよ
http://framework.zend.com/issues/secure/IssueNavigator.jspa?reset=true&&pid=10000&fixfor=10174&status=5&sorter/field=issuekey&sorter/order=DESC
0045nobodyさん2008/03/31(月) 01:42:25ID:DgX3Qd/t
今ZF初めていじってるんだけどZendControllerってどうなの?
なんか使いにくい感じがするんだけど・・・
独自のがいいのかね?
それとも使ってれば慣れる?

ZendController使ってる人
メリットデメリットあれば教えてぷりず!
0046nobodyさん2008/03/31(月) 01:53:02ID:???
使いにくいってどの辺が?
0047nobodyさん2008/03/31(月) 02:03:49ID:???
>>46
URIとかアプリとしてセキュリティ的にいいのか?とか
Directory構成とか考えるとなんだかなぁと
使ったことないからそんなもんだといわれればそれまで
かもしれませんが

ZF使ったオープンソースとか何かありませんかね?
0048nobodyさん2008/04/01(火) 00:44:20ID:???
URI->アクションのルーティングとかは昨今のFWならどれでも大差ないと思うけどな
あとRequestObject、ReponseObjectあたりが割と使いやすくて気に入ってる
0049nobodyさん2008/04/01(火) 01:06:58ID:???
特にZend_Controllerが使いにくいと考えた事ないなぁ。
とても自分でルーティング周りやDispatcher周りを自分で一から実装する気にはなれんw

ま、オレオレFWにZend Frameworkをライブラリの一部として使うのはそれはそれでアリだと思うけど。
0050nobodyさん2008/04/01(火) 01:08:31ID:???
Zend_Formの評判が気になる
0051nobodyさん2008/04/01(火) 14:48:39ID:7JV3dDHX
Zend、Cake、SymfonyならZendが一番わかりやすいと思うよ
0052nobodyさん2008/04/01(火) 15:09:08ID:???
わかりやすいっていうか
低機能なだけ・・
0053nobodyさん2008/04/05(土) 21:54:16ID:???
zendの範囲で済む安仕事にはむしろ有り難い
ケーキや管弦楽とは別の見方でモノ提供してる感じだね
FW作るための土台みたいな感じ
0054nobodyさん2008/04/05(土) 22:59:41ID:???
ZFで自社用FW作るとかならかなり良いと思う
0055nobodyさん2008/04/05(土) 23:17:50ID:???
管弦楽ってw

symfonyって打ったほうが早いだろ
0056nobodyさん2008/04/06(日) 00:02:17ID:???
>>ZFで社内カスタムFW
既に結構作られてそう。
0057nobodyさん2008/04/08(火) 13:18:35ID:???
>>50
Zend_Form 使ってるけど、速度的に重い気がする。
だから Zend_Cache でキャッシュしてる。
0058nobodyさん2008/04/11(金) 21:49:28ID:???
ZFでsmarty使う方法がいまいちわかりません。
検索してもサイトによって書いてる事がばらばらだったりで。

ZFにあるinterfaceから継承したsmarty用クラスは作成しました。
ここからなにをすればいいんでしょう?

        $opt = array(
                'templete_dir' => '../application/views/scripts/index',
                'compile_dir'  => '../../var/templates_c'
                );

        $smarty = new Common_View_Smarty(null, $opt);
        $smarty->assign("books", "テスト");
        $smarty->render("index.tpl");

これがアクション内の記述なんですが、何か変なところはあるでしょうか?

やったことは、
・PHP.iniにsmartyのincludeパスを通す。
・ttp://wadslab.net/2008/03/zend_view_smarty/
 を参考にZend_View_Interfaceを実装したCommon_View_Smartyを作成
・index.phpの中身は
Zend_Session::start();

Zend_Controller_Front::getInstance()->setParam('noViewRenderer',true);
Zend_Controller_Front::run('../application/controllers');
これだけ

でIndexController.phpの中のindexActionに↑の奴を書いています。
エラーがでるでもなく、真っ白な何もない画面が表示されてしまいます。
0059nobodyさん2008/04/11(金) 22:56:44ID:???
エラーが出ないならApacheやIISのログ見ればいいじゃない
0060nobodyさん2008/04/11(金) 23:16:02ID:???
apacheのログも見てみましたが、それらしいものが全く見あたりません。
画面に何も表示されないので、まずテンプレートファイル自体読み込めてないと思うんですが

        $opt = array(
                'templete_dir' => '../application/views/scripts/index',
                'compile_dir'  => '../../var/templates_c'
                );

        $smarty = new Common_View_Smarty(null, $opt);
        $smarty->assign("books", "テスト");
        $smarty->render("index.tpl");

この下に
   echo 'てすと'

と書くと、てすとだけ表示されます。

なのでこのアクションは呼び出されているけど、上の方の処理が意味をなしてない?ようですが
どこで間違ってるのかが突き止められない状態です。
せめてphpのエラーメッセージがでればまだおいかけられるんですが、一見エラーがないように素通りするので・・・
0061nobodyさん2008/04/11(金) 23:42:39ID:???
ZFでSmartyを使用するには
ViewRendererに登録してZend_Viewを置き換える方法と
Zend_Viewを無効にしてアクション内でSmartyのrenderメソッドを呼び出す方法の2通りがある。
俺は前者でやっているが、後者でやるならマニュアルの42.3.2.2.にそのまんまの方法が載っているからそれ参考にすればおk。
そのサイトの怪しげな方法を参考にする必要は無い。
強いていうならそれはテンプレートディレクトリが正しく指定されてないと思われ。
0062nobodyさん2008/04/12(土) 00:11:46ID:???
ttp://framework.zend.com/manual/ja/zend.view.scripts.html#zend.view.scripts.templates.interface
マニュアルのはこれですよね?

一番最初はこれを見てやってたんですが、結局できず色々検索した次第です。
前述しましたが、interfaceを使ってsmarty用の,このマニュアルで言うところのZend_View_Smartyは作成しています。
このマニュアルで言うと、後は
$view = new Zend_View_Smarty();
$view->setScriptPath('/path/to/templates');
$view->book = 'Zend PHP 5 Certification Study Guide';
$view->author = 'Davey Shafik and Ben Ramsey'
$rendered = $view->render('bookinfo.tpl');
これすればいいだけなんですよね?(テンプレートファイルの配置は終わってるとして)

これだとテンプレートファイルのパスは指定していますが、templates_cのパスは指定してませんよね。
なしでもいけるんでしょうか?

このマニュアルのインターフェースを継承したsmarty用のクラスは作成して
マニュアル通り、アクション部分に↑の5行ほどのプログラムを書き、テンプレートファイルも適宜設置済み。

で実行してもやはり真っ白なんですが、何かが足りないんでしょうか。
テンプレートディレクトリが間違ってるかもしれないと、何十通りか考えられる全てパスは試してみましたが、やはり無理でした。
0063nobodyさん2008/04/12(土) 00:33:44ID:???
display_errors = On
0064nobodyさん2008/04/12(土) 00:40:04ID:???
display_errors = On
は設定済みです。
なのにエラーが出ない状態です。
0065nobodyさん2008/04/12(土) 00:45:03ID:???
header('hogehoge');

みたいなところがおかしいと真っ白になるよね
0066nobodyさん2008/04/12(土) 01:15:36ID:???
通常のZend_Viewは使えてんの?
0067nobodyさん2008/04/12(土) 01:17:28ID:???
オフィシャルのView_Smartyのrender()はsmartyのfetchをコールしてるだけだから、表示はしてくれない。
ViewRendererに登録しないでやるんだったら、自分でZend_Controller_Response_HttpのsetBody()に登録せんと。

・コントローラ
$this->_view = new Zend_View_Smarty();
$this->_view->setScriptPath('/path/to/templates');
$this->_view->book = 'Zend PHP 5 Certification Study Guide';
$this->_view->author = 'Davey Shafik and Ben Ramsey'

・コントローラのpostDispatch()にこんな感じで書く。
$rendered = $view->render('bookinfo.tpl');
$this->getResponse()
->setBody($this->view->render($rendered));

こんな感じでどう?
0068nobodyさん2008/04/12(土) 01:20:50ID:???
間違った。。。
$rendered = $view->render('bookinfo.tpl');

$rendered = $this->_view->render('bookinfo.tpl');
0069nobodyさん2008/04/12(土) 01:27:39ID:???
そういえばecho $this->view->render('hoge.tpl')じゃなかったか
0070nobodyさん2008/04/12(土) 02:17:04ID:vLVKIeUG
こうするとなにかエラーがあったときにわかりやすいよ(開発中のみ)。

//Zend_Controller_Front::run('../application/controllers');
$front = Zend_Controller_Front::getInstance();
$front->addControllerDirectory('../application/controllers');
$front->throwExceptions(true);
try {
$front->dispatch();
} catch(Exception $e) {
echo nl2br($e->__toString());
}
0071nobodyさん2008/04/12(土) 09:16:17ID:???
ErrorControllerの枠組みがあるじゃん
0072nobodyさん2008/04/12(土) 15:22:15ID:???
>>66
はい、使えています。

>>67
参考に色々やってみたら、少し進んだような手応えがありました。
テンプレートの読み込みまではいったようです。
ただ、テンプレートの中に{$test}のようなsmartyタグを書くとエラーが出ます。
一切タグのない純粋htmlを読み込んでrenderするだけならできています。
テンプレートの中にタグを埋め込むと

Fatal error: Smarty error: [in index.tpl line 6]: [plugin] modifier 'sanitize' is not implemented (core.load_plugins.php, line 118) in
ライブラリのパス Smarty.class.php on line 1092

というエラーがでてしまいます。
恐らくこれを解決すれば表示されるのではないかと思いますが、エラーで検索してみてもこれといった解決法が見つかりませんでした。
in index.tpl line 6
この行に{$book_name}のようなタグがあります。
0073nobodyさん2008/04/12(土) 15:57:34ID:???
> 参考に色々やってみたら
何をやったの?
> sanitize
カスタム関数のsanitizeファイルが無いんでしょ。
0074nobodyさん2008/04/12(土) 15:59:52ID:???
すいません自己解決しました。
Zendのオフィシャルじゃなくて、少し改良したらしい他のサイトの継承クラス使ってたのが原因でした。
Zendオフィシャルのにしたらエラーは出なくなりましたが、表示はやはりでませんでした。

テンプレートには{$book_name} が埋め込んであります。
実行すると、コンパイル済みディレクトリにファイルが出来てそのタグを埋め込んだ部分が
<?php echo $this->_tpl_vars['book_name']; ?>
となっていました。
そのファイルではそうなっているんですが、Webでアクセスするとその部分が綺麗さっぱり消え去ってしまっています。
そのファイルのタグ該当部分の違いですが
テンプレファイル:{$book_name}
コンパイルファイル:<?php echo $this->_tpl_vars['book_name']; ?>
Webでアクセスしたページのソース:なにもなし
こんな状態です。
0075nobodyさん2008/04/13(日) 17:59:08ID:???
綺麗さっぱり消え去ってるんじゃなくて、ちゃんと実行されてんだろう
book_nameに値が入ってないんじゃね
0076nobodyさん2008/04/13(日) 19:58:27ID:???
テンプレートに{debug}ってして、中身見てみたら?
多分>>75が言うように値入ってないと思うけど。
0077nobodyさん2008/04/22(火) 23:30:49ID:???
ZFわかんなくて、CakeやってからZFに手出したら
すげーZF好きになった。
ZFの方が記述が納得しやすいと思う。
0078nobodyさん2008/04/23(水) 00:19:31ID:???
例えばどんなとこよ?
0079nobodyさん2008/04/23(水) 00:22:18ID:???
ZFがいいんじゃなくてCakeが腐ってるだけだろ
特にとんがった工夫も特徴もない標準的な実装がZF
0080nobodyさん2008/04/23(水) 11:57:54ID:???
pearからのいいとこどりだしね
0081nobodyさん2008/04/23(水) 20:59:08ID:???
そのうち、PHPにビルトインされるだろう。
と思ってたら本当にやりやがった。
マジかよw

な事になると思うよ。
Zendはいつもそうだもの。
0082nobodyさん2008/04/23(水) 21:23:45ID:???
と思ってたら本当にやりやがった。
マジかよw
0083nobodyさん2008/04/26(土) 02:06:01ID:5isAEf4O
Zend Frameworkでセッション使ったら、画面が真っ白になりました。
なんででしょう?
0084nobodyさん2008/04/26(土) 02:15:12ID:???
まだFW使うレベルじゃないと思われ
0085nobodyさん2008/04/26(土) 03:22:30ID:???
頓知クイズの類じゃないのか。
0086nobodyさん2008/04/26(土) 03:46:35ID:faNVTaZi
new Zend_Date();
とすると、Zend_Date_Exceptionが1018行目から飛んできます。

第一引数に以下のような配列を渡すと正常にインスタンスが生成できます。
(※定数START_TMEの中身はtime()の戻り値です)
$dateArr = array(
'year' => date("Y", START_TIME),
'month' => date("m", START_TIME),
'day' => date("d", START_TIME),
'hour' => date("H", START_TIME),
'minutes' => date("i", START_TIME),
'second' => date("s", START_TIME));

Zend_Dateの199行目の以下のメソッドの戻り値がタイムスタンプでるので、
その後の処理で例外が飛んでいるのは何となく分かりました。
(以下の後にコールされるsetTimeZone()の中で、timezone_open($zone)で$zoneがintのタイムスタンプなのでこけているようです。)
$zone = $this->getTimezoneFromString($date);

リファレンスによると、引数なしでコールした場合は、
勝手に'now'なインスタンスが生成されるようなのですが、
同じような現象が起こった方はいらっしゃいますでしょうか。。

Zend_Dateのバージョン記述は以下です。
@version $Id: Date.php 8943 2008-03-20 21:43:37Z thomas $

これって既知のバグなのでしょうか。
それともこちらの何がしかの設定の問題なのでしょうか。。
事前にdate_default_timezone_set('Asia/Tokyo');は行っています。
0087nobodyさん2008/04/26(土) 04:05:06ID:???
再現するコード出してみてくれ
0088862008/04/26(土) 04:41:19ID:???
>>87
こんなです。

<?php
define('START_TIME', time());
define('START_DATE', date("Y/m/d H:i:s", START_TIME));

define('APP_ROOT_DIR', dirname(dirname(dirname(__FILE__))));
define('DIR_SEP', DIRECTORY_SEPARATOR);
define('APP_LIB_DIR', APP_ROOT_DIR . DIR_SEP . 'library');

error_reporting(E_ALL);
set_include_path(APP_LIB_DIR . PATH_SEPARATOR . get_include_path());
date_default_timezone_set('Asia/Tokyo');

require_once 'Zend/Loader.php';
Zend_Loader::registerAutoload();

set_error_handler(array('My_ErrorHandler', 'userErrorHandler'));

$date = new Zend_Date();
0089862008/04/26(土) 04:43:14ID:???
>>88

今気がつきましたが、set_error_handlerの前でnew Zend_Date()だと、例外が飛んできません(正常にインスタンス生成できる)
0090nobodyさん2008/04/26(土) 04:48:52ID:???
set_error_handlerの第二引数何それ?
0091862008/04/26(土) 04:53:47ID:???
>>90
第一引数の配列の要素[0]がクラス名で、要素[1]がメソッド名です。

第二引数は指定していません。
0092862008/04/26(土) 05:24:31ID:???
>>91
すみません。自己解決しました。

初めの説明がちょっとおかしかったりしてるので補足します。

Zend_DateObjectの1016行目で、(ここ最初にちゃんといえてなかったです)

if (!@timezone_open($zone)) {

となっていますが、このZend_Dateのコンストラクタの第一引数がnullだと、
上記の$zoneがintのタイムスタンプで入ってきます。
そうすると、timezone_open()はタイムゾーン文字列が渡されることを期待しているので、
E_WARNINGを発しますが、@で抑制されます。(通常は。)

しかし、独自のエラーハンドラをすべてのエラーレベルに対して設定していて、
そのハンドラの中で@付きのエラー(ハンドラ内でのerror_reporting()の戻り値が0の場合)に対して適切な処理を行っていないと、
本来の@によるエラー抑制は無視され、処理が停止します。

このためnew Zend_Date(パラメータなし)がこけていました。

これは、Zend_Loaderの160行目でもおきます。。
(独自エラーハンドラのせいで@fopen()の@が効かないので)

E_WARNINGに対しても独自のエラーハンドラを適用している場合は、ZFでは色々と気をつけないといけないみたいです。

以上、お騒がせしました。
0093nobodyさん2008/04/26(土) 13:15:49ID:???
自前のエラーハンドラ設定するならハンドラ側で
error_reportingのチェックは必須
ZFとかに限ったことじゃないぜ
0094nobodyさん2008/04/26(土) 21:29:22ID:???
>>92
Zend_Loaderの160行目の fopenの@は いろいろな問題を引き起こしているわけだけれど、、
さまざまなモジュールとの絡み合っている問題が多くて、どうしたものか悩んでます
http://framework.zend.com/issues/browse/ZF-2985
0095922008/04/27(日) 06:13:29ID:???
>>94
これじゃだめなんですかね?
自分は↓みたいにしてます。(Zend_Loaderそのものを)

// if (!$fh = @fopen($filename, 'r', true)) {
// return false;
// }
// return true;

add> clearstatcache();
add>
add> if ( is_readable($filename) ) {
add> return true;
add> }
add> $include_path = get_include_path();
add> $path_list = explode(PATH_SEPARATOR, $include_path);
add>
add> foreach ( $path_list as $path ) {
add> $fullpath = $path . DIRECTORY_SEPARATOR . $filename;
add>
add> if ( is_readable($fullpath) ) {
add> return true;
add> break;
add> }
add> }
add> return false;
0096942008/04/27(日) 16:07:42ID:???
>>95
fopenはinclude_pathを考慮してファイル取得できるのに、file_existsはinclude_pathを考慮できないのがデメリットなのだそうです
0097nobodyさん2008/04/28(月) 10:22:32ID:zm3zzhzx
マヌアルでプリント用のページ出力してくれ
0098nobodyさん2008/04/30(水) 13:59:47ID:???
数字で始まるActionって使えますか?

http://FQDN/controller/01

Actionメソッドの定義の仕方がわからない・・・orz
0099nobodyさん2008/04/30(水) 14:48:12ID:???
idという意味でもなくて単に数字のURLにしたいなら
actionメソッド名は適当につけてroutingで変えればいい
0100nobodyさん2008/04/30(水) 17:55:35ID:???
Zend_Db_Statement::fetch() の offset指定が動作しないのは仕様なのか・・・?
アダプタはPdo_Pgsql。

0101nobodyさん2008/04/30(水) 18:12:00ID:???
中身見てみれば?
■ このスレッドは過去ログ倉庫に格納されています