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

Zend Framework Part3

レス数が1000を超えています。これ以上書き込みはできません。
0001nobodyさん2009/04/10(金) 08:35:00ID:???
公式
http://framework.zend.com/

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

(有力翻訳者のm-takagiさんのver)
http://www.m-takagi.org/docs/php/zend/

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

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

前のスレッド Zend Framework Part2
http://pc11.2ch.net/test/read.cgi/php/1204726884/
0951nobodyさん2010/02/04(木) 13:21:23ID:???
>>950
ありがとう!
試してみる
0952nobodyさん2010/02/05(金) 22:01:54ID:uF4U6XQX
zend FWを使っていて、Pearのpagerも併用しているんですがpagerのリンクへの値渡しが上手くいきません。

検索ページでgetでのクエリを実行すると
localhost/search/index?param1=val1¶m2=val2…
のurlで検索結果が返されますが、このパラメータを分解して、
pagerのページリンク(よくある [1][2][3]… ってやつ)には
localhost/search/index/param1/val1/param2/val2…?page=2
という形で渡すようにしました。
が、このリンクを踏んで2ページ目に行っても、正しい2ページ目の内容を返してくれません。
パラメータを全く無視した、「条件なし」の検索結果が返されてしまいます。
※検索クエリ直後の1ページ目の時は正しい結果を返します。
何が原因なんでしょうか?

続きます
0953nobodyさん2010/02/05(金) 22:03:03ID:uF4U6XQX
続きです

1ページ目、2ページ目の違いとして、
【1ページ目】
URL)http://localhost/search/index?p=&j=&ws[]=1&ws[]=4&wf=1
パラメータのdump)
array(6) { ["controller"]=> string(6) "search" ["action"]=> string(5) "index" ["p"]=> string(0) "" ["j"]=> string(0) "" ["ws"]=> array(2) { [0]=> string(1) "1" [1]=> string(1) "4" } ["wf"]=> string(1) "1" }

【2ページ目】
URL)http://localhost/search/index/p//j//ws/1/ws/4/wf/1/?page=2
パラメータのdump)
array(7) { ["index"]=> string(1) "p" [""]=> string(1) "j" [1]=> string(2) "ws" [4]=> string(2) "wf" ["controller"]=> string(6) "search" ["action"]=> string(5) "index" ["page"]=> string(1) "2" }

パラメータの解析は以下の手順でやっています
 $params = $this->getRequest()->getParams();
 var_dump($params);

また、ルーティングは以下の通りです
;searchアクション
routes.search.route = "/search/*"
routes.search.defaults.controller = "search"
routes.search.defaults.action = "index"
routes.search.type = "Zend_Controller_Router_Route"

どなたか宜しくお願いします。長くなりすみません。
zendFW1.8.1で動かしています
0954nobodyさん2010/02/05(金) 22:42:18ID:???
Zend_Rest_Clientで質問なのですが、タイムアウトが10秒の固定で
変更が出来なさそうなので困っています。
クラスを派生させてHTTPを叩く周りに手を入れようとも思ったので
すがZendのコードを見ても上手い具合にHTTP周りはprivateやfinal
に守られていて手を出せなさそうです。

もしタイムアウト時間を変更する裏技や、代わりに使えそうなRest
クライアントのライブラリがあれば教えていただけないでしょうか。
海外の学術機関で共同開発するコードで使う必要があるので英語で
ドキュメンテーションされていて継続的にメンテナンスされている
「定番」みたいなライブラリだと大変助かります。

PHP界隈は全くの初心者なので、いわゆる「定番」の類に関しては
殆ど知識がありません。何か良い情報があればよろしくお願いします。
0955952,9532010/02/06(土) 05:29:12ID:???
自己解決しました
0956nobodyさん2010/02/06(土) 05:37:12ID:???
どうやって解決したのか書けよせめて
0957952,9532010/02/06(土) 06:25:31ID:???
>>956
すみません、クダ質すぎて不要な情報かと思ったもので…

indexアクションをデフォルトとしてルーティングで設定してるのに、
検索実行時のurlが/localhost/search/index/var1/val1…となってるのが問題でした
indexがパラメータとして解釈されていました
formのactionを "/search/index" でなく、"/search" にして解決しました
0958nobodyさん2010/02/06(土) 07:00:11ID:ZjFfb0Vm
すみません、質問です
チェックボックスの値をZF型のURLで表現するにはどうしたらいいんでしょうか?

