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

Zend Framework Part5

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2011/02/11(金) 04:04:29ID:???
公式
http://framework.zend.com/

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

翻訳状況
http://mikaelkael.dyndns.org/checker/language/details/lang/ja
http://framework.zend.com/wiki/display/ZFDEV/Japanese+(Nihongo)

バグ報告
http://framework.zend.com/issues/secure/Dashboard.jspa

API
http://framework.zend.com/apidoc/core/

前のスレッド  Zend Framework Part4
http://hibari.2ch.net/test/read.cgi/php/1265721684/
0275nobodyさん2011/07/05(火) 21:04:46.31ID:???
ずっと買おうか買うまいか悩んでる本だ、買っちまうかな
zendと全然ズレてる話題続けて申し訳ないんだけど、
こないだmixiのアルバム機能のソース見てみたら凄かったわ
ページ全体の遷移なんてしてなくて、フォームの値だけを送信して
見た目の画面遷移はhtmlのなかにdisplay:none;で隠してるテンプレートを
jqueryで読み込んでシーンを切り替えてるのね。
バリデートも全部jqueryとajaxでやってるんじゃないかと…
使えるライブラリやコンポネントの数増やして満足とか問題外。
フロント側/サーバ側なんて区切りないもの、くじけそうになったw
0276nobodyさん2011/07/05(火) 21:28:06.32ID:???
何年前から来た人ですか?
0277nobodyさん2011/07/05(火) 21:51:05.77ID:???
いくらなんでも浦島過ぎると思う
さすがにbigpipeまでいくとやり過ぎだけど
体感速度の向上って必須になってるし

jquery.templateとか楽でいいんだけど
開発の管理的に面倒な部分も多いよね
素のデザイナも素のプログラマも
どんどん役立たずになってきてて
ほとんど兼任できる人間しか残らなくなってきてる
0278nobodyさん2011/07/05(火) 23:48:05.84ID:???
アフィうぜえ
0279nobodyさん2011/07/06(水) 00:15:35.40ID:???
>>278
どこ?w


0280nobodyさん2011/07/06(水) 17:57:15.87ID:???
Zend_Service_Amazonの結果をキャッシュしようとして、
↓のように書いたのですが、上手くいきません・・・

$frontendOptions = array(
'cached_entity' => new Zend_Service_Amazon(AMAZON_ACCESS_KEY_ID, 'JP', AMAZON_SECRET_ACCESS_KEY)
);
$backendOptions = array(
'cache_dir' => CACHE_DIR
);

$amazon = Zend_Cache::factory('Class', 'File', $frontendOptions, $backendOptions);

$results = $amazon->itemSearch(array('SearchIndex' => 'Books', 'Keywords' => 'PHP'));

2回目以降にアクセスするとエラーがでて止まってしまいます。
この場合、クラスキャッシュは使えないのでしょうか?
0281nobodyさん2011/07/06(水) 18:51:53.53ID:???
エラーの内容を書けよ
0282nobodyさん2011/07/06(水) 18:53:00.37ID:???
あとPHPのバージョンも
まさか5.2以下じゃないよね?
02832802011/07/06(水) 19:02:32.25ID:???
>>281
スミマセン;

Warning (2): DOMXPath::query() [function.DOMXPath-query]: Invalid XPath Context [〜/Zend/Service/Amazon/ResultSet.php, line 89]

いろいろvar_dumpしてみたのですが、原因がわかりません・・・

>>282
バージョンは5.2.4です。

オブジェクトを返すメソッドには対応してないんでしょうかね・・・?
itemLookupならちゃんと動いたんですが・・・
0284nobodyさん2011/07/06(水) 19:31:48.68ID:???
>>283
Invalid XPath Context でぐぐってみ。
zend.ze1_compatibility_mode=On にしてるとエラーが出るとかなんとか。
02852802011/07/06(水) 20:36:24.56ID:???
>>284
バグレポートみたいなのがヒットしましたが、いまいちわかりませんね;
1回目(キャッシュなし)だと大丈夫なんですが・・・
0286nobodyさん2011/07/06(水) 23:45:20.61ID:???
>>285
2回目以降ってのが謎だね・・・
フロントエンドの automatic_serialization を有効にしても駄目?
02872802011/07/07(木) 03:21:59.69ID:???
>>286
Zend_Cache_Frontend_Classのコンストラクタで自動的に
$this->setOption('automatic_serialization', true);
になってるみたいです。