通常 ?cb[]=val1&cb[]=val2 とするものを
/cb[]/val1/cb[]/val2 としていいものでしょうか?
このURLを前提に、パラメータ解析のプログラムを書いたところエラーになりました

コードは
$params = $this->getRequest()->getParams();
if($params['cb'] || $params['cb[]']){
 if($params['cb'])$hobby = $params['cb'];
 if($params['cb[]'])$hobby = $params['cb[]'];
  foreach($hobby as $value){//ここがエラーの44行目
   if($value == 1){$this->view->cbChk1 = 'checked '; $cbParam.="/cb[]/1";}//該当チェックボックスにチェックし、パスもつくる
   if($value == 2){$this->view->cbChk2 = 'checked '; $cbParam.="/cb[]/2";}
   if($value == 3){$this->view->cbChk3 = 'checked '; $cbParam.="/cb[]/3";}
   if($value == 4){$this->view->cbChk4 = 'checked '; $cbParam.="/cb[]/4";}
  }
}

エラーは
1443 [Fri Feb 05 13:04:09 2010] [error] [client 192.168.0.25] PHP Warning: Invalid argument supplied
for foreach() in /var/www/application/controllers/SearchController.php on line 44
1446 [Fri Feb 05 13:04:09 2010] [error] [client 192.168.0.25] PHP Fatal error: Uncaught exception
'Zend_Controller_Dispatcher_Exception' with message 'Invalid controller specified (error)' in
/usr/lib/php/Zend/Controller/Dispatcher/Standard.php:241\nStack trace:\n#0 /usr/lib/php/Zend/Controller/Front.php(936):
Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http),
Object(Zend_Controller_Response_Http))\n#1 /var/www/html/index.php(32):
Zend_Controller_Front->dispatch()\n#2 {main}\n thrown in /usr/lib/php/Zend/Controller/Dispatcher/Standard..php on line 241
09599582010/02/06(土) 07:03:08ID:ZjFfb0Vm
Zend_formは使っていません。
centOS5.3で、zendFWのバージョンは1.8.1です。
よろしくお願いします
0960nobodyさん2010/02/06(土) 07:24:04ID:???
ZendってよりURLパラメタとPHPをやり直すべきでは
0961nobodyさん2010/02/06(土) 22:40:19ID:???
http://localhost/hoge/public/

上記のアドレスだとpublicが絡んでしまいます
こんな感じにしたいのですが
http://localhost/hoge/
どうすればいいですか?

助けてください
0962nobodyさん2010/02/06(土) 23:11:47ID:RDyP93EJ
apacheオススメだよ
0963nobodyさん2010/02/06(土) 23:24:37ID:???
え?index()じゃだめなの?
0964nobodyさん2010/02/07(日) 15:39:11ID:???
馬鹿にはウェブは無理。HTML描きに戻るしか。
0965nobodyさん2010/02/07(日) 15:50:17ID:cHUvBtME
基本的な質問でもうしわけないのですが、
下記のようなinsert文の登録値をエスケープする方法がわかりません。

 insert into XXXX(id,name,date)value(1,'aaaa','bbbb'),(2,'aaaa','bbbb'),(3,'aaaa','bbbb')


これではエラーになってしまいました・・・
$data = $db->quote("insert into XXXX(id,name,date)value(1, ?, ?)", array('aaaa','bbbb'));
$db->query($data);


すみませんが、お分かりになられる方がおられましたらご教授お願いします。

0966nobodyさん2010/02/07(日) 15:56:14ID:???
質問する前にエラー文読めよ
0967nobodyさん2010/02/07(日) 16:01:26ID:???
もしかして、quoteする意味、わかってないよね?
悪いこと言わないから、自分が何をわかってないか整理して
適切な場所で聞いた方がいいと思うな。