メソッドの返り値がオブジェクトで、
さらにコンストラクタが呼ばれたりしているので、そこらへんがキャッシュしきれてないんでしょうかね?
0288nobodyさん2011/07/07(木) 03:46:17.62ID:???
>>287
挙動とエラー内容から推測すると、
キャッシュは出来てるけどunserializeに失敗してる感じだね・・・

試しに『DOMDocument serializable』でぐぐってみたら、
PHP組み込みのDOMDocumentはserializeableじゃない模様・・・(つA`

Zend_Service_Amazon_ResultSetもserializable実装されていないので、これが原因かも。
0289nobodyさん2011/07/07(木) 10:00:33.18ID:???
PHPで組み込みオブジェクトのシリアライズがサポートされたのは5.3以降だよ。
復帰に失敗してるんだから、2回目でエラーは正しいんじゃないの?
0290nobodyさん2011/07/07(木) 23:44:23.28ID:Q2g22JEq
Zend_Viewのescape()はどうやらENT_COMPATにてエスケープするようですが
ENT_QUOTESにしたい場合は、単に/View/Abstract.phpの906行め付近の
function escapeのreturn文をENT_QUOTESに書き換えればいいのでしょうか?
0291nobodyさん2011/07/08(金) 13:55:14.12ID:???
>>290
そうかもしれないけどラップした自前のクラス作っておいた方がいいんじゃない?
0292nobodyさん2011/07/08(金) 14:20:44.43ID:???
やっぱりスケルトンとして雛形作ってる?
0293nobodyさん2011/07/10(日) 16:38:13.67ID:???
横からすいません
Windows7 64pit とXamppの環境でZendFrameworkを使ってWebアプリを作っています
modrewriteを使用しています
ビュースクリプト内でアプリケーションのベースURLを得たいと思い、
ビュースクリプト内で
echo $this->baseUrl();と言うふうに
ヴューヘルパーのbaseUrl()メソッドを呼び出したのですが返り値が空です
$baseUrl = Zend_Controller_Front::getInstance()->getBaseUrl();
この結果も空です
何がおかしいのか検討が付きません
何方か対策か代替案があったら教えてください。
0294nobodyさん2011/07/10(日) 17:23:54.44ID:???
バージョン書くのはそんなにいやか
0295nobodyさん2011/07/10(日) 17:54:38.36ID:???
PHPのバージョンは5.3
ZFのバーションは1.11.7です
0296nobodyさん2011/07/11(月) 18:06:00.05ID:???
$baseUrl = Zend_Controller_Front::getInstance()->getBaseUrl();

これが空なのは、baseUrlがRequestオブジェクトの処理後に生成されるからじゃねえの?

ってかControllerだろうがViewだろうがvar_dump()とかprint_r()に突っ込んでみたら?
0297nobodyさん2011/07/12(火) 16:53:52.49ID:???
ちょっと教えてください。

method="get"のフォームをサブミットしたときのURLはZFがデフォで取得できるパラメーターフォーマットには(当然)ならないんだけど、
method="get"でパラメーターを取得するためには、その都度Regexルーター作らないといけなんでしょうか?
0298nobodyさん2011/07/12(火) 18:43:36.73ID:???
$this->getRequest()->getQuery()で取得できるんだな・・・

しかし、、、
0299nobodyさん2011/07/12(火) 21:09:43.74ID:???
>>297
よくわからんけど、URLクエリの値($_GET)を取得したいなら>>298の方法が一般的。

Zend_Controller_Request_Http->getParam(); // パラメータ or $_POST or $_GETから取得
Zend_Controller_Request_Http->getQuery(); // $_GETから取得

0300nobodyさん2011/07/13(水) 09:56:08.29ID:???
ルーターのRegexで値を処理するのは
きれいなURLで値を取得をする場合

そもそもデフォルトのルーティングで
ある程度は取れるようになってる

query string の取得は他の人が書いてるように
getQuery(key) や getParam(key)でやるけど
getParam()はパラメーター全てからヒットするものを返すので
見通しも安全性も下がり気味だから避けてる
0301nobodyさん2011/07/13(水) 20:46:47.65ID:35EarspL
質問させてください
今以下のようにルーティング設定してるんですが、これだとアクションが増える度に設定を増やさなきゃ行けなくなります
効率的に書く方法はないでしょうか

;ユーザのhobby a
routes.user_hobby_a.route = "/user/:userName/hobby/aaa/*"
routes.user_hobby_a.defaults.module = "user"
routes.user_hobby_a.defaults.controller = "hobby"
routes.user_hobby_a.defaults.action = "aaa"
routes.user_hobby_a.reqs.userName = "\w+"
routes.user_hobby_a.type = "Zend_Controller_Router_Route"

;ユーザのhobby b
routes.user_hobby_b.route = "/user/:userName/hobby/bbb/*"
routes.user_hobby_b.defaults.module = "user"
routes.user_hobby_b.defaults.controller = "hobby"
routes.user_hobby_b.defaults.action = "bbb"
routes.user_hobby_b.reqs.userName = "\w+"
routes.user_hobby_b.type = "Zend_Controller_Router_Route"
0302nobodyさん2011/07/13(水) 21:15:54.26ID:???
routes.user_hobby.route = "/user/:userName/hobby/:action/*"
という話ではなくて?
0303nobodyさん2011/07/13(水) 22:19:05.41ID:???
>>302
ありがとうございます、出来ました
こうやって使うものなんですね、お恥ずかしい。ありがとうございました
0304nobodyさん2011/07/24(日) 16:11:17.20ID:???
 Zend_Mail::setDefaultTransport( new Zend_Mail_Transport_Smtp( 'smtp.gmail.com', $authConfig ) );

 $mail =new Zend_Mail( 'ISO-2022-JP' );
 $mail->setFrom( $fromMailAddress, $fromName );
 $mail->addTo( $mailaddress, $toName );
 $mail->setSubject( $subjest );
 $mail->setBodyText( $body );

 //送信実行
 try {
  $mail->send();
  catch( Zend_Exception $ze ){
  die( '失敗:'.$ze->getMessage() );
 }




失敗:5.5.2 Syntax error. e6sm3408137pbm.23
って出るのはなぜ?
0305nobodyさん2011/07/24(日) 21:25:38.82ID:???
http://e-words.jp/p/r-smtp.html
552 は「ディスク不足のため、要求された処理は実行不能。」なので、まずディスクを調べる必要あり。Syntax.... のほうは分からん。
0306nobodyさん2011/07/24(日) 23:56:22.74ID:???
返信ありがとう。

でもSMTPのステータスコードだからローカルディスクではなくてサーバーのディスクだよね・・・。

色々見てたら
http://ichi.txt-nifty.com/bmailnews/2010/01/coreserversmtps.html

「送信したメールがFromアドレスを詐称している。」
ってのを発見。

replyをプロバイダのメアドに変更して明日やってみます。

0307nobodyさん2011/07/25(月) 18:50:43.44ID:???
Zend_Validate_EmailAddressを作ると
No message template exists for key 'hostnameUnknownTld'
って例外出るんだけど・・・、
'
'hostnameUnknownTld'のメッセージテンプレートが無いよってことなんだろうけど
メッセージテンプレートってエラー時のメッセージだよね?
書いてるんだけとなぁ・・・。

0308nobodyさん2011/07/30(土) 20:31:38.70ID:TaO97IVQ
CGI版のPHPでapache_request_headers()に当たるようなヘッダの取得って無理なのかな。
自前でmod_rewriteとかにほしいヘッダ分指定するしかない?
0309nobodyさん2011/08/01(月) 23:01:26.47ID:???
304です。

まだ解決できてないのですが、

http://pastebin.com/zSkXdCQq

どなたか教えてもらえなでしょうか?

0310nobodyさん2011/08/03(水) 03:41:29.54ID:???
まず、自前のメールサーバならうまくいくの?
うまくいかないのに変なトラフィック送りまくるのはやめたほうがいいかと。
0311nobodyさん2011/08/03(水) 03:44:39.16ID:???
あと、addToがなんか変じゃない?それでも大丈夫なのかな
0312nobodyさん2011/08/03(水) 09:17:59.15ID:???
>>310
>>311
お返事ありがとうございます。
304です。

addTo()のとこなんですが、
http://d.hatena.ne.jp/tomoya/20100804/1280900579
の中段付近の「555 5.5.2 Syntax error というエラー。」というとこに"<" ">" で括らないいけないという趣旨を見つけたのでこのようにしました。

以前はこのコードで正しく送信できていたのに突然送信エラーが出て原因が解決できずにいます。

0313nobodyさん2011/08/03(水) 09:19:36.33ID:???
>>311
わざわざくっつけてる < > のことなら
ZendFramework が御丁寧に取り除いてくれるから大丈夫みたいだよ。
0314nobodyさん2011/08/03(水) 21:05:17.49ID:jbZJg+O3
Pluginを作ろうとしてるんですが、イベントメソッドの
routeShutdown() と dispatchLoopShutdown() と postDispatch()はどう違うんでしょうか?
マニュアルも読んだんですがちょっとピンと来ません

ルーティングからディスパッチ・アプリケーション実行の流れと上記メソッドの解釈は以下であってますか?
 ルーティング:利用するモジュール、コントローラ、アクション、変数の解釈と決定をする
 → routeShutdown()はこの処理の終了を捕まえる
 ディスパッチ:その決定(ルール)通りに各ファイルを実行して画面出力する(hogeContoller.phpとか)
 → dispatchLoopShutdown()はこの処理の終了を捕まえる
 それが終わったら、ディスパッチ終了ってことになる
 → postDispatch()はこの処理の終了を捕まえる


最終的に何がしたいかって言うと、エラーコントローラをエラー発生時のモジュールに属するものを使わせたいんです。
なので、
1)エラーが発生する
2)その時のモジュール($module)を捕まえる
3)そのモジュールを$plugin->setErrorHandlerModule($module);としてエラーハンドラに当てはめる
って処理を実行できるプラグインが必要で、そのプラグインを実行するイベントメソッドは
上記のrouteShutdown() と dispatchLoopShutdown() と postDispatch()のどれが良いのか相談したいです
結論的には、試しにやってみたらpostDispatch()で上手くいってるんですが、
参考にしたオリジナルのプラグインだとrouteShutdown()なんですよね…
http://stackoverflow.com/questions/3013321/set-a-different-errorhandler-depending-on-module-zend-framework
0315nobodyさん2011/08/03(水) 22:47:07.09ID:???
>>312,313
変数 $fromName の中身をローマ字だけに変えてみたらどう?
addTo とかは、パラメータからいくつかの記号(不等号含む)を除去したあと、
ヘッダ生成時に、名前の有り無しに応じて不等号をメールアドレスに付加するけど
記号を除去する際に、マルチバイトを考慮していないので、そこでおかしくなっている可能性はある。

ちなみに Zend Framework のコンポーネントのコードでは mbstring エクステンションはできるだけ使ってはいけないという掟があり、
開発者にマルチバイト圏の人が多数入らない限り覆すのは無理。
半永久的に、名前にはローマ字使用を推奨。
0316nobodyさん2011/08/06(土) 18:05:07.83ID:???
zend_dbでtableをflushするにはどうすればいいですか?

0317nobodyさん2011/08/06(土) 23:41:59.34ID:???
312,313です。

あちゃー・・・・
エラーの原因は送信先メールアドレスが正しく渡されていませんでした・・・・。

お返事いただいた方、おさわがせしました。
0318nobodyさん2011/08/06(土) 23:48:35.16ID:???
はぁ?
0319nobodyさん2011/08/06(土) 23:49:14.36ID:???
何か言うことがあるだろ?
0320nobodyさん2011/08/06(土) 23:49:22.13ID:???
へぇ
0321nobodyさん2011/08/06(土) 23:51:01.42ID:???
ィヒ

0322nobodyさん2011/08/06(土) 23:52:19.79ID:???
>>319

お礼です。
これどうぞ!!!!!!!


http://www.exotiki.net/mjo/file/data/mai0717.jpg

0323nobodyさん2011/08/07(日) 00:12:02.06ID:???
>>319

間違えました。
こっちです!!!!!!

http://www.nicovideo.jp/watch/sm10175056

0324nobodyさん2011/08/08(月) 17:13:27.59ID:???
http://img.ak.impact-ad.jp/ic/yl/2011/08/yomiuri_news_maka_24-fda99453618cda179b3bda3cc8766ae532b90814.gif
0325nobodyさん2011/08/13(土) 16:32:41.44ID:???
ZendDBTableでCREAT FUNCTION でストアド関数を作ってそれを使う方法を御存知でしたら教えて下さい
具体的には
http://sushiduy.plesk3.freepgs.com/levenshtein.sql
この関数(文字列1が文字列2とどれだけ似ているかの値(リーベンシュタイン距離)を返す)を使いたいです
0326nobodyさん2011/08/13(土) 17:46:37.17ID:???
すいません自己解決しました
一応どうやったか書いておきます
クエリーかmyphpadminで>>325のストアド関数を登録して
コードでは
$select->where(" levenshtein_ratio(name, ? ) > 50",$str)
みたいに書いたら動きました
0327nobodyさん2011/08/13(土) 19:23:43.27ID:???
ZFぜんぜん関係ないね
0328nobodyさん2011/08/15(月) 00:09:29.74ID:???
>>327

0329nobodyさん2011/08/15(月) 00:15:16.24ID:???
>>328
0330nobodyさん2011/08/16(火) 16:20:51.47ID:jcHZicfg
質問なんですが、ルーティングで
http://module.hogehoge.com/ctrl/act/param1...
って感じにサブドメインにモジュール名を指定するパターンがありますが、
あれを使うと他のモジュールに移動する度にhttp://からの絶対パス指定しなきゃ
ダメなんですよね?

httpからのリンクさせることで、何かデメリットってありますか?
デメリットていうのは、zendの機能的なデメリットじゃなくてサイト運営上の
デメリットも含めてってことですが…
0331nobodyさん2011/08/17(水) 22:08:04.43ID:???
テスト環境を用意するために
環境に応じた絶対パスのリンクを生成する関数を作らないといけないかな。
デザイナーが対応できなくてトラブルの元になるかも。
0332nobodyさん2011/08/20(土) 01:50:03.15ID:???
Windows7とXamppの環境でZF 1.11を使っています
既存のコードが全てUTF-8で書かれたPC用サイトを携帯に対応させる作業をしています
最終的に出力される文字コードをUTF-8からSjisにするために以下のようなフィルターを書きました
class Zend_View_Filter_ConvertToSjis
{
public function filter($str)
{
return mb_convert_encoding($str, "Shift_JIS", "UTF-8");
}
}
これをコントローラー内で$this->view->addFilter('ConvertToSjis');と描いてフィルターに追加します
ビュースクリプトは以下のように記述しています
<?php echo $this->partial('mobile/header.phtml'); ?>
いんでっくす
<?php echo $this->partial('mobile/footer.phtml'); ?>

この状態で実行すると「いんでっくす」自体はSjisに変換されて出力されますが、header.phtml内は文字化けしたままです。
試しにfilter関数内でecho "ok";と記述してみると3回OKと表示されます。
コントローラー内のthis->view->addFilter('ConvertToSjis');を消して
header.phtml内で$this->addFilter('ConvertToSjis');と記述するとheader.phtml内の内容はきちんとSjisに変換され、「いんでっくす」は文字化けします
つまりpartialする度にフィルターが呼び出される事が問題のようなのですが、
これを防ぐ方法がわかりません。
何方か一回だけフィルターをかける方法か、代替案をご存知でしたら教えて下さい。
よろしくお願いします。
0333nobodyさん2011/08/20(土) 21:32:56.01ID:???
ZFぜんぜん関係ないね
0334nobodyさん2011/08/23(火) 00:38:59.46ID:???
>>331
ZFに限らず、一般的にはベースURLを取得する関数や変数を用意しておくものだよ・・・。

>>332
mb_detect_encodingもかまして、$strがSJIS以外の場合だけ変換するようにしてみな。
ViewよりResponse側でフィルタかます方が賢い気もするが。
0335nobodyさん2011/08/24(水) 01:50:04.19ID:???
>>334
貴重なヒントありがとうございます!
ZendResponseについて調べてたら
答えそのものを見つけました
http://slumbers99.blogspot.com/2010/09/zendframwork.html
ほぼこのページのまま、
initResponse内でモジュール名が”mobile”以外の時はreturnするようにして
今のところ問題なく動いています。
ありがとうございました。
0336nobodyさん2011/09/06(火) 18:10:56.40ID:???
Zend_Db_Table_Abstractのupdate()メソッドのSQLを見たいのですがどうすればいいですか?

0337nobodyさん2011/09/07(水) 19:05:51.13ID:qU8tqwKM
> 336

Zend_Db_Profilerを使う:
(ttp://framework.zend.com/manual/ja/zend.db.profiler.html)
もしくは、Zend_Db_Table_Abstract#updateメソッドの処理をみて、コアのコードに直接var_dump($sql)とか、しちゃう

0338nobodyさん2011/09/08(木) 10:34:14.61ID:???
>>337
トンクス
0339nobodyさん2011/09/19(月) 16:13:10.61ID:???
Zend_Testってのに興味があるのですが、これはどんなMVC構造でも機能するのでしょうか?
それともZend_Toolとかで指定のディレクトリ構造になっていないと動作しないものなのでしょうか?

皆さんはテスト環境をどのようにお作りになっていますでしょうか?
0340nobodyさん2011/09/24(土) 20:34:28.12ID:???
ZendFrameworkのCMSを見ると殆どがZend_Applicationを使用しています。
自分で当コンポーネントを調たのですがいまいち活用法、構造が分かりません。
フロントコントローラのindex.phpではなく、Bootstrap->run()により、install.php又はbootstrap.phpに記述された設定内容をメインに全体に適用しているのは分かりました。
オートローダーやルーターなど。
しかし、それ以外の利用する意図が分かりません。
これはどのような意図で使用したり、どんなメリットがあるのでしょうか?

公開ファイルindex.phpのサイズを小さくする利点はありそうですが、オートローダーなどはその時表示されるページ上では必要ないものまで呼ばれ、require_once()を個別に呼ぶよりもオーバーヘッドがありそうな気もするのですが。
0341nobodyさん2011/09/25(日) 21:01:29.52ID:???
>340

Zend_Applicationのメリットについては以下が参考になると思う:
- http://d.hatena.ne.jp/noopable/20090412/1239484575

Zend_Applicationは あくまでブートストラップとリソースをどういう単位で初期化し処理するかを決定するための平均的な解決方法のためのグルーオブジェクトなので、
これが気に入らなければ(自分のアプリにとって良い方法)、自分で初期化処理を書いてディスパッチさせれば良いだけです。

実際ほとんどのプロジェクトはindex.phpで初期化+Zend_Controller_FrontのMVCによるディスパッチで事足りると思う。
zf.phpの吐き出すスケルトンがZend_Applicationをベースにしているからこれが広まったのかも。
以前(ZF.1.1ぐらいのとき)は自分でイニシャライズの為のプラグインをFrontControllerに登録していたわけだし。

俺は複数アプリを単一ディレクトリで管理したり、設定による規約を構築したり、他社モジュールを簡単に結合したいから、Zend_Applicationを使っているって感じです。

>ZendFrameworkのCMSを見ると殆どがZend_Applicationを使用しています。
>自分で当コンポーネントを調たのですがいまいち活用法、構造が分かりません。

LiveCommerceというECサイトのオープンソースが参考になるかも知れない。

>オートローダーなどはその時表示されるページ上では必要ないものまで呼ばれ、
>require_once()を個別に呼ぶよりもオーバーヘッドがありそうな気もするのですが。

んーっとどうなんでしょうね、
ちゃんと測ったことないけど、あんまり変わんないような気がしないでもない。
0342nobodyさん2011/09/29(木) 11:25:34.71ID:???
Zend_Db_Table_Abstract->select()->from()で内部joinで複数のテーブルからselectしたい場合どうすればいいでしょうか?

from(
  array( 'tableA' => 'A', 'tableB' => 'B', 'tableC' => 'C' ),
  array( ほにゃらら ) 
)
とやってもだめでした。

0343nobodyさん2011/09/29(木) 14:06:33.80ID:???
>>342
http://framework.zend.com/manual/ja/zend.db.select.html
0344nobodyさん2011/09/29(木) 14:43:38.37ID:???
>>343
http://www.di-ve.jp/image/category_description/data/in081219_3.jpg

0345nobodyさん2011/09/29(木) 16:16:06.77ID:???
>>342
$table
->select()
->from("table_a")
->joinLeft("table_b", "table_a.id = table_b.id")
->joinLeft("table_c", "table_a.id = table_c.id");
0346nobodyさん2011/09/30(金) 08:27:43.23ID:???
あとjoinしたテーブルのフィールドは必要最低限を
出来るだけ列挙した方が良い。プレフィックスがつかずに
あがってくるから喧騒配列内で同名のフィールドは
ガンガン上書きされる。
0347nobodyさん2011/09/30(金) 08:28:31.59ID:???
喧騒配列 → 連想配列
0348nobodyさん2011/09/30(金) 21:06:03.55ID:???
FETCH MODE変えてPrefix付きで取得とか出来たらええのにね。
0349nobodyさん2011/10/05(水) 13:06:02.61ID:???
ZendToolで作成したプロジェクト、そのままで普通に動きます?
ZF1.11.0でlibraryにZendコンポーネントのシンボリックリンクは張ったのですが、/public/error/errorなど、/public/index/index以外のURIに行くと全部NotFoundになるのですが
勿論moduleやcontrollerとかは全部作成しています
デフォルト以外で何か設定することがあるのでしょうか?
0350nobodyさん2011/10/06(木) 22:55:25.82ID:???
mod_rewriteの設定ができてないんじゃないの
0351nobodyさん2011/10/07(金) 08:32:27.06ID:???
すでに設定済みかもしれないが、デフォだとAPPLICATION_ENVがproductionになるので、htaccessとかで開発モードにしてあげるといいかも
0352nobodyさん2011/10/07(金) 14:20:12.80ID:???
paginatorをちょっと利用してみたのですが、なかなかだと思いました。
これって、2chのような最新50とか前100とかできないですよね?
03533522011/10/07(金) 14:22:04.64ID:???
DbSelectを利用しています。2chのような最新50
前次ってこれは自分で作らないと難しいですよね?
0354nobodyさん2011/10/07(金) 20:13:15.45ID:AMyCTNX/
皆さんの中でSmarty3、ZF1.11系を連携して上手くいっている方いますでしょうか?
特にZend_Applicationの_initView()でなのですが、自分はViewRenderer.phpの警告やら、パスを認識しないやらで
全然ダメなのですが・・・
0355nobodyさん2011/10/08(土) 00:06:49.44ID:???
>>354
Zend_ApplicationとZend_Viewは使わず、
Controller側で必要なタイミングでSmartyを読み込むようにしてるわ。

特に警告も不具合もでてないよ。
0356nobodyさん2011/10/09(日) 03:49:47.95ID:XVn6S9+Z
横からすいません。
ZFでZend_View使わずにSmarty等のテンプレートエンジンを使うメリットってなんですか?
PHPコードが分からないデザイナ向けと言っても
Smartyの独自タグを理解する方が大変な気がしますがそうでもないんですかね?
0357nobodyさん2011/10/09(日) 04:44:04.34ID:???
以前からsmartyで運用した経験が社内にある場合、
Smartyを使う方がコストが安いかもしれない
誰もsmarty使った事ないのにzfでsmartyとかかなり無駄が多いと思うな
0358nobodyさん2011/10/09(日) 17:58:38.36ID:???
ZF導入時の学習コストを減らすために、Viewは既存のSmartyを採用した。
後々Zend_Viewも検討してみたが、乗り換えるメリットが見つからなかった。
(同等の機能はSmartyで実装できていた)

他社と組む場合にSmartyでやりますの一言で意思疎通出来るのも楽だし、
テンプレートエンジンが切り分けられていれば、
デザイナのレベルを考慮せず別フレームワークを試せるのもステキ。

>>356
>PHPコードが分からないデザイナ向けと言っても
>Smartyの独自タグを理解する方が大変な気がしますがそうでもないんですかね?
PHPコードがかけても、Zend_Viewの知識が無いとテンプレート組めない。
PHPコードがかけてしまう為、人によってコード品質がバラつくし、システム側にも影響がでる。

Smartyはタグの簡略化と、セキュリティのサンドボックス化がメリットかな。
上にも書いたように、フレームワークの構文に依存しないってのもでかい。
0359nobodyさん2011/10/09(日) 19:13:52.38ID:s8jfJMra
ZendFramework1.11.11とSmarty3.0.9をZFのマニュアル通りに連携させたのですが、
$this->view->foo = 'hoge';
や
$this->view->assign('foo', 'hoge');
等をAction内に記述し、テンプレート内で
{$foo}とすれば'hoge'が出力されます
{foreach $var as $valur}等も使用できます
しかし、{html_radios}等が
'Invalid controller specified (error)'というエラーで
/Controller/Plugin/Broker.php内などで生じるようです
どのようにすればいいのでしょうか?
また、ZFと連携した際にこれらのSmartyメソッドは使用できなくなるのでしょうか?
0360nobodyさん2011/10/09(日) 20:40:24.82ID:???
>>359
それは多分、

・Smartyは正常に動いている
・Smartyの構文にミスがあり、PHPエラーが発生している
・ZendFWがエラーを感知して、ErrorControllerを呼ぼうとしている
・しかしErrorControllerが無い。

という状況だと思う。

エラーハンドラプラグインを切るか、
ErrorControllerを作ってエラー情報をdumpするか、
すればいいよ。

0361nobodyさん2011/10/11(火) 00:02:22.91ID:???
ていうか、キョウビSmartyタグとかちょっとしたPHPサイトくらい
書けないと、少々の腕前くらいのデザイナじゃおよびじゃないだろ。
0362nobodyさん2011/10/11(火) 21:48:09.53ID:???
ZendFrameworkを少し使ってみて思うのですが、/module/controller/actionというURIの構造は分かるのですが、
もう少し階層を深くするという場合にはどのようにすればいいのでしょうか?
例えば/module/controller/action/user/role/adminとかいう風にする場合です
ルータ設定を駆使すればいいのかもしれませんが、ちょっと自分にはどのようにして実装すればいいのか見当がつきません
0363nobodyさん2011/10/12(水) 01:06:01.09ID:???
ルータを設定してuser以下がactionのパラメータとして渡るようにすればいい
>>301-302や↓も参考に。
http://codezine.jp/article/detail/2226
0364nobodyさん2011/10/14(金) 17:45:34.30ID:+/AP5o7r
version1.11.10を使っていて、これまで正常に動いていたのに突然エラーがでるようになりました
簡単に言うと、session_start()するとPDOエラーが発生しているようです

エラーの詳細は以下の通りです
PHP Fatal error: Uncaught exception 'PDOException' with message 'You cannot serialize or unserialize PDOStatement
instances' in /usr/lib/php/ZendFramework/library/Zend/Session.php:469\nStack trace:\n#0 [internal function]:
PDOStatement->__wakeup()\n#1 /usr/lib/php/ZendFramework/library/Zend/Session.php(469): session_start()\n#2
/usr/lib/php/ZendFramework/library/Zend/Session/Namespace.php(143): Zend_Session::start(true)\n#3
/var/www/application/plugin/AuthPlugin.class.php(32): Zend_Session_Namespace->__construct('admin_myApp')\n#4
/var/www/html/index.php(20): AuthPlugin->__construct()\n#5 {main}\n thrown in /usr/lib/php/ZendFramework/
library/Zend/Session.php on line 469

何が原因なんでしょうか?
処理の流れとしてindex.php(フロントコントローラ)内でAuthPlugin(認証状況チェックのプラグイン)を定義していて
そのAuthPluginの中で new Zend_Session_Namespace('admin');してあり、そこから
Session.php(469行目)のsession_start()のエラーにつながってるようです
念のためテストとしてindex.phpの中で直接session_start();しても同様のエラーがでました

ググっても有用な記事が見つからなかったのですが、どのように考えたらいいんでしょうか?
ご意見よろしくお願いします
0365nobodyさん2011/10/14(金) 23:41:33.81ID:???
ZFでMVCとか大規模じゃ厳しいな
0366nobodyさん2011/10/14(金) 23:58:11.98ID:???
>>364
You cannot serialize or unserialize PDOStatement
instances

って書いてあるから、
sessionデータの中にPDOStatementが入っちゃっていて、
開始時にそれを復元出来ずにエラーになってるんじゃね?

一度セッションデータを破棄して、まっさらな状態で試してみ。
0367nobodyさん2011/10/15(土) 02:18:06.69ID:pl58b8lQ
フジテレビデモ
花王デモ
要チェック
0368nobodyさん2011/10/15(土) 11:18:16.97ID:???
>>365
当然だろ。LLなんて結局インタプリタだから規模が大きくなればなるほど
適切に事前読み込み量調整してやんないと遺憾しな。
それに潜在バグ埋もれまくり。

まぁRoRとも一定の距離を置いてるから JavaっぽいMVCって
こんなですよっつー紹介サイトにはちょうどいいな。
0369nobodyさん2011/10/15(土) 15:19:30.63ID:???
そもそもphpが...
0370nobodyさん2011/10/15(土) 15:29:23.41ID:???
>>366
ありがとう、解決しました
0371nobodyさん2011/10/15(土) 17:23:03.47ID:???
質問させてください。
Zend_Application使用下でログを取る際に、エラーを発生させたページも書き残したいと思いました。
そこでBootstrap.phpの_initLog()にてZend_Log_Writer_Dbを使いsetEventItem()の第2引数に$_SERVER['REMOTEADDR']を入れたら、~/public/index.phpしか表示されません。
では$_SERVER['HTTP_REFERER']はとなると勿論そのページを直接開くとNULLでダメです。
0372nobodyさん2011/10/15(土) 17:26:16.10ID:???
$this->bootstrap('FrontController');
$front = $this->getResource('FrontController');
$req = $front->getRequest();
$current = $req->getModuleName().'/'.$req->getControllerName().'/'.$req->getActionName();
としてもダメでした。
DBログに現在のURI、又はカラム別にaction、controller等を入れるにはどのようにすればいいのでしょうか?
0373nobodyさん2011/10/15(土) 20:03:11.50ID:???
$_SERVER['REQUEST_URI']でいいんじゃなイカ
0374nobodyさん2011/10/16(日) 11:26:50.99ID:TG2KkEB6
Zend_sessionで名前空間($sess_ns)を作って、その後その名前空間中で設定した
複数のセッション($sess_ns->aaa, $sess_ns->bbb, …)をまとめてクリアしたいとき
名前空間ごと削除すればOKなんですよね?
unset($sess_ns); で良いんでしょうか?
■ このスレッドは過去ログ倉庫に格納されています