まぁ、一応ヒントだしとくと、$dataをechoすればわかることだと思うけど。
09689662010/02/07(日) 16:23:28ID:???
一応ヒントだしとくと、ZF関係ないと思う
0969nobodyさん2010/02/07(日) 16:28:27ID:???
それヒントじゃなくてズバリ
0970nobodyさん2010/02/07(日) 16:40:12ID:cHUvBtME
自己解決しました。
知りたかったことはzendのquoteメソッドの書式です。
説明の為に固定値で書きましたが、
'aaaa'や'bbbb'の部分はフォームの入力値が入ります。
PHPの関数でエスケープしてもよかったのですが、
zend使ってるシステムだったのでzendに統一したかったのです。

エラーメッセージは既に本番稼動しているシステムのため、
(php.iniの設定で)非表示にされており、確認できない状態です。
本番稼動中のためhtaccessでの設定上書きも好ましくないです。

0971nobodyさん2010/02/07(日) 18:21:21ID:???
>>970
どういうふうに解決したの?
それから、本番環境でもエラーはキャッチしとかないとダメなんじゃないの?
原因特定できないよ。
で、再現するために無駄な時間を費やすと。
0972nobodyさん2010/02/07(日) 19:05:16ID:???
>>970
queryとquoteを誤用してるソースが本番にあるわけがないよね

プライドが高すぎて、できないのかもしれないけど、
基礎を勉強したり、ドキュメントに目を通したり、
エラーメッセージを読んだり、そういうことをちゃんとやったほうがいい。

質問するときに、エラーメッセージを書かないとか、省略するとかそれもありえない。
他所でも同じ間違いをすることになりますよ。
0973nobodyさん2010/02/07(日) 19:56:52ID:???
ああmagic quartと勘違いしてるのか
なんでphp.iniとか言ってるのかと思った
0974nobodyさん2010/02/07(日) 19:57:49ID:???
Atokの変換使ったら違う単語出てきた
quoteね
0975nobodyさん2010/02/07(日) 20:14:08ID:???
ちげーよ
SQLに入れるデータをエスケープするのにZend_Dbのquoteを使おうとおもったけど、
ドキュメント読み間違えてZend_Db::queryの用法と勘違いしたって落ちだろ
0976nobodyさん2010/02/08(月) 11:31:42ID:???
ZF1.10で何か追加された機能ってある?
0977nobodyさん2010/02/08(月) 12:18:13ID:???
MVCってめんどくさく思えるんだけど、やっぱYahoo!とか大手サイトなんかはZFのような提供されているフレームワークではなく、独自に開発したMVC構造なんか使ってるんですかね?
0978nobodyさん2010/02/08(月) 12:18:58ID:???
>>976
Zend_Barcode_Hage
0979nobodyさん2010/02/08(月) 14:26:39ID:???
>>978
おおっ、マジですか?
新しい機能が追加されたんですね
それは使えそうな機能ですね
楽しみです








・・・ハイハイ
0980nobodyさん2010/02/08(月) 22:43:57ID:HuDyW4AI
zendFrameworkを使って、管理画面(フォームの入力画面)を作りたいと思います。
今まではPHPでスクラッチで 入力画面・確認画面・修正画面・登録画面を別々に作ってたんですが、
zendFWを使うにあたって、どんな構造にしたら効率的かご意見お願いします。

なるべくテンプレートファイルやアクションを少なくすることをテーマにして
自分で考えたのは以下の処理なんですが、おかしいでしょうか?

class TestController extends Zend_Controller_Action(){
/*以下がフォームの画面*/
public function testformAction(){
//最初に入力モードの確認
・モードが入力・修正の場合、フォームのテンプレートを共通で読み込む。
 ただし、入力モードのときは、前回登録済みデータの確認と取得→表示
 修正モードの時はセッションで確認画面から持ち込んだデータを取得→表示
・モードが確認の場合、確認用のテンプレートを読み込む、各バリデータ処理
・モードが登録の場合、登録処理
 処理が正常にすんだら、succeedActionにフォワード、失敗したらerrActionへ
 
}

succeedAction(){
//各アクション登録成功時の共通画面出力「○○情報を登録しました」
}
errAction(){
//各アクション登録成功時の共通画面出力「○○情報の登録失敗しました」
}

}
09819802010/02/08(月) 22:45:41ID:HuDyW4AI
【つづき】
いろんなサイトで調べてもZendFormの使い方なんかはあるんですが
一連の流れの解説が見当たらなかったので、自分の考えでいいのか不安です。
もっと効率的なやり方や、別の方法で実用されている方がいたら、ご意見もらえると助かります。
よろしくお願いします。

また、zendFormを使おうとは考えていないんですが、zendFormを使うことで
上記の処理の構造面でも効率化できたりするものでしょうか?
0982nobodyさん2010/02/08(月) 22:50:53ID:???
なんでアクションやテンプレート数を減らす必要があるの?
別に減らす必要なくね?
0983nobodyさん2010/02/08(月) 22:54:12ID:???
まずは今までの別々をそのままzendにしたほうがいいだろうね。
その次で、目標のテーマに再編。一気に遣ろうとすると失敗すると思う。ひとつづつ段階踏んで確実に。
あるいは先に目標のテーマにまとめておいて、次にzendにする。


生め。
09849802010/02/08(月) 23:02:20ID:HuDyW4AI
>>982-983
ありがとうございます
アクションを減らさなくてもいいということは
form1inputAction, form1confirmAction, form1rewriteAction, form1queryAction などと
処理ごとに別のアクションを持たせて明確に分けたほうがいいってことでしょうか?

自分としてはこの構造だと見やすい・わかりやすいっていうすごいメリットがある反面
登録フォームの数が増えたら フォームの数*4の膨大なactionができるので、コントローラ全体と
して見れば煩雑にならないかなぁって思うのですが。(慣れれば良いことだとは思いますが…)

>>982-983さんはこんな感じでやっていますか?
回答いただいて本当に感謝します。
0985nobodyさん2010/02/09(火) 06:06:11ID:???
増えた時点でまとめていけば?
増えてみないと仕様が固まらないだろうし。
0986nobodyさん2010/02/09(火) 10:56:12ID:???
>>985
わかりました、とりあえず一つ作って様子見てみます
ありがとうございました
0987nobodyさん2010/02/09(火) 14:39:28ID:???
俺、あんま英語できないんで、ValidateとかView_Helperなんかの未だ和訳されていない部分の日本語化を誰か偉い人、お願いします
0988nobodyさん2010/02/09(火) 14:59:47ID:???
言いだしっぺの法則
0989nobodyさん2010/02/09(火) 16:37:05ID:???
>>988
めちゃくちゃな和訳でいいなら俺がやってもいいけど?
多分嘘書きまくるよ?
0990nobodyさん2010/02/09(火) 16:44:42ID:???
ok
0991nobodyさん2010/02/09(火) 17:08:51ID:???
頼んだ。
違うとこがあれば誰かが突っ込めばいいし、日本語の叩き台があるだけでも断然とっつき易いはず。
0992nobodyさん2010/02/09(火) 17:11:28ID:???
本買えばいいじゃん
0993nobodyさん2010/02/09(火) 17:19:24ID:???
よぉ〜し、分かった!
俺やっちゃるけんね!!


>>992
いや、本に載ってるような基本的な部分は和訳あるんだけど、ある程度専門的(?)な部分はないんだよね
上記したように、Validateの部分(http://framework.zend.com/manual/ja/zend.validate.set.html)とか
0994nobodyさん2010/02/09(火) 20:03:59ID:???
プログラマならソース追った方が早いだろ
0995nobodyさん2010/02/09(火) 20:15:06ID:???
>>994
他人が書いたコードなんか読みたくねえんだよ!
0996nobodyさん2010/02/09(火) 20:45:28ID:???
>>995
でも他人が書いたコードは使うんだよな。ふーん。
0997nobodyさん2010/02/09(火) 22:15:32ID:???
自動車を運転するが中身はいじれないのと同じだコラ!
0998nobodyさん2010/02/09(火) 22:23:39ID:???
次スレ Zend Framework Part4
http://pc11.2ch.net/test/read.cgi/php/1265721684

>>993
次スレの1に掲載の翻訳状況参考に頑張って(^^)/
0999nobodyさん2010/02/09(火) 22:29:27ID:???
>>997
自動車学校である程度習うから知らない方が問題
1000nobodyさん2010/02/10(水) 05:37:52ID:uj21c1TP
1000ならperlの大勝利
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。