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

Zend Framework Part4

レス数が1000を超えています。これ以上書き込みはできません。
0001nobodyさん2010/02/09(火) 22:21:24ID:???
公式
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 Part3
http://pc11.2ch.net/test/read.cgi/php/1239320100/
0002nobodyさん2010/02/10(水) 01:40:17ID:???
専門的な記述のめちゃくちゃ和訳wktk
容赦なく突っ込んでやるからケツ貸せよ。
0003nobodyさん2010/02/10(水) 09:21:33ID:???
質問させて下さい
<?php
require_once 'Zend/Filter/Input.php';

$data = array( 'price' => '' );

$filters = array( '*' => 'StringTrim' );

$valids = array( 'price' => array(
Zend_Filter_Input::ALLOW_EMPTY => FALSE
//Zend_Filter_Input::ALLOW_EMPTY => TRUE,
//Zend_Filter_Input::PRESENCE => Zend_Filter_Input::PRESENCE_REQUIRED )
);

$options = array( Zend_Filter_Input::NOT_EMPTY_MESSAGE => '%field%は空文字列を許可しません。' );

$in = new Zend_Filter_Input($filters, $valids, $data, $options);
if($in->isValid()) {
print('検証に成功しました。<br />');
} else {
print_r($in->getInvalid()); //[A]
}
を実行すると、ブラウザには
Array ( [price] => Array ( [isEmpty] => priceは空文字列を許可しません。 ) ) 
と出ますが、 これを「priceは空文字列を許可しません。」、と表示させるにはどうすればいいのでしょうか?
[A]の部分を単純にprintやechoにしても「Array」、としかブラウザに表示されないものですから
0004nobodyさん2010/02/10(水) 09:35:15ID:???
>>3
ネタ乙
0005nobodyさん2010/02/10(水) 09:37:20ID:???
>>4
ごめんなさい、ネタじゃなくてマジで聞いています・・・すみません
0006nobodyさん2010/02/10(水) 09:51:06ID:???
foreach($in->getInvalid() as $invalid) foreach($invalid as $message) echo $message . "<br />\n";
0007nobodyさん2010/02/10(水) 10:35:10ID:???
>>6
ありがとうございました
0008nobodyさん2010/02/12(金) 22:56:41ID:Rluma8O9
Zend_Db_Table::fetchAll()はありますが、
Zend_Db_Table::fetchOne()はなぜないのでしょうか?
0009nobodyさん2010/02/12(金) 23:14:04ID:???
一人はみんなのために
みんなは一人のために
0010nobodyさん2010/02/12(金) 23:39:35ID:???
fetchAll()に対するのはfetchRow()じゃないのか
0011nobodyさん2010/02/12(金) 23:42:53ID:Rluma8O9
>>10
対の話ではないです。

Zend_Db::fetchOne()はありますが、
Zend_Db_Table::fetchOne()がなぜないのかなぁと。
0012nobodyさん2010/02/12(金) 23:45:14ID:???
Zend_Db::fetchOne()
ってあるの?
0013nobodyさん2010/02/13(土) 00:55:50ID:???
無いよ
0014nobodyさん2010/02/13(土) 00:56:54ID:???
Zend_Db_Tableってそもそもテーブル単位のデータ取得なんだからOneがあったらおかしい
PKだけ入ってるテーブルって事になる
0015nobodyさん2010/02/13(土) 00:58:51ID:vm0LKRH2
COUNT(*)での利用を想定していたのですが、無いようですね
0016nobodyさん2010/02/13(土) 07:00:36ID:???
Adapterにあるね
0017nobodyさん2010/02/13(土) 13:05:28ID:???
Zendやりたくて環境設定まで終えてググってHelloWorld表示まではできたんですが、
次にプログラマ向けリファレンスガイド見て覚えようと思い
まずZend_Controllerから見ていこうと思ったんですが、最初に最低限目を通して
おいた方がいいのはZend_何でしょうか?
0018nobodyさん2010/02/13(土) 13:53:45ID:???
HelloWorldはいいとして、
ググる前にquickstartはおすすめ
http://framework.zend.com/manual/ja/learning.quickstart.html
http://framework.zend.com/manual/ja/learning.html

コンポーネント別では、Zend_Service_*がいいと思う
0019nobodyさん2010/02/13(土) 17:01:12ID:vm0LKRH2
>>16
それで解決しました。

>>!4
Tableだって一つの返り値あります。
0020nobodyさん2010/02/13(土) 17:25:25ID:???
普通にZend_Db使えばいいのでは
0021nobodyさん2010/02/13(土) 17:35:28ID:vm0LKRH2
>>20
何でですか?
複数テーブルで運営してるので明らかに不便なんですけど。
0022nobodyさん2010/02/13(土) 17:38:13ID:???
使い方解ってないんじゃね
0023nobodyさん2010/02/13(土) 21:05:02ID:Vt3QKYJR
スゴい素人質問なんですが、
一つのサーバでzendFWを使う複数のサイトを作るとき(バーチャルドメインとかで)、
zendFWのパッケージ(?)はサイトの数分インストールしなくても良いのでしょうか?
FWのインストールは一度限りで、applicationディレクトリやルーティング、
テンプレートへのパス設定をそれぞれのサイトのフロントコントローラでやるだけで、
それぞれ別のサービス・ルールとして動いてくれるんでしょうか?

PHPだって2つも3つもインストールしないんだから一緒だろうとは思ったのですが
FWが初めてなので質問しました。すみませんが回答お願いします。
0024nobodyさん2010/02/13(土) 21:27:05ID:???
>>23
application単位で管理すればおk
それでだいたいうまく行く
0025nobodyさん2010/02/13(土) 21:33:22ID:???
Zend_Db_TableにOneないのってのは
PHPプログラマらしい質問だと思う
オブジェクト指向が解ってない
0026nobodyさん2010/02/13(土) 22:21:13ID:???
質問者じゃないけど、このスレって質問があったときに適当に突っかかってくるよね。
OneがないならAdapterって返答スレばいいのに>>25みたくオブジェクト指向的には〜みたいに言いがかりつけて。
使いたいように使えっていうのがZFの発想だからどう使おうが自由。

>>25
オブジェクト指向的な説明お願いします。
0027nobodyさん2010/02/13(土) 22:28:01ID:???
使いたいように使えっていうのがZFの発想

え?
0028nobodyさん2010/02/13(土) 22:29:37ID:???
Zend_Db_TableでfetchOneはないんですかって質問なんだから
オブジェクト指向のデータアクセスでどのデータが帰ってくるか解らないOneなんて無いんだから無いんだよって話だろ
帰ってくるのはオブジェクトかオブジェクトのリストなんだから
0029nobodyさん2010/02/13(土) 22:45:51ID:???
> ってくるのはオブジェクトかオブジェクトのリストなんだから
なぜ、そう言い切れるんだ?

Zend_Db_AdapterならfetchOneがあって、TableならfetchOneがない理由とは言えないよな。

テーブルゲートウエイパターンに忠実とかそういう話なら少しはわかるが、
オブジェクト指向のデータアクセス??そこんとこ詳しく教えてくれ。
0030nobodyさん2010/02/13(土) 22:47:34ID:???
>>27
http://framework.zend.com/manual/1.10/ja/introduction.overview.html
>我々はこれを "use-at-will (使いたいように使ってくれ)" 方式と呼んでいます。

え?
0031nobodyさん2010/02/13(土) 22:55:51ID:Vt3QKYJR
zend_Validaterを勉強しています。
バリデートクラスをnewで作るのって、検証対象の値ごとに作るしかないんでしょうか?
たとえば$val= new Zend_Vlidate_GreaterThanInt(n)を3つ<input type=text>の値に対して
それぞれやるとなると当然3つですよね?(制限値nが異なる場合)
3つならともかくフォーム全体で20個newするなんてことになるとすごく冗長というか
もっと要領のいいやり方はないのか気になってしまいます
みなさん、素直に大量にnewするようなセオリーに従ったつくりにしていますか?
何か効率化のアイディアがあったらアドバイスいただけると嬉しいです。よろしくお願いします。


>>24
ありがとうございました、自信がもてなかったので助かりました。
0032312010/02/13(土) 22:57:13ID:???
書き間違えました
>たとえば$val= new Zend_Vlidate_GreaterThanInt(n)
たとえば$val= new Zend_Vlidate_GreaterThan(n) でした
0033nobodyさん2010/02/13(土) 22:58:34ID:???
>>31
Zend_Formを使うといいよ
0034nobodyさん2010/02/13(土) 23:12:29ID:???
おれは大量にnewするのがいやだから、インスタンス管理して投入してる
Validaterだけじゃなくて、decoratorもfilterも
ベンチとったわけじゃないけどね。なんとなく。
0035nobodyさん2010/02/13(土) 23:19:28ID:???
>>29
0036312010/02/13(土) 23:50:18ID:???
>>33
Zend_Form、そんなに画期的なんですか?
ありがとうございます、調べてみます。

>>34
インスタンス管理ってどんなことをするんでしょうか?
かなり恥ずかしい質問かもしれないです、すみません

php インスタンス管理/php インスタンス共有/オブジェクト指向 インスタンス管理
などでググって調べたんですがはっきりわかるものが出てきませんでした。
zend以前の質問かもですね…
うーん、、
0037nobodyさん2010/02/13(土) 23:56:21ID:???
インスタンス管理って、別にたいしたことじゃない。
変数に保存しておいて、setValidaterするだけ
0038nobodyさん2010/02/14(日) 00:24:20ID:???
>>36
すごく画期的。Javaの入力フォームみたいな感じで作れる。
フォームの作成とバリデーションを一緒にやってくれる。
ただ、デフォルトだと決まったレイアウトになるからそこら辺がいやでなければ断然こっち。


やりたいことを書くとこんな感じ
$form = new Zend_Form();
$form->setAction('/path/to/script')->setMethod('post');

$int = $form->createElement('text', 'int');
$int->setRequired();
$int->addValidator('GreaterThan', false, n);

$form->addElement($int);
0039nobodyさん2010/02/14(日) 01:09:08ID:???
>>37
どうもありがとうございます。
最初に変数に入れておくって、
(例として、今、GreaterThan.phpを開いてみているんですが)

$g = new ZendValidate_GreaterThan()//ここでは値を入れない
$chkParamA = $g->setMin(10);
if(!chkParamA->isValid($paramA)){//エラー出力}
$chkParamB = $g->setMin(5);
if(!chkParamB->isValid($paramB)){//エラー出力}

こんな手順でされているということでしょうか?
setValidatorというメソッド?がマニュアル見ても見つけられなかったので
ぜんぜん変なこと聞いてるかもしれないです、すみません。
しつこくてすみません、お返事いただけると幸いです。
ただこのやり方だとnewが減らせるだけで行数の多さは大して変わらないですね…
しょうがないのかな


>>38
わざわざありがとうございます。
パラメータの種類や名前と一緒にバリデータルールまでまとめて定義できるんですね
確かに楽だしすごいなー
ただ、<input name="userName[]" type="text" />を任意の数だけループ出力したり
n個目だけCSSのクラスを適用するような処理には向いてなさそうですね。。
テーブルに組み込んだりのレイアウトも癖がありそうだし…
上手に使い分けできるようにならなきゃだめですね〜
難しいけどできるようになりたいな。。


お二人とも、本当にありがとうございます
0040nobodyさん2010/02/14(日) 09:47:20ID:???
あぁ、すまんtypo
Zend_Form関係のsetValidatorsを使う
必要なValidatorのセットを作っておいてFormとかElementに設定して使う

> n個目だけCSSのクラスを適用するような処理には向いてなさそうですね。。
めちゃめちゃ向いている。
そのためのZend_Form
0041nobodyさん2010/02/15(月) 13:14:36ID:???
Zendの書式で質問なんですけど、なんで字下げにタブ使っちゃダメなの?
ドキュメントに理由が書いてないのですごく引っかかります。
0042nobodyさん2010/02/15(月) 14:20:38ID:???
ドキュメントに書いていないことなんだよな。
で、他人の妄想を聞いてどうすんの?
0043nobodyさん2010/02/15(月) 15:04:28ID:???
妄想とか聞く気はないんですが、どこかに書いてあって見つけきれないだけかと思い
聞いてみました。
明確に書いてあることなのでそれなりの理由があると思ったんですがなにかおかしなこと聞いていますか?
0044nobodyさん2010/02/15(月) 15:11:15ID:???
コーディング規約があるプロジェクトに参加したことないのか
複数人で開発するときは、書き方が混ざったら読みづらくなるから
全員同じ書き方にあわせる
ただそれだけの話だ
0045nobodyさん2010/02/15(月) 15:14:02ID:???
>>44
このあたりとか、"タブ スペース"あたりでググるとそれ関連のがわんさかと。
http://blog.livedoor.jp/dankogai/archives/50475459.html

>>26じゃないけど、このスレは基本突っかかってくるからあんまり気にしない方がいいよ。
利用者がひねくれたフレームワークなのかもしれない。
0046452010/02/15(月) 15:15:26ID:???
>>45>>43宛で
0047nobodyさん2010/02/15(月) 15:15:47ID:???
>>43
PEARについて書いてあるけどたぶん理由は同じなので。
ttp://www.phppro.jp/phpmanual/pear/faq.tabs-vs-spaces.html

ZendはPEARの規約を引き継いだんだと思うけど
0048nobodyさん2010/02/15(月) 15:52:24ID:???
diffとったときに、スペースがタブになってると萎える
かといって、PHPの場合、テンプレ兼ねてるからタブだけガン無視も無理だし
0049nobodyさん2010/02/16(火) 03:49:53ID:iRRBilsA
一つの同じコントローラ中に
・queryAction
・finishAction
の二つのアクションがあります。

queryActionではデータベースへのquery登録処理(insert)がされていて、
それが成功したら
$this->_forward('finish'); と、finishAction(完了画面)に遷移させています。

が、遷移後の画面で画面をリロードすると、再度クエリしようとしてしまいます。
どうしたらいいでしょうか?
リロードしても何も起こらないようにしたいのですが。。
0050nobodyさん2010/02/16(火) 03:59:11ID:???
>>49
処理終了後はforwardじゃなくてredirect
0051nobodyさん2010/02/16(火) 05:19:42ID:???
>>49
PRG (POST-REDIRECT-GET) パターンが一般的かなぁ
他にはpostにチケットを入れといて、リロード時や2度押しを判別
0052nobodyさん2010/02/16(火) 12:16:10ID:???
フィルターを一部のコントローラーだけでなく、全体に適用したいのですが
それ用の処理関数はありますか?
0053nobodyさん2010/02/16(火) 15:12:42ID:iRRBilsA
現在zend_mailをつかってて、メール送信できないトラブルにはまっています。
それで、sendmailの設定などしていたらpostfixに切り替えたい気持ちになってきました。

zend_mailはpostfixに対応してるんでしょうか?
php.iniのsendmail_pathをpostfixのに変更すればいいのでしょうか?

linuxのメールソフトに関してはsendmailよりもpostfixやqmailのほうがメジャーだという
傾向のようなのに、マニュアルやzFW徹底入門などを見ると、ソフトの切り替えに関して
書いていないので困っています。

zendMailを利用されている方、標準のsendmailのままで使ってるんでしょうか?
ご意見もらえると嬉しいです。



>>50-51
ありがとうございます。たすかりました!
0054nobodyさん2010/02/16(火) 15:16:45ID:???
MTAなんて何使っても同じ
トヨタ車でもホンダ車でも目的地に着けるのと同じ
0055nobodyさん2010/02/16(火) 16:05:59ID:???
>>53
スレチだよ
0056nobodyさん2010/02/16(火) 18:42:14ID:???
>>54-55
ありがとうございました。
zendFWにかかわるのでスレチじゃないかと思ってましたが、すみません
0057nobodyさん2010/02/16(火) 19:04:48ID:???
別にいいよ。すみませんはいらない。
1. sendmailからpostfixへの切替方法
2. phpでsendmailではなくsmtpでメール送信する方法

それぞれどこに聞くといいかちょっと考えてみて

Zend_Controllerをいじっててトイレに行きたくなったんだけどトイレはどこ?
そのレベル
0058nobodyさん2010/02/16(火) 19:08:26ID:???
メール出来る様に設定すればいいだけだしな。
メール出来るならZFでも問題なく使える。
ZFからスパムメール送るなら規制されて当然w
0059nobodyさん2010/02/17(水) 02:08:15ID:QzZxEOBR
相談です。リダイレクト処理がうまくいきません

hogeController/indexAction/
hogeController/aaaAction/
hogeController/bbbAction/
という構造のコントローラがあります。
この中のaaaActionで
$this->_redirect('/hoge/bbb'); としてbbbアクションにリダイレクトさせてるんですが
どういうわけかbbbへのリダイレクトの結果indexActionの処理が実行されています
(アクションの中身は以下のとおりです。)
public function indexAction(){
 echo "indexAction";
}
public function aaaAction(){
 //ここの処理に成功したら以下のリダイレクト
 $this->_redirect('/hoge/bbb');
}
public function bbbAction(){
 echo "bbbAction";
}

ブラウザのURLを見ると localhost/hoge/bbb となっているのに
ブラウザの画面では 「bbbAction」ではなく「indexAction」 とindexActionの結果が出力されるのです。
どんな原因が考えられるでしょうか?
0060sage2010/02/17(水) 02:31:41ID:???
>208
returnを使ってください。
redirectだけではなくforwardも同様ですよ。

public function aaaAction(){
 //ここの処理に成功したら以下のリダイレクト
 return $this->_redirect('/hoge/bbb');
}

ちょうど素通りしましたのでご参考になれば。
0061nobodyさん2010/02/17(水) 03:38:19ID:???
>>60
こんな時間にありがとうございます
でも、そのreturnを冒頭に加える処理をしても結果は同じでした
そもそもなんでindexActionに転送するのか、
bbbActionの中に限らずredirect処理を実行してる場所なんて
どこにもないので困っています。
どんな原因が考えられるでしょうか?
0062612010/02/17(水) 10:06:25ID:???
自己解決しました
原因はredirectの動作には関係ありませんでした
routingでbbbアクション用のルート設定をしてなかったのが原因でした
indexが出力されるのは/hoge/bbbのbbbをパラメータと判定されてたからでした
お騒がせしてすみません、ありがとうございました
0063nobodyさん2010/02/18(木) 15:20:23ID:???
Manual英語の部分まだまだ沢山あるね
0064nobodyさん2010/02/18(木) 15:46:08ID:???
個人的にはPEARのマニュアルのいい所をZFには導入して欲しいと思う
0065nobodyさん2010/02/18(木) 16:34:46ID:???
http://www.live-commerce.com/
0066nobodyさん2010/02/19(金) 10:25:20ID:???
Zend_Cacheにgetってメソッドがあったようですが、コレはどうなったのでしょうか?
ZF徹底入門(バージョンは1.5のようです)のP455の一番下に書かれていたのですが、後ろのリファレンス集には書かれていません・・・
昔のマニュアルなどには$cache->get()みたいに書かれて使われていたみたいなのですが、最近のマニュアルには書かれていませんし、APIにも出てきません
0067nobodyさん2010/02/19(金) 12:35:08ID:???
その本のことは知らんけど、昔から test load save だったと思うよ。
なんかの間違いでは
0068nobodyさん2010/02/19(金) 14:06:08ID:???
過去のソース見ればええねん
0069nobodyさん2010/02/19(金) 14:28:05ID:vk4cE2Qg
>>66
Zenf_Registryと勘違いしてないか?
0070nobodyさん2010/02/19(金) 14:31:26ID:???
>>67
自分も急にgetメソッドとか書かれて「?」って感じでその本をくまなく見てみましたがZend_Cache内では見当たらず、マニュアル、APIと探しましたがありませんでした
Web上では少なかったですが見つけましたが、推奨メソッドなのか良く分からなくて
もしかしたらどっかのバージョンで廃止になったかな、とも思いましたがバージョンアップ情報には書かれていませんでした
このサイト(http://itpro.nikkeibp.co.jp/article/COLUMN/20060810/245681/?ST=lin-server&P=3)にはgetが書かれていましたが、0.1.5という化石のようなバージョンで参考になりませんでした
0071nobodyさん2010/02/19(金) 14:34:05ID:???
>>69
えっ?
Zend_Cacheのページですし、Outputフロントエンドの項目の説明文中に書かれています
Zenf_Registryはこのコード、MVC内では使用されていないようです
getメソッドと書かれているくせに、サンプルコードにはいっさいgetは入っておりません
0072712010/02/19(金) 14:36:38ID:???
Zenfではなく、Zend_Registryです
0073nobodyさん2010/02/19(金) 16:12:47ID:g43faW/Y
ZF徹底入門のTypoってことで
次の方どうぞ
0074nobodyさん2010/02/20(土) 00:54:29ID:???
http://framework.zend.com/svn/framework/standard/tags/release-0.9.0/library/Zend/Cache/Core.php
> THIS METHOD IS DEPRECATED : USE LOAD() INSTEAD (same syntax) !
> it will be removed in ZF 1.1 !
なんで1.0じゃないの。。
0075nobodyさん2010/02/20(土) 10:04:46ID:???
>>74
他のことが忙しくて、 1.0 には間に合わないと contributor が思ったからじゃないの?
0076nobodyさん2010/02/21(日) 18:19:24ID:X8UnhclP
質問です。
zend_validator使ってるんですが、NotEmptyバリデータで警告文を設定しても
標準の警告が出てしまいます
$val_loginPass_empty = new Zend_Validate_NotEmpty();
$val_loginPass_empty->setMessage('パスワードが未入力です。', Zend_Validate_NotEmpty::IS_EMPTY);
if(!$chain_loginPass->isValid($params['loginPass'])){
 foreach($chain_loginPass->getMessages() as $errMsg) $errMsgAry[] = $errMsg;
}

こんな処理で該当フォームを未入力で送信したところ、
 # パスワードは6文字以上で入力してください。(文字数制限のバリデータもこの上で書いてます)
 # ?? is an empty string
 # パスワードが未入力です。
と出力されるのです。
ちなみにpost値をdumpすると ["loginPass"]=> string(0) "" となります。
何が原因でしょうか? ??は ' らしいですがそんなのどこにも入れてないんですが…
他の箇所のNotEmptyでは設定した警告文以外でません。。
どなたかご意見よろしくお願いします。
0077nobodyさん2010/02/21(日) 19:14:38ID:???
>>76
インスタンスに関係性がない
0078nobodyさん2010/02/21(日) 20:42:22ID:???
>>76
コテハン付けてくれ
0079nobodyさん2010/02/21(日) 21:15:35ID:???
>>76
コテハンにすると質問に答えてもらいやすくなるよ。
0080nobodyさん2010/02/22(月) 11:06:23ID:???
Zend_Currencyを使うと、エラーが出るのですが、どう対処すればいいのでしょうか?
エラー内容は以下の通りです

Fatal error: Uncaught exception 'Zend_Currency_Exception' with message 'No region found within the locale 'ja'' in
C:\php\includes\Zend\Currency.php:277 Stack trace: #0 C:\php\includes\Zend\Currency.php(333): Zend_Currency->_checkParams(NULL,
'ja') #1 C:\php\includes\Zend\Currency.php(518): Zend_Currency->getShortName(NULL, 'ja') #2 C:\php\includes\Zend\Currency.php(99):
Zend_Currency->setLocale(NULL) #3 C:\Apache2.2\htdocs\Zend\currency\toCurrency.php(4): Zend_Currency->__construct() #4 {main}
thrown in C:\php\includes\Zend\Currency.php on line 277

自分には良く分かりませんでした
0081802010/02/22(月) 11:08:15ID:???
すみません、ZFのバージョンは1.9.6だったと思います
PHPは5.2.12です
0082802010/02/22(月) 11:25:50ID:???
連投すみません
今、バージョンによって駄目なのかと思い、最新版の1.10.1にしたのですが、今度も

Fatal error: Uncaught exception 'Zend_Currency_Exception' with message 'No region found within the locale 'ja'' in
C:\php\includes\Zend\Currency.php:548 Stack trace: #0 C:\php\includes\Zend\Currency.php(101): Zend_Currency->setLocale(NULL) #1
C:\Apache2.2\htdocs\Zend\currency\setFormat.php(4): Zend_Currency->__construct() #2 {main} thrown in
C:\php\includes\Zend\Currency.php on line 548


のようなエラーが出ました(ライン数は大きく変わっていますが)
Zend_Localeが影響してエラーが出るとか何かで読んだ気がするのですが、Zend_Translate、Zend_Date、Zend_Measureなどは普通に動作しておりました
0083nobodyさん2010/02/22(月) 12:20:57ID:???
今はjaにしてる?言語ならjaでいいけど、地域がわからないと通貨がわからないからね
ja_JPにしてみたらどう?
0084802010/02/22(月) 14:39:46ID:???
>>83
ありがとうございました
ja_JPにしたら出来ました
ご迷惑おかけしました
0085nobodyさん2010/02/22(月) 19:06:49ID:???
覚えることいっぱいあるなぁ
もう疲れたよ
0086nobodyさん2010/02/22(月) 20:11:47ID:???
いちいち覚えてないよ
必要になったら調べるだけ
0087nobodyさん2010/02/22(月) 20:29:21ID:???
確かに、ZFは他のFWと比べても色々と大変だよな
今コンポーネントっていくつあるんだっけ?
70あるかないかってとこかな?
0088haruna2010/02/23(火) 14:59:27ID:p7GWr9xn
ZendFramework徹底マスター(ソーテック社)のサンプルをダウンロードし、Apacheのhtdocs内に入れたのですがサーバが見つかりませんとなり、動作しません。
例えば、C:\Apache2.2\htdocs\ZF2\Chapter02-02内のHogeControllerのpiyoActionにアクセスしたいので、http://localhost/ZF2/Chapter02-02/Hoge/piyoのように記述しましたがエラーが出ました。
本書にはhttp://localhost/Hoge/piyoでアクセスしていますが、コレで実行しても案の定駄目でした。
この場合、どのようにURI記述すればアクセスできるのでしょうか?
フォルダ構成は以下の通りです。

Chapter02-02 --- html--index.php
|
---application
|---models
|---views
|---controllers
|---HogeController.php
|---ErrorController.php
0089nobodyさん2010/02/23(火) 15:14:19ID:???
おれも初心者で詳しくないが、ZFダウンロードしてきて展開してinclude_path通してrewrite設定してる?
0090nobodyさん2010/02/23(火) 15:36:27ID:???
> サーバが見つかりません

URIの前にlocalhostにアクセスできてないでしょ
0091882010/02/24(水) 09:18:28ID:???
まさかのYahoo!地域回線ダウンで一日ネットに繋げませんでした・・・
>>89-90
設定はおかしくないはずなのですが・・・
この前にZendFramework徹底入門をやって、しっかりとZFは動作していましたし
PHP、Apache設定はずっと使っていて何の問題も無いので大丈夫だと思います
ZFはパスの書き方がちょっと癖があるのでChapter02-02の部分が悪いのかと思ってフォルダ名をtestとかに変えても駄目でした
徹底入門のサンプルと同じhtdocsに入れているのですが、どうして出来ないのかと思いまして
サンプルのコードを色々と見てみたのですが、悪そうな部分もなく、パスも大丈夫だと思ったのですが・・・

>>88は知人にメールを送って書き込んでもらったのでちょっと線がずれているようですので書き直します
Chapter02-02 --- html--index.php
          |
          ---application
             |---models
             |---views
             |---controllers
                 |---HogeController.php
                 |---ErrorController.php

((index.php))
<?php
require_once 'Zend/Controller/Front.php';
$front = Zend_Controller_Front::run('../application/controllers');

((HogeController.php))
<?php
require_once 'Zend/Controller/Action.php';
class HogeController extends Zend_Controller_Action
{
public function piyoAction()
{ }
}
0092892010/02/24(水) 09:51:56ID:???
つまりhtdocs直下にChapter02-02を入れたわけね
htdocsがDocumentRootなわけね
で、RewriteBase設定は /Chapter02-02/html/ になってると

ここまでの設定はおかしくないはずと・・
0093nobodyさん2010/02/24(水) 09:52:00ID:???
> 設定はおかしくないはずなのですが・・・

じゃぁ、設定は変えなくていいね。
0094nobodyさん2010/02/24(水) 09:52:51ID:???
0095nobodyさん2010/02/24(水) 09:56:00ID:???
そのパス通りなら、'../application/controllers'は違うよな
0096892010/02/24(水) 09:58:17ID:???
違うか>>88見るとC:\Apache2.2\htdocs\ZF2\Chapter02-02
だからRewriteBaseは /ZF2/Chapter02-02/html/ になるかな
0097nobodyさん2010/02/24(水) 10:39:30ID:???
友達に頼んで書き込んでもらうほど匿名掲示板に期待されても
0098882010/02/24(水) 12:00:03ID:???
>>97
本書のサポートページがなくて、また、質問は受け付けていないようなのです・・・

>>皆さん
ありがとうございました
解決いたしました
確かに、RewriteBaseのパスを間違えていたようでした
ほんとごめんなさい
0099nobodyさん2010/02/24(水) 23:57:57ID:siRy84kx
質問させてください。
コントローラの読み込みがうまくいかないのですが何が原因でしょうか?
エラーは以下です。
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(35): Zend_Controller_Front->dispatch()\n
#2 {main}\n thrown in /usr/lib/php/Zend/Controller/Dispatcher/Standard.php on line 241, referer省略

コントローラ名が単純でなく、命名規則に反してるのか、あるいはルーティングがおかしいのかと思ったのですが
自分ではわかりませんでした。すみません、ご意見お願いします。
■URLは
http://localhost/admin-spot/
■コントローラ(/var/www/application/Controllers/AdminSpotController.php)
<?php
require_once 'Zend/Controller/Action.php';
class AdminSpotController extends Zend_Controller_Action {
public function init(){ }
puglic function indexAction(){}//何も書いてません
}
■viewスクリプト(/var/www/application/smarty/templates/default/admin-spot/index.tpl)
 中身はhtmlタグだけでできていて、smartyタグは入ってません(エラーの要素ないかなと。。)
■ルーティング
routes.adminSpot.route= "/admin-spot/*"
routes.adminSpot.defaults.controller= "AdminSpot"
routes.adminSpot.defaults.action= "index"
routes.adminSpot.type = "Zend_Controller_Rou

長くなってしまいすみません、よろしくお願いします。
0100nobodyさん2010/02/25(木) 00:09:52ID:???
ErrorControllerをちゃんと設置するか
もしくは、
$front->throwExceptions(true);
して、エラーの原因を探ってみて
0101992010/02/25(木) 00:27:05ID:nHRZ8Mu+
>>100
すばやいレスありがとうございます。
ルーティングの設定やコントローラ名・ファイル名などはあれで問題ないのでしょうか?
フロントコントローラの一番下に
$front->throwExceptions(true);
と追記しましたが、画面は真っ白のまま、エラーログも同じ変わりありませんでした
0102nobodyさん2010/02/25(木) 00:40:49ID:???
フロントコントローラーの1番下ってどういう意味かわからないけど、
Zend_Applicationを使ってるなら、
設定ファイルで↓のように書く
frontcontroller.throwexceptions = 1

正しく動いてないなら、なんか間違ってる。
設定とかファイル名なんて、全部見ないとわからないよね。
0103992010/02/25(木) 01:08:47ID:???
>>102
zend_applicationは使ってません。
フロントコントローラは以下のようにしましたが、おかしいでしょうか? 本当にたびたびすみません

require_once 'Zend/Controller/Action.php';
$front = Zend_Controller_Front::getInstance();
//ルーティング
require_once 'Zend/Config/Ini.php';
$config = new Zend_Config_Ini('myRoutes.ini', 'myApp');
$router = $front->getRouter();
$router->addConfig($config, 'routes');

/* 以下デフォルト */
$front->setControllerDirectory(APP.'/controllers');
$view = new Zend_View_Smarty();
$render = new Zend_Controller_Action_Helper_ViewRenderer($view);
$render ->setViewBasePathSpec(APP.'/smarty')
->setViewScriptPathSpec(':module/:controller/:action.:suffix')
->setViewScriptPathNoControllerSpec(':action.:suffix')
->setViewSuffix('tpl');
Zend_Controller_Action_HelperBroker::addHelper($render);

$front->dispatch();
$front->throwExceptions(true);


$front->dispatch();と$front->throwExceptions(true);を入れ替えても同じエラーが出ています
0104nobodyさん2010/02/25(木) 01:22:05ID:???
$front->setParam('noErrorHandler');
をdispatchより上に

で、問題がsmartyなのかrouteなのか、標準に戻して切り分けてみたら?
0105nobodyさん2010/02/25(木) 08:19:42ID:???
ここで徹底入門のサポートを求められてもねえ。

http://pc11.2ch.net/test/read.cgi/php/1266229386/
【PHP】下らねぇ質問はID出して書き込みやがれ 93
http://pc11.2ch.net/test/read.cgi/php/1257701535/
△▲ WebProg 初心者の質問 Part21 ▼▽
http://pc11.2ch.net/test/read.cgi/php/1167984858/
俺が初心者にPHPを伝授する
http://pc11.2ch.net/test/read.cgi/php/1169024172/
PHP相談室 1
http://pc11.2ch.net/test/read.cgi/php/1253912143/
【PHP】PHPフレームワーク総合スレ14
http://pc11.2ch.net/test/read.cgi/php/1158647441/
くだらない質問でもど偉そうに聞いていいスレ
http://pc11.2ch.net/test/read.cgi/php/1162858489/
【お題】PHP学習課題スレ【出せや】
http://pc11.2ch.net/test/read.cgi/php/1213919075/
PHP関連の書籍 第6版
http://pc11.2ch.net/test/read.cgi/php/1139746974/
中学生がPHPを習得するスレ
http://pc11.2ch.net/test/read.cgi/php/987560391/
初心的な質問なのですが・・・・
http://pc11.2ch.net/test/read.cgi/php/1131016915/ 【総合】 Webprog板質問雑談スレッド 1
http://pc11.2ch.net/test/read.cgi/php/1188135310/ こんにちは、PHPプロの方。教えてください。
http://pc11.2ch.net/test/read.cgi/php/1147830986/ 【PHP】Lvうpしたいので宿題ください
http://pc11.2ch.net/test/read.cgi/php/1168761226/ PHP上級者が集まるスレ
http://pc11.2ch.net/test/read.cgi/php/1062053369/ 【PHP】1が必死にPHPを勉強するスレ
http://pc11.2ch.net/test/read.cgi/php/996521284/ PHPを教えることになりました
http://pc11.2ch.net/test/read.cgi/php/1005203165/  PHP作成代行してくれるところ
0106nobodyさん2010/02/25(木) 14:55:31ID:???
ZendFrameworkwo使ってきて、基本的な事はおさえました
しかし、気がついたのですが、コントローラーとヴューは使用しているけれど、モデルってのを一度も使ってきませんでした
色んなサンプルでも上記の2つだけ利用して、モデルは空っぽでした
このmodelという機能は何に使うのでしょうか?
0107nobodyさん2010/02/25(木) 14:56:47ID:???
基本的なこと抑えられてないじゃねぇかw
0108nobodyさん2010/02/25(木) 15:02:04ID:???
なんか、うまいこと言えっていうネタだろ?
0109nobodyさん2010/02/25(木) 16:29:58ID:???
>>107-108
確かに(苦笑
表現が悪かったです
コンポーネントなどは理解したのですが、基本的な事をおさえたつもりでした・・・


すみません、マジで聞いております
このModelフォルダの中にはいったいどんなものを入れて使うのかが分かりません
ControllerとViewは分かったのですが、Modelの概念が見えてきませんでした
ビジネスロジック、処理とか書かれていますが自分には良く分かりませんでした
マニュアルや本などでもサンプルコードや説明に、特にModelの事が書かれていたような記憶も無くて・・・
0110nobodyさん2010/02/25(木) 16:32:38ID:???
>ヴュー
www
0111nobodyさん2010/02/25(木) 16:59:25ID:???
ビジネスロジックを検索すればいいじゃないか
0112nobodyさん2010/02/25(木) 17:46:33ID:???
>>109の言ってる事も分からなくはないな
俺の学習した本なんかもControllerとViewのコードしか書かれていなかったし、説明もほぼ皆無と言えるほど何も書かれていなかったし
マニュアルでもコンポーネントの学習がメインになるだろうから、サンプルにはModel部の事なんて書かれていないし
基本的にFrontControllerとActionControllerが重要視されて解説されてるし
ネットで「ZendFramework Model」なんかで上位部だけ調べてみたけど、あんま具体的なものはないね
0113nobodyさん2010/02/25(木) 17:47:41ID:???
ちょっと意味がわかんないんだけど

MVC知らんの?
0114nobodyさん2010/02/25(木) 18:17:10ID:???
例えるなら

アプリ全体=お前の人生
コントローラー=お前の思想
ウ゛ュー=お前の表現力
モデル=お前の脳みそ
0115nobodyさん2010/02/26(金) 01:26:22ID:???
馬鹿にはzendは無理。

php自体、mvcをきっちり分離出来ないからねえ。だから大規模サイト構築で問題有りまくり出し。
0116nobodyさん2010/02/26(金) 01:29:53ID:???
Multiselect
MultiCheckbox

Why Checkbox is upper?
I should lower it because its not beautiful.
0117nobodyさん2010/02/26(金) 01:48:46ID:???
>php自体、mvcをきっちり分離出来ないからねえ。
え?
0118nobodyさん2010/02/26(金) 08:27:54ID:bxfngNt4
Zend_DBのクエリがうまくいきません。原因を知りたいです。

$stt= $this->_dbConn->query("INSERT INTO `{$tableCopy}`(uId,loginId,name1) VALUE('10000','hoge','taro')");
という処理をやっていますが、目当てのテーブルにデータがINSERTできません。
_dbConnなどDB接続のオブジェクトなどの要素がそろっているのは確認できていて、
ターミナルやmysqlAdminのmysqlのコマンドから直接同じSQL文を実行すればinsertできます。

var_dump($stt)すると、以下のエラーが出ますが、どういうことでしょうか?
SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '10000' for key 1
既存データに該当カラムが10000のデータがあるという意味かと思いましたがそんなデータはありませんでした。
また、問題の(?)カラムは主キーです。
同じクエリなのに、zend(php)からだけ実行できないのが理解できません。何が原因なんでしょうか?

つづく
01191182010/02/26(金) 08:29:04ID:bxfngNt4
つづき

ちなみに、処理全体の流れはトランザクションを利用していて以下のような処理になっています。
参考になるかわかりませんが良ければご確認ください。
(「今回の処理」部分がinsert失敗してもその下のUPDATE文は問題なく実行されます。)

try{
 //トランザクション開始
 $this->_dbConn->beginTransaction();
 $chkRs= $this->_dbConn->query("SELECT * `{$table}` WHERE --");//where以下省略

 if(!$chkRs){
  return "false_nodata";
 }else{
  //↓ここが今回の処理
  $stt= $this->_dbConn->query("INSERT INTO `{$tableCopy}`(uId,loginId,name1)
      VALUE('{$chkRs['uId']}','{$chkRs['loginId']}','{$chkRs['name1']}')");
 
  $this->_dbConn->query("UPDATE {$table} SET `role` = ? WHERE `preLoginPass`=? LIMIT 1", array($member,$tmpPass));
  return "success";
 }
}catch (Zend_Db_Statement_Exception $e){
 $this->_dbConn->rollBack();
 print($e->getMessage());
}catch (Exception $e){
 print($e->getMessage());
}

0120nobodyさん2010/02/26(金) 08:42:03ID:???
VALUESじゃねの?
エラーはちゃんとintegerにしろって書いてあるようにみえるけど。
0121nobodyさん2010/02/26(金) 08:50:35ID:???
このスレってさ、5人くらいしか居ないんじゃねぇの?
なんか文章の書き方が同じように思える
少々ガラの悪いのが数人って感じ?
0122nobodyさん2010/02/26(金) 09:32:08ID:???
>>120
>>118
主キーに同じIDを使ってinsertはできないというエラー

バックアップかdirty更新をやりたいんだろうけど、
同じスキームにしないでコピー先に専用の主キーを振る方がよくね。
てか、重そうだなその処理。バックアップならSQLひとつでいけそうだけど。
あぁ、まぁ書いてるときりがないからこの辺でw
0123nobodyさん2010/02/26(金) 10:01:08ID:???
で、自己解決しましたとか言って、なんか関係ない話を理由にするんだよな
どうみても釣りw
0124nobodyさん2010/02/26(金) 10:33:04ID:???
解決する人は何故か解決した方法は書かない
01251182010/02/26(金) 16:21:38ID:???
答えてくれた皆さんありがとうございます。
いただいたアドバイスを元に突き詰めてるんですが、原因がまだわかりません。
SQLが異常な動作をしてるみたいなので今はそっちの確認をしてますが
解決しなかったらまたこちらで相談させてください。
ほんとにすみません。
ありがとうございました。
0126nobodyさん2010/02/26(金) 17:07:57ID:???
どうもここのスレの住人はすぐに釣りだとか決め付けたがるな
0127nobodyさん2010/02/26(金) 17:25:08ID:???
スレの住人じゃなくてオレな
01281252010/02/26(金) 17:34:46ID:???
解決しました!
皆さんすみません、よく見たら最後のクエリ処理の後でトランザクションをcommit()してませんでした
最後のクエリのテーブルがMyISAMだからこいつだけ実行されてたんでした。
ありがとうございました。お騒がせしました。
0129nobodyさん2010/02/26(金) 18:11:16ID:???
>>127
お前かw
一番上の辺りの、即効釣りとか決め付けてるのもお前か?
結構頻繁に出てくるよなw
0130nobodyさん2010/02/26(金) 18:16:43ID:???
>>129

そう>>4 もオレ
配列のechoがわからない奴がZend_Filter_Inputのエラーメッセージを
設定するとかありえないww

0131nobodyさん2010/02/26(金) 18:18:06ID:???
>>128
MySQLならautocommitじゃね

0132nobodyさん2010/02/26(金) 19:25:12ID:???
教えてください。以下のようにZend_Viewのみを使って表示させるだけの
シンプルなものなんですが、$view->strに日本語を代入するとまったく表示
されずに、$view->str = '<b>foo</b>';だと「<b>foo</b>」と表示できます。
これはマルチバイト表示用の設定とかあるんでしょうか?
因みに、sjisとeuc-jpだと表示されずにutf-8だと表示されます。

---- index.php
require_once 'Zend/View.php';

$view = new Zend_View();
$view->str = '<b>マルチバイト</b>';
$view->setScriptPath('.');
echo $view->render('view.phtml');

---- view.phtml
<html>
<body>
<p><?php echo $this->escape($this->str);?></p>
</body>
</html>
0133nobodyさん2010/02/26(金) 19:53:53ID:???
なんか恨みでもあるのか
01341322010/02/26(金) 21:41:26ID:???
自己解決しました。
0135nobodyさん2010/02/26(金) 21:52:25ID:???
どうやって?
0136nobodyさん2010/02/27(土) 15:37:06ID:???
この流れにワラタw
0137nobodyさん2010/02/27(土) 16:57:04ID:???
がんばって。
0138nobodyさん2010/03/04(木) 20:52:09ID:iGtVy898
Zend_DBで、insertメソッドでもupdateメソッドでもqueryメソッドでも良いんですが、
値が入っていないパラメータを送るとき、自動的にカラであることをチェックして
自動的にNULLを入れて送信することって無理なの?

$hoge= $params['hoge'] != "" ? $params['hoge'] : NULL;
$db->update('book', array('hoge'=>$hoge),$db->quoteInto('aaa=?' ,$aaa));
みたいなことをいちいちやってるんだけど、効率悪いと言うか。
なにか上手いやり方ないですか?

0139nobodyさん2010/03/04(木) 21:30:33ID:???
Zend_Db_Tableを使うとか
0140nobodyさん2010/03/04(木) 23:39:32ID:???
何か面倒な仕様だな。コボル廚か?
0141nobodyさん2010/03/05(金) 10:23:06ID:???
やっと2chに繋がったか・・・
0142nobodyさん2010/03/05(金) 12:14:29ID:???
Yes, You Can!
0143nobodyさん2010/03/05(金) 13:55:06ID:???
チョンにはまいるよ、マジで
0144nobodyさん2010/03/06(土) 02:26:39ID:???
チョンも在日チョンもうざいね。
0145nobodyさん2010/03/11(木) 18:03:58ID:uuGJLteE
Zend_Dbのqueryメソッドで updateやdeleteを実行したときに、それが成功したかどうかを
判断するのはどうやったらいいんですか?
0146nobodyさん2010/03/11(木) 18:39:23ID:???
判断ってのは相場が決まってる
返り値で判断するかエラーメッセージがセットされてるの見るかcatchでとっ捕まえるか
0147nobodyさん2010/03/11(木) 19:26:12ID:???
selectしてデータが入っているか、消されているかを確認する。
0148nobodyさん2010/03/11(木) 20:42:00ID:uuGJLteE
>>146
どうもありがとうございます。
僕も返り値で判断したくて試してるんですけど、

$rs =$db->query("UPDATE ---");
var_dump($rs);
したところ、成功しても失敗しても$rsにはオブジェクトが入ってきますよね?
このオブジェクトをどう操作したら成功・失敗が判別できるのかわからない状況です。
無理なのでしょうか


>>147さんはクエリするたびに判定用のクエリを再度実行しているんですか?
0149nobodyさん2010/03/11(木) 22:15:03ID:???
>>148
全クエリのたびになんて実行してないよ。

エラーも例外も発生してないのに矛盾が発生して、DBのログにも何も出ず、
Zend_Dbのプロファイラーでも確認できなかった時とかは、selectして前後のデータを確認する。
エラーが出なくても、データベースの自動変換とかで意図しないデータになることがあるからね。
0150nobodyさん2010/03/13(土) 12:35:39ID:EhIFVaNI
煽るつもりじゃなくて、真面目に聞きたいんだけど、
Zend Framework ってかなりイケてないですよね?
最近ちょろっと使ってみたんですけど使いにくくて仕方ないです。
このフレームワークそもそも有名なサイトでの使用実績とか全然ないし、
railsと比べた時こっち選ぶ理由が一個も見当たらない・・
0151nobodyさん2010/03/13(土) 12:38:50ID:???
railsじゃないからね
肉屋に来て、まぐろがないって言ってるようなもの

http://www.google.co.jp/trends?q=Zend+Framework%2CRuby+on+Rails%2Csymfony%2Ccakephp&ctab=0&geo=all&date=all&sort=0
0152nobodyさん2010/03/13(土) 14:59:16ID:???
フロントエンドまでカバーするフレームワークじゃないからなぁ
裏方ではけっこう使われてるんじゃね
0153nobodyさん2010/03/13(土) 16:03:18ID:???
>>149
どうもです。
自分の未熟なせいか良くわからないですが、定期的なメンテナンスの時に
異常を確認したときの検証作業って感じですね
データベースがそんなに不安定なものだとは知らなかったんで、教えてもらってよかったです

日常的なinsertやselect、updateの成功・失敗はどうしたら確認できるのかな
誰か良かったら教えてください
0154nobodyさん2010/03/13(土) 17:02:24ID:???
有名なサイトってどのフレームワーク使ってるか公開してる方が少ないと思うが
なんで有名なサイトで使われてないと思ったんだ?
0155nobodyさん2010/03/13(土) 17:06:06ID:???
名前は出さないけど使われてるよね
http://www.coojin.com/detail/PHP%E5%A4%A7%E8%A6%8F%E6%A8%A1%E3%82%B5%E3%82%A4%28%E3%82%A8%E3%82%A4%E3%82%B1%E3%82%A2%E3%83%BB%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%82%BA%E6%A0%AA%E5%BC%8F%E4%BC%9A%E7%A4%BE%29+%5Ben%5D%E6%B4%BE/145600738

あとフレームワークごとの特徴くらいは調べようぜ
http://www.phppro.jp/article/framework/comparison.php
0156nobodyさん2010/03/13(土) 18:11:31ID:???
>>155

その、phpproの記事は古いな。
0157nobodyさん2010/03/13(土) 18:48:06ID:???
採用件数で一番多いのは、どうみてもWordPress
0158nobodyさん2010/03/13(土) 19:53:10ID:???
記事が古かろうが基本方針や特徴は3フレームワークとも変わってないけどな
0159nobodyさん2010/03/13(土) 20:05:04ID:???
変わってる

・ZFの自動育成はCakeほどではないが、その記事ほど酷いものじゃない。
・規模についてはまったく的外れではないけど、根拠がない
・スピードはsymfonyとZFではほとんど変わらない。symfonyが遅かったのは昔のこと
・その他の比較はsymfonyもCakeもZFも全部○

まったく特徴をとらえていない。
0160nobodyさん2010/03/13(土) 21:33:58ID:???
>>155
その求人、大規模ポータルサイトへの派遣で
経験1年以上の条件で設計からテストまで担当って
典型的な○○請負じゃまいか!
0161nobodyさん2010/03/13(土) 23:17:06ID:???
Symfony今でも遅いぞぶっちゃけ
去年の暮れにうちの社のインフラの奴らがベンチ取ってZendに決めてた
0162nobodyさん2010/03/13(土) 23:17:36ID:???
>>160
おいおいエイケア知らないのか
0163nobodyさん2010/03/13(土) 23:22:00ID:???
ちょっと前のzendはかなり自分でいじらなきゃ使いものにならなかったけど
最近のは結構イケてますよね
0164nobodyさん2010/03/13(土) 23:28:04ID:???
な、なに?エイケアって?
0165nobodyさん2010/03/14(日) 01:58:17ID:???
企業のメルマガの配信ってだたいエイケア経由だぞ
http://www.a-care.co.jp/
要するにエイケアはSIとかじゃなくてサービスする側の企業
0166nobodyさん2010/03/14(日) 04:43:05ID:???
>>160
派遣って書いてね?
っても偽装請負なんて茶飯事だけど

単金安いよなぁとか思ったけど,要求スキルも低そうだし残業出るなら
0167nobodyさん2010/03/14(日) 07:27:06ID:???
>>165
メルマガってもう流行らないよね
メルマガで当てた資金で開発にも手を出して、
開発のノウハウなんてないけど、人材だけ投入できますよ?
っていうハマりパターンはよくある。
腕に覚えがあるやつはチャンスかもな。
0168nobodyさん2010/03/14(日) 08:41:20ID:???
gmailで弾かれて終了だと思うけどな。偽装spamなんだし。
まだまぐまぐとか人雇ってたりしてたな。ヤバくて逃げ出した香具師の穴埋めか?
0169nobodyさん2010/03/14(日) 09:34:00ID:???
いや、企業のメールニュース配信は別に廃れてないだろ
0170nobodyさん2010/03/14(日) 14:26:22ID:???
メルマガスタンドと勘違いしてるんだろ
レベル低いな相変わらず
0171nobodyさん2010/03/15(月) 04:09:50ID:???
難でいちいちメールで配信してあげなきゃ成らないの。
rss見て自分でチェックしろよ。
0172nobodyさん2010/03/15(月) 10:00:30ID:???
>>169
>>170
レベル低いな相変わらず。
メール自体がすたれるだろ JK
おまいら新しいサービスを作るために開発やってんじゃねーん?

メール配信が金になるってのは、それだけ大量配信に無理があるからだぜ
それでいて、メルアド間違ったり、メルアド変わったり、盗聴されたり
途中で消えたり、ろくなことないからなメールは。
0173nobodyさん2010/03/15(月) 14:04:54ID:???
やっぱ何にも解ってないんだなお前は
0174nobodyさん2010/03/15(月) 14:08:25ID:???
お前さんは何をわかってるんだい?
で、実績は?
0175nobodyさん2010/03/15(月) 14:16:40ID:???
zendを取り入れた?らしいsymfony2.x系に期待
今はCodeIgniterを改造して使ってごまかしてる
0176nobodyさん2010/03/15(月) 14:34:17ID:S0jC/HjU
聞く場所ここで合ってるかわかないんだが、教えてほしいことが。
Zend_Formをsakuraレンサバで動かそうかと思ったんだけどうまく動作しないんだ。

入力画面は表示されるんだけど、入力をしてsubmitぽちっとすると

Fatal error: Uncaught exception 'Zend_Controller_Dispatcher_Exception' with message 'Invalid controller specified (error)' in
/home/ほげ/ZendFramework/library/Zend/Controller/Dispatcher/Standard.php:242 Stack trace:
#0 /home/ほげ/ZendFramework/library/Zend/Controller/Front.php(954):
Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http))
#1 /home/ほげ/ZendFramework/library/Zend/Controller/Front.php(212):
Zend_Controller_Front->dispatch() #2 /home/ほげ/www/contact/index.php(12):
Zend_Controller_Front::run('../../phplib/co...') #3 {main}
thrown in /home/ほげ/ZendFramework/library/Zend/Controller/Dispatcher/Standard.php on line 242


パスが通ってないような雰囲気を感じ取ってはいる。
でも色々パスをいじったりhtaccessいじったりしたけど解決せずで助けて頂きたい。
テストサイトやローカルでは動いたんだけどさくらだと動かなくて。。

ちなみにindex.phpはこんな感じです。


<?php
require_once 'Zend/Controller/Front.php';
require_once 'Zend/Layout.php';

Zend_Layout::startMvc(array('layoutPath' => '../../phplib/contact/views/layouts/'));

Zend_Controller_Front::run('../../phplib/contact/controllers/');


あと他に状況を記載してほしい箇所があれば記載します。
0177nobodyさん2010/03/15(月) 14:42:55ID:???
HTMLソース見る。解決。
0178nobodyさん2010/03/15(月) 14:50:26ID:???
いや、重要なのは、エラーコントローラーがないっていう例外
エラーコントローラーを置かないならエラーハンドラープラグインを無効にするべき
0179nobodyさん2010/03/15(月) 15:33:02ID:S0jC/HjU
>>178
エラーハンドラープラグイン無効にしてみた。
画面真っ白になったからエラーログみてみたけど特にめぼしい情報はなかったー。

こんな風に無効にしたんだけど合ってるかな。

$front = Zend_Controller_Front::getInstance();
$front->setParam('noErrorHandler', true);
0180nobodyさん2010/03/15(月) 15:38:15ID:???
$front->throwExceptions(true);
はやってある?
0181nobodyさん2010/03/15(月) 19:22:03ID:S0jC/HjU
$front->throwExceptions(true); はやってなかった!

ので、付けたらエラー吐き出されたよ。
どうやらコントローラーの名前を正しく認識していないっぽい感じのエラーでした。
全然別のアクションにとんで全然別のビューを呼んでました。
なんでsakuraにした途端おかしくなったのか結局解明できなかったけれど
飛ぶ先を修正してフォームは動作するようになりました。
ありがとうございました!
0182nobodyさん2010/03/15(月) 20:45:57ID:???
工エエェェ(´д`)ェェエエ工
工エエェェ(´д`)ェェエエ工
工エエェェ(´д`)ェェエエ工
0183nobodyさん2010/03/16(火) 16:07:04ID:???
>>161
また使えないハローワールドベンチか
0184nobodyさん2010/03/16(火) 17:14:07ID:???
そういうことにしたいんだな
0185nobodyさん2010/03/16(火) 22:34:19ID:???
symphony 2 (reloaded) は zend fw 取り入れた rad で,速度も3倍って書いてあったよ。
0186nobodyさん2010/03/16(火) 23:16:01ID:???
そもそも3倍ってなんの3倍だよ
0187nobodyさん2010/03/16(火) 23:33:20ID:???
   , ノ)
  ノ)ノ,(ノi
  (    (ノし
┐) ∧,∧  ノ  いまだ!「通常の」…っと
..|( ( ....:::::::) (
 ̄⊂/ ̄ ̄7 ) ヽ lヽ,,lヽ
 (/ 川口 /ノ   (    ) やめて!
   ̄TT ̄    と、  ゙i
0188nobodyさん2010/03/16(火) 23:44:10ID:???
>>186
すまんね
It is up to 3 times faster than symfony 1.4 or Zend Framework 1.10
and consumes half the memory.
だそうな
http://symfony-reloaded.org/
0189nobodyさん2010/03/17(水) 01:48:37ID:???
シャア専用かw
0190nobodyさん2010/03/17(水) 03:17:14ID:0MVPdABS
localhost/controller/hogeaction
と言う感じにアクションにアクセスするとき、あるパラメータがGetもしくはPostで
送られてくることが必須の場合、パラメータの不備を確認するにはどうしたらいいですか?
単純に考えたら$this->getRequest()から値をとって、
if(!$param){
//リダイレクトとか警告表示
}
とするんでしょうが、いろんなコントローラのいろんなアクションで共通して使える
必須パラメータの不備確認処理がないか考えています。
(エラーコントローラは存在しないコントローラへのアクセスの制御だからちょっと違うんですよね?…)
0191nobodyさん2010/03/17(水) 03:36:30ID:???
コントローラの基底クラスにそういうの付けておくというのは?
0192nobodyさん2010/03/17(水) 05:52:30ID:???
必須パラメータがなかったらそのアクションに来てほしくないなら、
ルーターのルートで宣言する
アクションで使える共通機能が欲しいなら、アクションヘルパーを作る。
パラメータチェックぐらいなら、おれは Zend_Form
01931902010/03/17(水) 11:26:18ID:0MVPdABS
>>191,192
なるほど。意見ありがとうございます。

>必須パラメータがなかったらそのアクションに来てほしくないなら、ルーターのルートで宣言する

これが答えかなーって思ったんですが、これってルーティング設定ってことですよね?
それだと、そのアクションにくる度にチェックすることになるから…

管理画面で、登録済みの料理のレシピがたくさん並んでて、「編集するレシピ名をクリックして編集画面に移動」て
感じなんですよね。
localhost/kanri/recipi?henshu=100 でレシピ番号100の編集画面を表示って感じで、
Getメソッドで必須パラメータを渡すけど、この形式のURLは編集画面のトップ画面に限られてるんです。
(確認画面・修正画面・登録画面へは全部postとセッションでheishu=100も渡すので)
つまり、トップ以外の編集画面は/kanri/recipiの形になるので、これだと教えていただいた
ルーティングで固める上の方法は使えないですよね?
やっぱり編集画面のトップ画面でだけ、個別に必須パラメータ($_GETで)のチェック入れるしかないでしょうか?
ちょっと情報不足でした、すみません。
0194nobodyさん2010/03/17(水) 12:07:13ID:???
そのURL形式が必須なら、既存のルーティングで処理するのは難しそう

形式をこだわらなければ現在あるルーティングで目的は達成できるけど、
もし形式を変更できないなら、それにあったルートクラスを書く方が、
オーバーヘッドはないしクリーンだよ
0195nobodyさん2010/03/17(水) 12:19:44ID:???
質問させてください
マニュアル(http://framework.zend.com/manual/ja/zend.db.table.html)の、例27などに出てくる、select()の引数のZend_Db_Table::SELECT_WITH_FROM_PARTというのが分かりません
コレはいったい何なのでしょうか?
自分の持っている本にも載っていませんし、ネットで検索しても良く分かりませんでした
APIでもコンストラクタだという事しか出てこないように思います
いったいコレは何の為に使っているのか分かる方がいましたら教えていただけませんでしょうか?
0196nobodyさん2010/03/17(水) 12:57:18ID:???
>>195
Zend_Db_Tableのソース見た?
どこかで定数がdefineされてるはず
0197nobodyさん2010/03/17(水) 12:58:21ID:???
>>195
selectオブジェクトを作り、そのテーブル単独でfrom指定する
デフォルトでは、fromは自分で指定する。
0198nobodyさん2010/03/17(水) 14:41:38ID:???
symfony2.0はZendFrameworkベース
0199nobodyさん2010/03/17(水) 15:04:57ID:???
Zend Framework 2.0はsymfonyベース?
0200nobodyさん2010/03/17(水) 15:46:28ID:???
>>197
ありがとうございました
0201nobodyさん2010/03/17(水) 23:33:02ID:???
>>198
>>199
だったらそのままいけよw
0202nobodyさん2010/03/18(木) 07:52:53ID:???
たしかに、
Ruby on Railsって、なんで Rails on Rubyじゃないの?って思ってる
0203nobodyさん2010/03/18(木) 12:29:21ID:???
実行速度とか口ばっかで、ろくな実績がない
0204nobodyさん2010/03/18(木) 13:07:10ID:???
framework.zend.comが重いか重くないかで判断するのが簡単
0205nobodyさん2010/03/19(金) 06:54:15ID:???
大規模サイトに不向きだしねえ。
0206nobodyさん2010/03/19(金) 11:40:36ID:2j6+t1LQ
モジュール構成での質問です。
ZF1.9.7を利用しています。

端的に言うと、リクエスト時に全てのモジュールのブートストラップが呼ばれてしまいます。
出来れば、ルート直下と要求のあったモジュールの
ブートストラップだけ起動させたいのですが、
どう設定すればよろしいのでしょう?

ご教授願います。

application.iniで
resources.modules[] =
設定し、モジュール別にルーティングされている事も確認できてます。
0207nobodyさん2010/03/19(金) 12:33:49ID:???
http://weierophinney.net/matthew/archives/234-Module-Bootstraps-in-Zend-Framework-Dos-and-Donts.html

これ、その関係の話。
0208nobodyさん2010/03/19(金) 14:10:39ID:2j6+t1LQ
>>207
ありがとうございます。
翻訳して読みましたが、よく分かりません…
プラグインでモジュール確認するとか。

やりたいことは、全体のHPの一部のコンテンツにDBを利用した
システムがある。このコンテンツだけ分離したくてモジュールに
しようと考えました。レイアウトも別にしたかったし。
defaultモジュール:HP全体モジュール
appモジュール:dbを利用したコンテンツ

何か良い方法あるのでしょうか?
0209nobodyさん2010/03/19(金) 15:04:30ID:???
馬鹿にはzfは無理。
国産フレームワークにしとけ。

http://pc11.2ch.net/test/read.cgi/php/1253912143/
【PHP】PHPフレームワーク総合スレ14
http://pc11.2ch.net/test/read.cgi/php/1186096518/
【PHP】Ethna part.2【国産フレームワーク】
http://pc11.2ch.net/test/read.cgi/php/1172328149/
2ch有志がPHPフレームワークを作るスレ
0210nobodyさん2010/03/19(金) 15:07:32ID:iYK3Oj1q
>>208
そのブログで書いてあるのは、モジュールを検知して動作するプラグインを書けば?という話

モジュールのpluginsディレクトリにプラグインを置くとautoloadされる。
そのプラグインは現在のモジュール名とリクエストが一致してたら仕事をする。

モジュール別bootstrapでそのプラグインをフロントコントローラーに登録。
そんな感じ。
0211nobodyさん2010/03/19(金) 15:47:42ID:2j6+t1LQ
>>209
db部分は、MySQLによりDMLは全てプロシージャで作成したので
Cakeは断念しました。

>>210
解りやすい解説ありがとう。よく分かりました。
探してたら↓こんなんありまして、何とかやってみます。
http://blog.easytech.com.ar/2009/08/04/initializing-only-one-module-per-request-in-zend_framework/


0212nobodyさん2010/03/19(金) 16:02:16ID:iYK3Oj1q
>>211
いろいろあるみたいだよね。
手前みそだけど、こんなんでよかったらあるよ。改造のヒントにでもどうぞ。

・指定したモジュールだけにイベントを送るブローカー
http://github.com/noopable/Flower/blob/master/library/Flower/Controller/Plugin/Broker.php

・リソースのロードをLazyにできるモジュール別ブートストラップ
http://github.com/noopable/Flower/blob/master/library/Flower/Bootstrap/Module.php
0213nobodyさん2010/03/19(金) 17:30:31ID:2j6+t1LQ
>>212
下のリソースのロード制限は解りやすいですね。
ありがとうございます。
これは、各モジュールのブートストラップでinit〜作って
呼べばよいですよね?
0214nobodyさん2010/03/19(金) 18:00:26ID:???
>>213
えっと、すんません。解説がないんでアレですけど。。
わかりにくいようだったら、スルーしてもらっていいっす。恥ずかしいのでw

下の方は、リソースを必要とするまでinitしないためのものなので、
モデルとかサービスリソースを作ったときに、idleresourcesとしてresourcesと
同じように指定するとスタンバイになって、使われるときに初めて
getResourceでinitされます。

モジュール別に対応するには、上のやつをプラグインとして登録したうえで、
splObserverを実装したクラスならなんでも、モジュール名と一緒にプラグインに
attachすると、プラグインのイベントをupdateメソッドに送ってくれます。
なので、今回のケースだと、モジュール別BootstrapにsplObserverを実装して
updateメソッドで、遅延ロードしたいリソースをbootstrapするとOKなんですけど・・・
0215nobodyさん2010/03/20(土) 10:54:26ID:ZDcRVlf5
>>214
遅くなりました…
ご説明感謝します。

initしないためのものでしたかw
無知ですいません。

sqlObserverは使ったこと無いので勉強しないと理解できないです…
何となくですが、必要な時に初めてinit〜としてresourceを
生成ってことかなと。
0216nobodyさん2010/03/20(土) 18:42:46ID:4HvTXNoM
いえいえ、説明がへぼいので(ry
0217nobodyさん2010/03/20(土) 19:24:26ID:ZDcRVlf5
>>216
またお世話になると思うので宜しくお願いします。
0218nobodyさん2010/03/20(土) 23:21:56ID:???
Zend_Db_Table + Zend_Paginatorの組み合わせで使っています。

Zend_Db_Table_SelectにlimitをしてZend_Paginator無視されてしまうのですが何か良い方法はないでしょうか?

$select = $db->select()->limit(100);
Zend_Paginator::factory($select, 'DbTableSelect');
としてもlimit(100)が無視されてすべてのデータが入ってしまいます。
0219nobodyさん2010/03/23(火) 11:35:31ID:7nF+H1X7
zend_dbでクエリ実行してる限りは、sqlインジェクション対策は万全なんでしょうか?
自分は名前つきプレースホルダの形でqueryメソッドしているんですが…
今日みたモンベルのサイトがsqlインジェクションで大被害という話をみて気になっています
0220nobodyさん2010/03/24(水) 10:34:51ID:???
ZFってほかのFWよりは軽くて早いけれども、それでもZF使わないよりは遅いらしいですがそのサイトを回っていて体感できるほどでしょうか?
0221nobodyさん2010/03/24(水) 12:26:22ID:???
体感速度はクライアントのマシンやネットワーク環境にも依存する。
早いか遅いかは自分で確かめろ
0222nobodyさん2010/03/24(水) 14:01:12ID:???
作り方にも寄るしねえ。
zf使わなくても重いサイトはいくらでも作れる。pearで逐一sql発行してみたりとか。
0223nobodyさん2010/03/24(水) 23:53:42ID:???
10msかかる処理が50msになったとしたら、数値上は5倍も重くなった事になるよね。
でも体感は出来ない。そんな感じ。

0224nobodyさん2010/03/25(木) 10:25:51ID:???
質問させてください
やっぱある程度の規模の大きさに成長がみこまれるサイトというのはFWは使わない方がいいのでしょうか?
最初ZFなどのFWで構築すると後から変更などで大変になるのでしょうか?
0225nobodyさん2010/03/25(木) 10:40:05ID:???
> ある程度の規模の大きさに成長がみこまれる

トラフィックとかユーザー数とか複雑さとかデータ量とか、全部コミコミで話をしてるの?
多分、FWを使う使わないというより他に大事なことがたくさんあって、
それ抜きに結論は出ないと思う。
0226nobodyさん2010/03/25(木) 11:16:58ID:???
>>225
>トラフィックとかユーザー数とか複雑さとかデータ量とか、全部コミコミで話をしてるの?
はいそうです

>多分、FWを使う使わないというより他に大事なことがたくさんあって
デザイナーとかプログラマーとの兼ね合いとかそういう事でしょうか?

ZFはライブラリ的な一面もあるので他のFWよりは(他のFWは使触ったことはないのですが)柔軟性があるのではないかと勝手に思っているのですが、
例えばPHPじゃなくてJAVAでしっかりしたサーバサイドを作ろうとか、今のこのシステムではパフォーマンスの面や発展性の問題できついものがあるのでもうちょっと改良したい、
といった場合が出たときにやはりFWで構築していると変更に手間取ることがあるのかな、と思いまして

ショッピングサイトとか企業サイトとかはFWで構築しても特に問題はないかかと思いますが、(表現が悪いかもしれませんが)ユーザー志向の動的なコンテンツを提供する場合どうなのかなと思いまして
例えば掲示板とかblogとかを提供したり、フォトサイトとかのようにユーザーがファイルやテキストをアップロードしたりといったサイトの場合です
最初のうちはFWを使用しててもいいと思うのですが、拡張性を考えると自分たちで大変でしょうが最初からPHPを打ち込んでいく方がいいのかなと思いまして

説明が下手ですみません
0227nobodyさん2010/03/25(木) 11:22:48ID:???
コミコミでは結論は出ないと思います。
手書きかFWかというレイヤーの話とは違いますよ。
0228nobodyさん2010/03/25(木) 13:23:18ID:???
どの程度に成長するかの計画が無ければ判断出来ないしな。
基本作り直し覚悟で模索するしかないよ。経験無いみたいだし。
もしくは成長しなくて金が無駄に成っても最初から、javaで作っておくか。
自分たちでphp素でzfクラスのフレームワーク作れるほうが稀だと思う。
0229nobodyさん2010/03/25(木) 20:43:13ID:???
大規模になるならFW使ったほうがいいんじゃない?
0230nobodyさん2010/03/26(金) 01:07:35ID:0qaztAUz
Zend FrameworkってCGIモードでも動く?
0231nobodyさん2010/03/26(金) 02:20:12ID:???
zend server は apache + fcgi
0232nobodyさん2010/03/26(金) 02:39:10ID:???
mod_php使わないのか。遅そうだ。
0233nobodyさん2010/03/26(金) 04:07:42ID:O2gk3ied
この手の話の大規模って、機能規模なのかアクセス規模なのかがまず明確じゃないな

機能規模のことを言ってるなら、間違いなくコーディング規約なりFWなりで縛るのが吉
アクセス規模の事を言ってるなら、単純なRESTのレスポンスにまでFW使うのはどうかな〜と思い始めてる。
rubyでRoRとかpythonで mod_wsgi + 好みのFW とかなら話は別なんだろうけど
0234nobodyさん2010/03/26(金) 13:38:23ID:???
rorで大規模とかzfより面倒だよ。
0235nobodyさん2010/03/27(土) 18:57:25ID:???
ZendFuckってJavaでいうStrutsみたいなもんだよな。
それだけじゃ使い物にならないところが。
0236nobodyさん2010/03/28(日) 02:03:26ID:???
かといってjsp+jdbcでごりごり描いてるのも大変でしょ。
フレームワーク使って、htmlとpearごりごり描くの狩らぬけ出すだけでも導入効果有るよ。
0237nobodyさん2010/03/30(火) 20:43:09ID:???
Zend_Config_Iniの話ですが、数値でクオート無しの値を読み込んだ後に
Zend_config_Writer_Iniするとクオート付きになってしまいます。

foo = 1234を読み込んで書き込むと
foo = "1234"となる

対策法はありませんか?
0238nobodyさん2010/03/31(水) 06:55:05ID:???
文字列で統一の方がよくね?
0239nobodyさん2010/04/01(木) 08:41:41ID:???
馬鹿にはzfは無理。phpとpearの基本からやり直したほうが。

http://pc11.2ch.net/test/read.cgi/php/1268835461/
【PHP】下らねぇ質問はID出して書き込みやがれ 94
http://pc11.2ch.net/test/read.cgi/php/1158647441/
くだらない質問でもど偉そうに聞いていいスレ
http://pc11.2ch.net/test/read.cgi/php/1068190843/
親切な人が初心者にPHPの関数を使い方を教える
http://pc11.2ch.net/test/read.cgi/php/1257701535/
△▲ WebProg 初心者の質問 Part21 ▼▽
http://pc11.2ch.net/test/read.cgi/php/1167984858/
俺が初心者にPHPを伝授する
http://pc11.2ch.net/test/read.cgi/php/1172205352/
PHPでOOP
http://pc11.2ch.net/test/read.cgi/php/1253912143/
【PHP】PHPフレームワーク総合スレ14
http://pc11.2ch.net/test/read.cgi/php/1214323962/
[PHP-usersヲチ11]全部読むと裏技があるのでしょうか
http://pc11.2ch.net/test/read.cgi/php/1188789351/
【PHP】PEAR Part3
http://pc11.2ch.net/test/read.cgi/php/986146208/
PHPで作られたサイト
http://pc11.2ch.net/test/read.cgi/php/1152776176/
【勉強するのは】PHPとPerl【どっちが最初?】
http://pc11.2ch.net/test/read.cgi/php/1253091690/
php+mysql = オワタ
http://pc11.2ch.net/test/read.cgi/php/1018597325/
php5これでCGIはphp1色の時代へ
http://pc11.2ch.net/test/read.cgi/php/1213919075/
PHP関連の書籍 第6版
http://pc11.2ch.net/test/read.cgi/php/1169024172/
PHP相談室 1
0240nobodyさん2010/04/01(木) 23:02:16ID:???
zendを使って作成されたそれなりの規模のソースを配布しているところってありますでしょうか?
zendについているソースはすべて見ました。
daoやキャッシュなどをフルに利用した参考になるソースありましたら教えて欲しいです。
ディレクトリの構成やDBコネクション、エラー定義などを参考にしたいです。
0241nobodyさん2010/04/01(木) 23:35:40ID:???
>240
http://www.live-commerce.com/
0242nobodyさん2010/04/02(金) 00:37:50ID:???
>>240
お勧めは
storefront
http://www.ohloh.net/p/zfstorefront

TomatoCMS Omekaもなかなかよいよ。

live-commerceを見るのは最後にした方がよさげ。
0243nobodyさん2010/04/08(木) 18:48:06ID:hISebTnv

$query->where("column1 = ? and column2 = ?", array('abc', 'def'));
こんな感じでzend_db のwhere 関数で?(プレースホルダ)を複数使いたいんですが、うまくいきません。
プレースホルダを複数使うのってできないのでしょうか?
0244nobodyさん2010/04/08(木) 20:05:16ID:???
>>243
ソース嫁
0245nobodyさん2010/04/08(木) 20:21:47ID:hISebTnv
ソース読んでもわからんかった
教えてクレヨン
0246nobodyさん2010/04/08(木) 21:59:06ID:???
$query->where('column1 = ?', 'abc')
->where('column2 = ?', 'def');
0247nobodyさん2010/04/09(金) 10:10:00ID:TIvOx/xs
あすいません
column = 1 and (column2 = 2 or column3 = 3)
みたいな場合についてでした。
この場合orWhereを数珠つなぎすると思った通りにならんのです・・
プレースホルダ使わなければなんとかなるのですが。
0248nobodyさん2010/04/09(金) 10:31:31ID:???
orWhereとかあるけど、それでも無理?
0249nobodyさん2010/04/09(金) 10:43:22ID:???
あぁ、すまん、orWhereって書いてたね

> column = 1 and (column2 = 2 or column3 = 3)
これ、評価順を考えてみれば、フラットにできるから。
column2 = 2 or column3 = 3 and column = 1
でどうよ。
0250nobodyさん2010/04/09(金) 11:37:31ID:???
SQLでは優先順位が AND > OR と定められているはずでは?
0251nobodyさん2010/04/09(金) 11:43:38ID:???
最適化エンジン次第じゃない?
0252nobodyさん2010/04/09(金) 12:09:21ID:???
その最適化エンジンやばくないか
0253nobodyさん2010/04/09(金) 12:17:33ID:???
このスレではよくあること
0254nobodyさん2010/04/09(金) 13:20:02ID:???
>>243

実行時は名前付きパラメータで処理されるから、:paramnameとbindを使ってみて
0255nobodyさん2010/04/12(月) 01:13:05ID:b5cG05fs
Zend_Db_Tableを使用してinsertやupdateをする際に、
$dataで追加するデータを連想配列で指定すると思いますが、
できれば、のちのちの変更も考えて、addParam()などでデータを追加したいのですが、
それようのクラスってあるのでしょうか?
探したのですが見つからずでした。
DbTable_UsersなどとZend_Db_Tableの間に一つ自作のクラスを追加してやるしかないのでしょうか?
liveCommerceは連想配列のままでした。
うまいやりかたありましたら教えて欲しいです。
0256nobodyさん2010/04/12(月) 04:06:48ID:???
> できれば、のちのちの変更も考えて、addParam()などでデータを追加したいのですが、

そこをもう少し詳しく・・・
それだけじゃ何がしたいのかわからない。
0257nobodyさん2010/04/12(月) 13:30:57ID:HRyruJMr
ZendFW1.9 + smarty で開発してます。モジュール化について教えてください。
これまでモジュール化を考えずにサイトを作って来たんですが、管理画面以下のみをモジュール化
しようとして失敗しています。以下のエラーが出ます(ブラウザ画面は真っ白)
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

●モジュール化の為に、フロントコントローラ(index.php)には以下を追記し、
$front->setControllerDirectory(APP.'/controllers');//この行は元からありました
$front->addControllerDirectory(APP.'/kanri/controllers', //この行を追記した

●applicationディレクトリは以下の通り。
application
 -controllers(ここに管理画面以外のコントローラ全てが入ってます)
 -models
 -smarty(この中にview用のファイルが入ってます。標準であるviewディレクトリは使ってません)
 -kanri(このディレクトリを新規にモジュール用に追加しました)
  -controllers
   -IndexController.php
  -models
  -views(現在はカラ)


続きます
02582572010/04/12(月) 13:36:32ID:HRyruJMr
つづきです
●/application/kanri/controllers/IndexController.phpは以下の通り。
require_once 'Zend/Controller/Action.php';
class Kanri_IndexController extends Zend_Controller_Action {
 public function indexAction() {
  echo "hoge";
 }
}
●ルーティング設定は
routes.kanri.route= "/kanri/*"
routes.kanri.defaults.module= "kanri"
routes.kanri.defaults.controller= "Index"
routes.kanri.defaults.action= "index"
routes.kanri.type= "Zend_Controller_Router_Route"

長くてすみません。どこが設定でおかしいんでしょうか?
ディスパッチのエラーが発生してるということは、ルーティングだったり
名前設定だったりの間違いか、ディレクトリ構造がおかしいかかと思いましたがわかりません。


また、kanri用のviewファイルも/application/smartyの中に入れて良いのでしょうか
その場合、どういう形で入れたら良いんでしょうか?
現在のindex.phpでのsmarty設定が
$render ->setViewBasePathSpec(APP.'/smarty')
->setViewScriptPathSpec(':module/:controller/:action.:suffix')
->setViewScriptPathNoControllerSpec(':action.:suffix')
->setViewSuffix('tpl');
なので、
/application/smarty/kanri/index/index.tpl、/application/smarty/kanri/kanrigamen1/index.tpl
という形で良いんでしょうか?
よろしくお願いします。
02592572010/04/12(月) 21:26:30ID:???
どうにか自己解決できました
スレ汚しすみませんでした
0260nobodyさん2010/04/14(水) 08:59:09ID:???
すみませんZend_Http_Cookieのマニュアル(http://framework.zend.com/manual/ja/zend.http.cookies.html)の「例4 クッキーがマッチするかどうかの確認」の部分の質問なのですが、

$cookie->match('https://sub.domain.example.com/somedir/otherdir/foo.php');
// これは true を返します。

この部分の意味が分かりません。
https://www.example.com/somedir/foo.phpがマッチするのは単純に分かるのですが、sub.domain.や/otherdir/の2つが何故マッチするのかと・・・。

「mixed $uri: Zend_Uri_Http オブジェクトで、 ドメインやパスのチェックに使用します。
オプションとして、 正しい形式の URL を文字列で渡すこともできます。
指定した URL のスキーム (HTTP あるいは HTTPS)、 ドメインおよびパスがすべて一致した場合にのみ、クッキーがマッチします。 」

という記述の「指定した URL のスキーム (HTTP あるいは HTTPS)、 ドメインおよびパスがすべて一致した場合にのみ」と反するような気がします。
単に基本的な事が分かっていないだけなのかもしれませんが、自分には考えても分かりませんでしたので教えて頂けたらと思います。
よろしく御願いいたします。

0261nobodyさん2010/04/16(金) 18:02:22ID:???
secureだからhttps://
.example.comだから*.example.com
/somedirだから/somedir*
0262nobodyさん2010/04/17(土) 20:24:51ID:T3UCpDKa
>>261 Thanksです
0263nobodyさん2010/04/21(水) 18:21:04ID:mfVJoQpI
quickstartとほぼ同じ構成なんですけど、
アクセスURLが /mだったらレイアウトをmobile.phtmlにするって
application.iniでは記述できませんよね?ディスパッチャを拡張するとか?

しょうがないので今はコントローラの中で
$this->view->layout()->setLayout('mobile');
とやってるんですが、そんなもんでしょうか?
02642632010/04/22(木) 13:23:51ID:???
細かいけど訂正。こうだった
$this->_helper->layout->setLayout('mobile');

注入したい場合はどうやらこんな感じ。ブートストラップにて
protected function _initLayout()
{
$this->bootstrap('FrontController');
$f = $this->getResource('FrontController');

$l = Zend_Layout::startMvc();
$l->setLayoutPath(APPLICATION_PATH."/layouts/scripts");
 :
$l->setLayout("mobile");
 :
return $l;
}
0265nobodyさん2010/04/22(木) 17:52:05ID:doAUeW+3
Service_Amazonを使いたいんですが問題が発生します。

if(!empty($params['key'])){
$associate_key = $this->_config->afferiate->_ASSOCIATE_KEY;
$query = new Zend_Service_Amazon($access_key, 'JP', $secret_key);
$results = $query->itemSearch(
array(
'SearchIndex' =>'Books',
'Keywords' =>'PHP',
'ResponseGroup' =>'Large'
)
);
}

上記のようにして、検索を実行した時に限ってdispachエラーが出るようなんです。
[Thu Apr 22 01:40:01 2010] [error] [client 192.168.0.8] 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

$params['key']がカラで検索しないときは、同じ画面でもエラーしません。
どんな原因が考えられるでしょうか? バージョンは1.8.1です。
また、上のZend_Service_Amazon()の使い方は間違ってますか?
0266nobodyさん2010/04/22(木) 23:09:32ID:???
新しいバージョン使いなさい
1.10とか
0267nobodyさん2010/04/22(木) 23:55:56ID:doAUeW+3
>>266
どうもありがとうございます
バージョンが古いのが問題かと思って新しくしたんですが、まだエラーが出ます。
PHP Fatal error: Class 'DOMDocument' not found in /usr/lib/php/Zend/Service/Amazon.php on line 128
何が問題なんでしょうか。
調べたらzendfwよりphp自体の問題に思えて来たのでphpスレに移動します。
ありがとうございました
0268nobodyさん2010/04/23(金) 00:33:42ID:???
ggrks
http://www.google.co.jp/search?hl=ja&lr=lang_ja&ie=UTF-8&oe=UTF-8&q=Class%20%27DOMDocument%27%20not%20found&num=50
0269nobodyさん2010/04/23(金) 00:37:54ID:???
>>268
どうもです。
しかし、そこに書いてあることやったんですけどエラー解消しないんですよね
php質問スレに詳細書いたので、気が向いたらお願いします。ありがとうございました
0270nobodyさん2010/04/23(金) 04:13:25ID:QeXW5bBg
すみません、zendFW1.10.3を利用してるんですが、Zend_Service_Amazonの使い方、以下で間違ってますか?

$query = new Zend_Service_Amazon($access_key, 'JP', $secret_key);
//$results = $query->itemLookup('B001DNF6V6');
$results = $query->itemSearch(
array(
'SearchIndex' =>'Music',
'Keywords' =>$params['key']
)
);

値が取得できず、以下の結果になります。(エラーは出力されません)
object(Zend_Service_Amazon_ResultSet)#295 (4) { ["_results:protected"]=> object(DOMNodeList)#307 (0) { }
["_dom:protected"]=> object(DOMDocument)#293 (0) { } ["_xpath:protected"]=> object(DOMXPath)#296 (0) { }
["_currentIndex:protected"]=> int(0) }

コメントアウトしている $results = $query->itemLookup('B001DNF6V6'); でなら目当ての商品情報を取得できるので
コンポーネントの設定や動作条件は満たしてるのではと思うんですが…
0271nobodyさん2010/04/23(金) 10:07:38ID:yrV1Z6KO
Zend_Cache_Frontend_File(http://framework.zend.com/manual/ja/zend.cache.frontends.html)について分からないことがあります

このフロントエンドはバックエンドのオプションとしてmaster_fileを設定するのだと思います
実際上記のマニュアルにも「唯一しなければいけないのは・・・」と書かれています
しかし、上記のマニュアルにはmaster_fileは非推奨と書かれています。
これはどういうことなのでしょうか?

master_fileではなく、master_filesを使えということなのでしょうか?

それともそもそもマスタファイルへのフルパスを指定することがいけないということで非推奨なのでしょうか?
となるとファイルが更新されたタイミングでキャッシュがリフレッシュされるという事が無くなり、そもそもこのフロントエンドの意味が無くなり、このフロントエンド自体が非推奨になってしまうと思うのですが・・・
0272nobodyさん2010/04/23(金) 12:26:10ID:???
>>271
質問なげえよ。master_files使えって意味だよ。
同じ役割だから、小さい方は廃止予定なんだよ。よくあること
0273nobodyさん2010/04/24(土) 04:32:30ID:6V3fZIph
すみません、誰か>>270の質問に意見お願いします。
いまだに原因わからずで… 勝手言ってすみません、気が向いたらお願いします
0274nobodyさん2010/04/24(土) 05:40:42ID:???
>>273
$results を foreach してみたら?イテレーターみたいだから。

参考
http://d.hatena.ne.jp/boto/20070923/1190482142
02752732010/04/24(土) 16:15:43ID:???
>>274
ありがとうございます!
そのページも見てたんですけど、var_dumpで確認すれば万能って思ってました
イテレータって物自体知らなかった… 本当にありがとう!
0276nobodyさん2010/05/01(土) 10:59:43ID:???
フレームワーク初挑戦とおもってクイックスタート読もうとしたら英語か・・・目次だけ日本語とかパケ詐欺からよ;;
低学歴は本買えってことか・・・
0277nobodyさん2010/05/01(土) 11:03:13ID:???
低学歴はPGやるな
0278sage2010/05/02(日) 10:44:31ID:KVSpskbJ
>>276
「誰かが翻訳しておいてくれる」のが当たり前のことだと思っているのですね。
去年の「Zend_Application まだ翻訳されていない、どうなっているんだ」や
「公式運営者はもっと頑張るべきだ」発言者のように
0279nobodyさん2010/05/02(日) 10:54:01ID:???
そういう考えの人もいるし、考え方は人それぞれ。
翻訳してやってますよ感を出す意味が分からない。
0280nobodyさん2010/05/02(日) 11:45:58ID:???
てか去年の話を蒸し返すとかどんだけ
0281sage2010/05/02(日) 12:19:45ID:Y8fRDT50
>>279
2行目が分かりません
0282nobodyさん2010/05/02(日) 23:04:41ID:???
同意を得ようと意見を放つも、否定されると「人それぞれだろ」と逆ギレするのはゆとり低学歴の特徴。
自分に理解出来ないことは、理解しようという姿勢すら示さないのも低学歴の特徴。
0283nobodyさん2010/05/02(日) 23:49:44ID:???
なんというブーメラン
0284nobodyさん2010/05/03(月) 00:58:35ID:???
>>279
お前、海賊版のソフトを平気な顔して使って
「ボッタクリ価格なのが悪い!」
「もともと買う気は無いからメーカーに損は無い!」
「むしろ俺が使う事で知名度が上がるだろ!」
とか言うタイプだろw

翻訳してやってますよとは思わないが、対価も支払う気が無い輩の言うことでは無いわなw
人それぞれで結論づけるならチラシの裏にでも書いてろよw
0285nobodyさん2010/05/03(月) 02:13:23ID:???
草の生えた文章は読む気にならん
0286nobodyさん2010/05/03(月) 02:35:26ID:???
>>285
お前、海賊版のソフトを平気な顔して使って
「ボッタクリ価格なのが悪い!」
「もともと買う気は無いからメーカーに損は無い!」
「むしろ俺が使う事で知名度が上がるだろ!」
とか言うタイプだろ

翻訳してやってますよとは思わないが、対価も支払う気が無い輩の言うことでは無いわな
人それぞれで結論づけるならチラシの裏にでも書いてろよ
0287nobodyさん2010/05/03(月) 03:11:31ID:???
痛い>>276 >>279がいると聞いてやってきました。
API Docの英語くらい理解できる程度に勉強しておけば良かったな
0288nobodyさん2010/05/03(月) 08:26:50ID:???
目次以外にも訳されてるところけっこうあるよね。
別に英語だけでも困らないけど、やっぱり日本語の方がありがたい。
0289nobodyさん2010/05/03(月) 18:41:49ID:7alvR5zV
質問なんだけど、みんなサーバのメールソフト,MTAは何使ってる?
sendmail?postfix?qmail?
zendFWのサービスていうかzend_mailを使うにあたって、3つのうちで特に相性がいいものってあるのかな?
zend_mailの利用に関して注意点とかトラブルとかあった?
あったら教えてください。お願いします。
0290nobodyさん2010/05/03(月) 20:36:44ID:???
互換性気にするなら、sendmailしかないでしょ。
0291sage2010/05/05(水) 00:26:42ID:/pDwsnJ7
>>289 , 290
290を補足すると、 Zend_Mail_Transport_Smtp 及び Zend_Mail_Transport_Sendmail が
sendmail を前提にしており、他のMTAをカバーするためのクラスは、まだ用意できていなかったはずです
0292nobodyさん2010/05/06(木) 00:26:10ID:j7c7uMQS
>>290,291
ありがとうございます

っていうか、マジで?sendmailしか対応できないの?
Sendmailってセキュリティ設定が難しくて敬遠されがちらしいし、
扱いやすいpostfixにMTAを切り替えてたんだけど、無駄なことしたのかな…orz
やっとインスコ成功したのに…
調べてみます、ありがとう
02932922010/05/06(木) 00:45:43ID:j7c7uMQS
一人で何度も聞いて申し訳ないのですが、zend_mailについてもう一つ質問です。

zend以前の問題かもしれないですが、ttp://blog.enjoitech.jp/article/201 を見ると、
自前のサーバ上のMTAを使わず、gmailを使ってメール送信できるそうですが、
・自前でMTAを利用する
・gmailで送信する
この二つのメリット/デメリットは何でしょうか?

思いつくのはgmailのダウン時の巻き添えくらいしかないのですがほかに何かありますか?
0294nobodyさん2010/05/06(木) 00:58:07ID:???
>>292
>>っていうか、マジで?sendmailしか対応できないの?
SMTP経由すればMTA関係無いんじゃないか?

>>293
・自前でMTAを利用する
 自由に弄れる反面、コストもかかるし維持も面倒。

・gmailで送信する
 制限はあるが、コストはかからない。

作るサービス次第だと思うよ。
0295nobodyさん2010/05/06(木) 01:10:04ID:???
>>290-292
sendmailつっても、この場合sendmailコマンドじゃなかったけ。
うちはpostfix使っているけど特に問題なく使えているよ。
0296nobodyさん2010/05/06(木) 16:26:28ID:???
qmail も sendmail ラッパーあるみたいだし大丈夫だろ
0297nobodyさん2010/05/08(土) 04:09:56ID:???
php自体勉強をはじめてまもない為他に何を伝えればいいのか良くわかっていないのですが

ZF 1.10.3を使っていて
public function sitemapAction(){
$this->_helper->layout->disableLayout();
echo $this->view->navigation()->sitemap();
}
としたところ
Fatal error: Zend_View_Exception: Encountered an invalid URL for Sitemap XML: "http://xn--********.jp/" in C:\xampplite\htdocs\xn--********.jp\library\Zend\View\Helper\Navigation\HelperAbstract.php on line 522
というエラーが発生してしまいます。

ドメインは日本語ドメインを利用しています。
上記エラーはwindows上ですがcoreserverや自宅のlinux環境でも同様のエラーが発生します。

$container = new Zend_Navigation(array($navi));
$navigation = $this->view->navigation();
$navigation->setContainer($container);
$this->view->assign( 'crumbs',$navigation->breadcrumbs()->setLinkLast(true)->setMinDepth(0));
$this->view->assign( 'menu' ,$navigation->menu());
は動作してるのでZend_Navigationの使い方は間違ってないと思うのですが
解決のヒントや、そもそもsitemapは日本語では動かない等あきらめたほうが良い等
アドバイスをいただけないでしょうか?
0298nobodyさん2010/05/09(日) 17:05:23ID:???
Zend_Controller_Router_Route_Interfaceを実装して
オリジナルのRoute作ってるんだけど
assemble()ってどういうときに呼ばれるんだろうか?
今のところ何も実装しなくても希望の動作になってるから良いのだが。。

ちょっと調べた感じ、Redirectのときに使われるっぽい?
RouterでRedirect?よくわからん。。。
0299nobodyさん2010/05/10(月) 11:25:43ID:???
Apache1.3で%7Fが使えなくて困ったときに使ったことあるな。
 配列→パス が assemble() で
 パス→配列 が match()
心臓部分なので実装しなければ(空実装?)使いもにならんはずだが。
0300nobodyさん2010/05/10(月) 13:39:42ID:???
grep -r '>assemble' Zend/Controller/
個人的によく使うのはurlヘルパーかな
0301nobodyさん2010/05/10(月) 20:26:01ID:???
>>299
>>300

なるほどthx

Router_Route_Hostnameの正規表現版みたいなのを
作ってルーティングしてるんだけど、今のところ
assemble(){ exit('hoge');}
って書いてても全然呼ばれないのだが。。。
urlヘルパーを使ってないから?

もともとJava-Spring使ってて最近PHP-Zendに移ってきたんだけど
Route_AbstractのgetVersion()をオーバーライドすると
match()のパラメータ型が変わったりするし、なんだかややこしいな。
ていうかRoute_Interfaceの全メソッドにコメントがないし…
インタフェースにコメントないAPIとか初めて見たよ。。
でも逆に勉強になるな。
0302nobodyさん2010/05/15(土) 16:46:48ID:???
結局のところ、Zend_mailの文字化け対策はQdmailと併用するのがベストなの?
あと、Zend_mailで送信サーバをGoogleにして使うとき、送信者アドレスが
Gmailのアドレスになるのはどうしようもない?
0303nobodyさん2010/05/15(土) 16:47:51ID:9enG3To7
あ、さげちゃった。 age
0304nobodyさん2010/05/15(土) 16:51:16ID:9enG3To7
× Zend_mailで送信サーバをGoogleにして使うとき
○ Zend_mailで送信サーバをGmailサーバ指定して使うとき

の間違いでした、ごめん
0305nobodyさん2010/05/15(土) 16:56:30ID:???
みんなの意見が聞きたいです。
私がPHPのシステムを構築するときは、管理画面とフロント画面があるシステムを作ることが多く、
モジュールの仕組みを自分なりに使って以下の様に実現しています。

■管理画面
http://localhost/webmaster/hoge/huga
=> webmasterモジュールのhogeコントローラのhugaアクション呼び出し

■フロント画面
http://localhost/hoge/huga
=> defaultモジュールのhogeコントローラのhugaアクション呼び出し

ディレクトリ構造は以下(抜粋)
application
|-modules
 |--default
 | |-controllers
 | |-models
 | |-views
 | --webmaster
   |-controllers
   |-models
   |-views

これだと、モデルがそれぞれのモジュール内に配置されることになり、よい面もあると思うのですが、
ほとんどのシステムで管理画面とフロント画面で同一のモデルを使うことが多いので、
webmasterモジュールの方にはmodelを実装しないで、defaultモジュールの方のmodelsにinclude_pathを通し、どのモジュールからもdefaultモジュールのmodelを呼び出すようにしています。

ただ、このやり方がどうしてもしっくりこないので、もう少しスマートなやり方を模索しているのですが、なかなかいい案が浮かびません。

みなさんは管理画面とフロント画面があるようなシステムを構築するときは、どんなやり方でやっていますか?
0306nobodyさん2010/05/16(日) 00:33:05ID:9d3ZuTyk
>>305
ズバリそのやり方してる、俺もなんだかなぁって感じ。
違和感拭えないよね
0307nobodyさん2010/05/16(日) 00:41:06ID:/nPzlLMd
>>305
application の直下(modules と同階層)に models を置いている。
共通のはそこに置く感じ。
Zend_Application 使ってれば application/models は autoload 対象になるしね。
03083052010/05/16(日) 12:51:20ID:???
>>306
>>307
ありがとうございました。
参考になりました。

Zend_Applicationは確かモジュール毎のiniファイルの記述方法がよくわからなくて、挫折した記憶があります。
もっとよく見てみようと思います。
0309nobodyさん2010/05/18(火) 10:33:48ID:f5A4YuVy
>>308
307じゃないけど、Zend_Applicationに関係なく、
アプリケーション全体で共有する可能性のあるものは、
applicationの下に置くよ。
静的なリソースは別ね。
0310nobodyさん2010/05/26(水) 16:04:27ID:???
ZendFrameworkってセキュリティはどうですか?
例えばgrep()でeval()やpreg_replace(eを使用)してユーザリクエストが混ざっているとか、$_FILESを組み込んだアップロード時に脆弱性が無いかとか、ヌルバイト&Dir遡り攻撃に対処しているかとかです
基本的なXSS、ScriptInsersion、SQLインジェクション、セッションハイジャック対策が全体的なコード中に施行されているのか知りたいです

ZFで構築後、また一から各セキュリティホールの確認とか大変だなぁ、と思いまして
FWの作者がZendなので最新バージョンはそういうのにほぼ対策をしているとは思うのですが、こういう攻撃には弱いというのがあったら教えていただきたいです
0311nobodyさん2010/05/26(水) 16:30:03ID:???
FWレイヤーで対処すべきコードは基本的に対処されてる。
でも、個々のアプリケーションでもケアは必要。
ユーザリクエストにコマンドが混ざるとかはアプリケーションの仕様であってFWは感知すべきじゃない、
セッションハイジャックを防ぐための支援機能はあってもそれを使うかどうかはプロジェクト次第

セキュリティホールってのは開発者が責任を持って対処するべきなんじゃないの?
「大変だなぁ」って思うんなら、FWじゃなくて既存のプロダクトをカスタマイズして使う方がいいよ
FWに任せて自分は対処しないって風になると、いくらでも穴は開くからね
0312nobodyさん2010/05/27(木) 00:28:31ID:???
セキュリティ対策をframeworkに頼ってる奴とか最悪すぎる
0313nobodyさん2010/05/27(木) 00:52:04ID:???
ASP使いには多いけどなw
0314nobodyさん2010/05/28(金) 09:04:18ID:???
>>312
セキュリティ対策をFWに頼っているわけではないんだが、例えば(まぁないとは思うが)どこかのコンポーネント内でhtmlspecialcharsとかが入っていない為セキュリティホールになったりしないかということ
そういう場合わざわざソース見て自分で書き直しとかめんどくさいんで
最低限のクォート処理とかそういう事です
0315nobodyさん2010/05/28(金) 13:53:13ID:???
>>314
DB系であれば必要な箇所では適切にエスケープされるし、エスケープ方式も設定出来る。

htmlspecialcharsのように場合によっては不要なエスケープは強制されないので、
自分で適切に処理する必要がある。
0316nobodyさん2010/05/28(金) 20:32:15ID:???
>>314
まぁ、言いたいことはわからないでもない。
残念ながら、"現段階では"ソースのチェックが必要な気がする。

HTML関連のViewヘルパーでのエスケープはされてるけど、
たとえば、文字コードの指定はロケールを見てるかどうかとか

Viewでエスケーパを指定できるようだけどオプションは?とか。

タグを自動育成するタイプのコンポーネントで穴がないかとか
その辺はやっぱり使うときにソースを確認した方がいいと思う。
0317nobodyさん2010/05/29(土) 03:27:50ID:???
perlなんかだと、プログラマーが気を使っても
プレースフォルダ使っててもDBI/DBDに問題があったら…
今のとこであったことないけどHTML::FillInFormに問題があったら…

DBI,DBDの仕組みも大儀でいえばFWなのでそういった面では
FWにセキュリティホール対策は任せたい/任せてる部分てあるよね?

とここのところの流れを見てておもいました。
0318nobodyさん2010/05/30(日) 19:32:08ID:???
へたれプログラマだと
ソースを確認しても信頼性の評価なんてできないから
自分が作るよりはましと考えて信じて使うしかない
0319nobodyさん2010/05/31(月) 13:36:10ID:iVMHao47
>>299

>Apache1.3で%7Fが使えなくて困った

ZFと無関係な話ですが、どういう意味ですか?
昔作ったシステムが今もApache1.3で動いてるんで非常に心配です。
とりあえずurlencodeは使ってますが、それでも問題が起きることがあるんでしょうか?
知ってる人、教えてもらえないでしょうか?
0320nobodyさん2010/05/31(月) 15:28:20ID:???
試せばいいのでは
0321nobodyさん2010/06/01(火) 10:23:47ID:???
AllowEncodedSlashesでググレ
03223192010/06/02(水) 13:22:49ID:NqHn07VJ
>>321
ありがとうございました。
調べたところ問題なさそうでした。
0323nobodyさん2010/06/04(金) 15:51:23ID:???

/index = IntexController->indexAction();
/hoge = IndexController->hogeAction();

とルートしたい場合、独自Routerを書かないと駄目でしょうか?
設定で対応出来るものでしょうか?
0324nobodyさん2010/06/04(金) 16:27:09ID:???
staticでもregexでもrouteでもいける
0325sage2010/06/06(日) 10:36:36ID:???
奈良県人と高野豆腐が大嫌い
0326nobodyさん2010/06/09(水) 16:15:06ID:zdg5Ro52
お世話になります。

Zend_Session::rememberMe()
をログイン画面でログイン成功時に使用しています。

引数には1800秒を指定しているのですが、
この場合、ログイン成功してから1800秒間
セッションが有効になるのでしょうか?

ログイン後の次の画面で
Zend_Session::start();
を呼んで、ログインに成功しているかどうかを判断しているのですが、
Zend_Session::start();をコールしただけでは
セッションの生存期間はリセットされないのでしょうか?

0327nobodyさん2010/06/11(金) 12:51:52ID:1eqyNkqt
過疎ってる?
0328nobodyさん2010/06/13(日) 04:57:57ID:???
zfコマンドて皆使ってる?
0329nobodyさん2010/06/13(日) 05:25:30ID:???
一番最初にディレクトリ構造作るときしか使ったことない。
0330nobodyさん2010/06/13(日) 07:21:39ID:???
delete がないから使いづらい
0331nobodyさん2010/06/13(日) 07:57:06ID:???
自分も最初にディレクトリ構造作っったものをコピペで済ましてるわ。

ローカル環境にPHPいれてZF最新版いれて・・・ってやる程恩恵あるのかなと疑問に思ったんだけど、
覚えなくてもいい感じかね。
0332nobodyさん2010/06/14(月) 20:34:32ID:sDoDPQ6e
Zend_Service_Amazon_Itemってどう使ったら良いの?
恥ずかしいんだけど簡単に教えて欲しい、

$query = new Zend_Service_Amazon($access_key, 'JP', $secret_key);
$results = $query->itemSearch(
array(
'SearchIndex' =>'Music',
'Keywords' =>$params['key']
)
);

この$queryと$resultsに対してどうしたら良いのか。。
Amazon/Item.phpの
public function __construct(DOMElement $dom)
をどう解釈したら良いのかわからない…

誰かアドバイス頼みます
0333nobodyさん2010/06/14(月) 22:17:48ID:+e+bNGnA
>>332
$results を foreach で回す。

foreach ($result as $k => $v) {
var_dump($v);
}
0334nobodyさん2010/06/15(火) 10:40:13ID:???
>>333
どうもありがとう、自己解決したよ
searchのオプションで'ResponseGroup' => 'Medium',指定しないと必要な情報が
そもそも取れないのを気づかなかった
アドバイスもサンキュー
0335nobodyさん2010/06/16(水) 16:18:46ID:N9yq5s20
Zend_Dbのqueryメソッドでupdateしたときの返り値Zend_Db_Statementオブジェクトについて知りたい。
この返り値$objは $num = $obj -> rowCount(); でアップデートの対象件数を
調べられるってことだけど、これについて教えて欲しい。

具体的に言うと、 アップデートする既存データ(カラム情報)と上書きするデータが
全く変化がないとき、$num=0を返すんだけど、これってこれで正しいの?

まるで変更前のカラム情報と変更後のカラム情報を比較して、実際のupdateするしないを決めてるみたいな挙動だけど
純粋にWhere以下の条件をクリアしてるアップデート対象の件数を返すと思って
更新のエラー判別や件数判定しようと思ってたので困ってます。

ZendFWは1.10、DBはMysqlです。
03363262010/06/16(水) 16:42:17ID:XZSSnjmG
前回の質問で回答をいただけなかったのですが、
どなたかご存知の方はいらっしゃらないでしょうか。
0337nobodyさん2010/06/16(水) 16:44:39ID:???
まさかこの一週間ずっと待ってたのか
03383262010/06/17(木) 11:07:21ID:???
>>337

色々と試行錯誤しながらも
皆様からのご意見をお待ちしておりました。

現状まだ解決しておりませんので
ご意見いただけると幸いです。
0339nobodyさん2010/06/17(木) 12:45:38ID:???
ワロタww
0340nobodyさん2010/06/17(木) 14:18:36ID:???
>>338
セッションの生存期間を延長したければ、もういちどrememberMeをコールしたほうがいいよ。
03413262010/06/18(金) 00:18:45ID:???
>>340

ご回答ありがとうございます。

できれば、一度ログインして
タイムアウトもしくはログアウトをするまでは
同じセッションIDを使用したいと考えています。

rememberMeを呼ぶとセッションIDが書き換わるようなので
ちょっと困っています。

同じセッション間でユーザがどのように
ページを遷移していったかログをとりたいのですが、
その時に識別するキーにセッションIDを使用しています。

セッションIDを使うのではなく、別の一意のIDを用意するべきでしょうか?
0342nobodyさん2010/06/18(金) 01:06:33ID:???
なんで小出しにしたの
0343nobodyさん2010/06/18(金) 05:58:12ID:???
>>341

> セッションIDを使うのではなく、別の一意のIDを用意するべきでしょうか?

はい
0344nobodyさん2010/06/18(金) 06:24:53ID:???
セッションハイジャックも考えて内部で別の値で保持せよ
という神の啓示セヨ
03453262010/06/19(土) 12:24:02ID:???
>>343 344

ありがとうございます。

それではセッションID以外の一意のキーを用意するようにします。

rememberMeもあまり多用すると、パフォーマンスに影響するという
情報もありましたので、要所要所で使用していきたいと思います。
0346nobodyさん2010/06/19(土) 12:46:56ID:???
rememberMe()ってクッキーの有効期限を操作するものだと思ってた。
0347nobodyさん2010/06/19(土) 16:33:15ID:MplSKe7W
Zend_dbのトランザクション処理について質問。
DBがMysqlのとき、トランザクションでcommit()メソッドを使って処理が成功した場合
$db->query($q1);
$db->query($q2);
$rs = $db->commit();
の返り値$rsをvar_dump($rs)したら、object(Zend_Db_Adapter_Pdo_Mysql)なんだけど、
このオブジェクトからエラーコードや処理した行数を取得するメソッドってないのかな?
エラーだけならtry~catchの分岐で捕まえられるけど、行数を取得するにはどうしたらいいの?

非トランザクション処理で返ってくるZend_Db_Statement_Mysqliオブジェクトの場合、
rowCount()とかerrorCode()とかのメソッドを利用してクエリ結果を簡単に確認出来るけど
トランザクション時の方はわからない。
どなたかアドバイスお願いします。
0348nobodyさん2010/06/19(土) 22:51:45ID:???
>>347
トランザクションの時も同じだよ。

commit()はあくまで処理を確定する為のメソッド、
実際に処理が行われるのはquery()メソッドなので、
その戻り値(Zend_Db_Statement_Mysqli)で処理結果を取得すればいい。
0349nobodyさん2010/06/20(日) 00:19:42ID:???
>>348
おお、レスありがとう。じゃあ、トランザクション処理としてfor文で
クエリ($rs=$db->query($hoge))を10回繰り返すとしたら、
$n = $rs->rowCount(); とか $rs->errorCode();とかの処理も
10回for文の中で繰り返さなきゃいけないわけだよね
しょうがないけど、効率悪いような… ともかくありがとう
0350nobodyさん2010/06/20(日) 00:38:46ID:???
>>349
それはZendじゃなくてSQLの仕様だよ
10回クエリを投げるなら、10回期待した結果が得られたかどうかキチンと判定しないと、
commitもしくはrollbackが出来ないだろうさ
0351nobodyさん2010/06/20(日) 01:13:52ID:???
commitしたってことは各回のクエリに失敗は無かったってことでしょ?
たとえば5回目でinsertするカラムの数と値の数があわなかったらエラーで
rollbackされるわけだよね?
逆に言えば複数回のクエリ(トランザクション利用)の「全体としての成功/失敗」程度しか
確認が必要じゃない時は
commitできたときはtrueをreturn、rollbackのときはfalseなりエラーメッセージをreturnで
検証完了と割り切っちゃって良いのかな
0352nobodyさん2010/06/20(日) 02:11:43ID:???
>>351
>commitしたってことは各回のクエリに失敗は無かったってことでしょ?
>たとえば5回目でinsertするカラムの数と値の数があわなかったらエラーで
>rollbackされるわけだよね?

これは逆じゃない?
commitする前にクエリが正常に完了したかどうかを自前で判断して、
OKであればcommit、NGであればrollbackを行うべきかと・・・

SQLクエリ自体が通ってしまえば、commitは出来てしまうので、
commitが出来た=全体として成功って判断は危険だと思うよ。
0353nobodyさん2010/06/20(日) 02:22:43ID:???
こんな時間に申し訳ないです
トランザクションの認識自体がオカシイ、Zend以前の問題ぽいですね
ttp://pluto-blog.blog.so-net.ne.jp/2007-01-15
こんなサイト見つけて、この考え方で良いのかなって思ったんだけど…
0354nobodyさん2010/06/20(日) 03:14:42ID:???
>>353
そのサイトの超絶簡単サンプル1だね。
サンプルでは「SQLクエリにエラーがなかった場合、処理は成功」としているけど、
例えば「行を削除するが、テーブルの行が5件未満になってはいけない」みたいな条件がある場合、
単にSQLクエリが成功したかどうかで判断するのは難しいよね。

例)DELETE句自体に問題は無いのでcommit()出来てしまう。

$db->beginTransaction();
try {
 $db->query("DELETE FROM tableName");
 $db->commit();
} catch (Exception $e) {
 $db->rollBack();
}

これではマズイのでcommit()を行う前に、
自前でDELETE後の行数を確認する必要があるわけだ。
0355nobodyさん2010/06/20(日) 18:48:10ID:???
>>351
空港でチケット止めたり、ICカードシステムが止まるような仕様だよそれ。
普段はうまく行ってるけど、実はバグってて見えないだけ、を隠蔽してる。
03563512010/06/20(日) 23:49:48ID:???
>>354,355
どうもありがとう。正直すんなり理解出来ないんですよね、トランザクション勉強し直しかなこりゃ。。
>「行を削除するが、テーブルの行が5件未満になってはいけない」みたいな条件がある場合
…というような条件は無いんだけど、ループするクエリ処理をその都度検証すべしってことは

try{
 $success = 0;
 for($i=0;$i<$loop;$i++){
  $rs = $db->query(insert 〜);
  //以下で登録クエリの成功を確認
  $chk1 = $rs->rowCount();
  $chk2 = $rs->errorCode();
  if($chk1==1 && $chk2=="00000")$success++;
 }

 if($success ==$loop){
  $db->commit();
 }else{
  //ループのどこかで失敗してる
  $db->rollBack();
 }
} catch (Exception $e) {
 $db->rollBack();
}

こんな感じでいいんですかね?
5件以下になってはいけない云々みたいな条件が無い時でもこういう処理が必要なら
トランザクションの説明全部にそう書いてて欲しかったなぁ… ずっと誤解してたよ
0357nobodyさん2010/06/21(月) 00:03:17ID:???
>356
途中でエラーが出た場合、ループを抜けないと無駄なクエリを発行する事になってしまうので、
ループ部分はこんな感じでもいいと思う。
for($i=0;$i<$loop;$i++){
if($db->query(insert 〜)->rowCount() != 1)
throw new Exception('クエリの結果がおかしいです><');
}

>トランザクション
簡易カートシステムを設計してみると理解し易いかもよ。
1回の処理で、在庫確認、発注処理、決済処理が発生して、
1つでも失敗した場合はrollbackを行う。みたいな。
0358nobodyさん2010/06/21(月) 00:14:33ID:???
複数のクエリを不可分に実行しないと全体としての整合性が保てないときに、
その不可分なクエリをまとめるのがトランザクションで、
含まれるクエリ全部が成功するか、あるいは何もしなかったことにするか、
どっちかの結果しかない。(中途半端な成功はデータの不整合になる)

特に指定しなければ、1つのクエリが1つのトランザクションという扱いになってる。

というのがオイラの理解。
03593512010/06/21(月) 00:14:59ID:???
>>357
おお、素早いレスありがとう。
その例だとわかりやすいし、よく銀行の出金〜入金を例にしてるけど
そういうサンプルでも出勤処理と入金処理それぞれのクエリ文2つ並べてるだけで、
それぞれの結果をチェックしてるのみたことないよ
だからcommit処理ってエラーチェック自体したうえでcommitしてるものだと思ってた

まあZendFWと関係ないレベルで申し訳ないです。
勉強になりました。ありがとう。
03603512010/06/21(月) 00:16:48ID:???
>>358
こちらもありがとう。
もう少しトランザクション調べるよ。ほんとにありがとう。
0361nobodyさん2010/06/22(火) 16:44:11ID:???
>>359
いや、つーか惜しかったんだよ。
commitが成功するか、否かじゃなくて例えば100件個別にインサートするのに
100回実行した後で、インサート件数が100件じゃなかったらrollbackする、
つうまとめてチェックなら一般的に用いられてる。それでも失敗した件数
(出来ればとれが失敗したか)をユーザに知らせる親切設計にするんだけどね。

まぁTwo phase commit とかsave point経験すると、この辺は呼吸するみたいに
当然の仕様になるんだが、、、金融系だと1円のミスでも塵積で賠償問題に
なっちゃうからね。
0362nobodyさん2010/06/22(火) 16:45:59ID:???
なんだこいつw
0363nobodyさん2010/06/22(火) 17:55:44ID:???
最近PostgreSQLの新機能覚えて言いたくて仕方ないんだろ
0364nobodyさん2010/06/22(火) 20:27:27ID:???
は? ツーフェーズなんて10年の昔からあるだろ。
お前ら程度だとまっさきにバグるだろうがな。
0365nobodyさん2010/06/22(火) 20:34:28ID:???
ここPHPのWebフレームワークのスレだよね?
0366nobodyさん2010/06/22(火) 20:35:54ID:???
>金融系だと1円のミスでも塵積で

もうこの一言で程度が知れるなあ
気の毒に
0367nobodyさん2010/06/22(火) 20:35:58ID:???
じゃあDB抽象化すんなよ
0368nobodyさん2010/06/22(火) 20:41:24ID:???
PostgreSQLじゃなきゃ最近基本情報の勉強でもしたんだろたぶん
じゃないとこの流れでいきなり2相コミットの話なんて出ようがない
0369nobodyさん2010/06/22(火) 20:46:10ID:???
SAVE POINT使おうが使うまいが全然関係ない話じゃん
rollbackもしくはcommitしたあとの結果の話なんだから
2PhaseCommitに至っては全く持って話と関係ないし
0370nobodyさん2010/06/23(水) 05:46:35ID:???
出来ないPGの特徴
議題が読み取れないのに、聞いてもいない自分論を喜々として語る。
その内容も大抵は誰の得にもならない、意図不明な物が多い。
0371nobodyさん2010/06/23(水) 08:53:23ID:???
今や銀行やクレジットのシステムもZend_DBが使われてるんですね!
0372nobodyさん2010/06/23(水) 10:39:45ID:???
1.10.6
0373nobodyさん2010/06/24(木) 08:49:30ID:j4+/2c3l
zendで日次batch処理をしたいのですが、検索に出てきませんでした。
bootstrupに登録したdbの情報も使うので、単純にapplication/batchを作ってスクリプトを再生して起動しても、
bootstrupを通らないので、うまくDBなども使えません。
コントローラーを使うかのようにバッチを使いたいです。
やり方が記載されているページなど有りましたらおしえてほしいです。
0374nobodyさん2010/06/24(木) 09:11:32ID:???
>>373
バッチ用のBootstrap&Dispatcherを作ればいいと思うよ。

面倒なのであればバッチからWEB呼び出しちゃえば?
file_get_contents("http://xxxxx/xxx");
0375nobodyさん2010/06/25(金) 01:30:49ID:AQc08b3W
ZFPlanetとWebf_Controller_Router_Cli
0376nobodyさん2010/06/27(日) 07:11:07ID:???
Saasesみたいな安くて使い勝手がいいVPSが出てきた今、
無理してPHP使う理由なくなってきたなぁ
0377nobodyさん2010/06/27(日) 10:36:41ID:???
えっ
0378nobodyさん2010/06/28(月) 02:58:43ID:???
えっ
0379nobodyさん2010/06/28(月) 13:39:35ID:???
無理してPHP使うってどういう場面だよw
PHPしか動かないレンタルサーバなんてまず滅多にないだろ
0380nobodyさん2010/06/28(月) 13:48:03ID:???
俺はZend Frameworkを使いたいからPHPを使ってるけど、PHP自体にはあんまり興味ない。
0381nobodyさん2010/06/28(月) 15:07:53ID:???
何でZendFramework使いたいの?
PHPの中では便利だけど、PHP以外でなら選択肢は山ほどあるだろうに。
0382nobodyさん2010/06/28(月) 15:18:21ID:???
どんな便利な選択肢があるんだ例えば
Railsとか死ぬほどクソだったわ
0383nobodyさん2010/06/28(月) 15:20:21ID:???
1.Kohana
2.SAStruts
3.Zend
4.Catalyst
5.Click

って感じだな俺の評価は
RubyやPythonはそもそも言語的に微妙
やっぱPerl、PHP、Javaでまとまっちゃうわ
0384nobodyさん2010/06/29(火) 10:12:03ID:???
>>383
PHPしかつかったことないWebプログラマなんだけど
RubyやPythonの方が言語的に微妙って
どの辺からそう感じるんだろうか
自分がPHP使ってて苛々することが多い上に
RubyやPythonの評価見てると逆だと思ってた
0385nobodyさん2010/06/29(火) 14:29:24ID:???
商売として微妙という意味じゃないかな

OOP流行りだからPHPは言わずもがな使い辛いとなる
ただ言語仕様守らない人にとっては何使っても一緒
0386nobodyさん2010/06/29(火) 18:46:44ID:???
RubyはPythonってのはマイナーだけにそれが好きで使ってる人しかいないから評価が高いだけ
好みに合わなくても無理矢理使わされる人が殆どいないからいい評判ばかり聞こえてくる
0387nobodyさん2010/06/29(火) 19:47:06ID:???
前は
Java(Servlet)+SpringMVC+Velocity+Jakartaいろいろ
を組み合わせてやってたけど、ちょっとしたサイトつくるときに
レンタルサーバで動かせないから
PHP+ZendFrameworkに移行したんだけど
上記の組み合わせとほぼ同じ感じで出来てるから満足してる。
0388nobodyさん2010/06/29(火) 19:51:06ID:???
あ、でもパフォーマンスはやっぱりJavaServletのほうがいいかな。
コンテナ起動中はApplicationスコープに変数保持してられるし、
PHPでもmemcachedとか使えばいいんだろうけど、手軽さが全然ちがう。
0389nobodyさん2010/06/29(火) 19:53:43ID:???
というわけで、常に専鯖使える環境だったらJava使うかなあ。
Apacheプロジェクトで良質なFW・ライブラリが選り取り見取りだし。
0390nobodyさん2010/06/30(水) 02:14:21ID:???
>>386
勘違い乙。
だいたいRubyやPython使ってる連中は他言語を使ってる。
ちゃんとつかって>>383みたいな評価するのは超少数派。
というか使ってるかどうかすら怪しい。
0391nobodyさん2010/06/30(水) 14:54:36ID:???
え?
0392nobodyさん2010/06/30(水) 15:32:22ID:???
>>390
勘違い乙。 返しw
0393nobodyさん2010/06/30(水) 15:52:01ID:???
個人的な使い心地で言えば、
手軽さと利便性はPHP、言語仕様としてはRubyを評価するかな。


PHPの気持ち悪い点

・namespaceの区切りがバックスラッシュ
・無理矢理っぽい無名関数
・try catchにfinalyが無い
・goto文
・引数の型チェックが中途半端(stringとか指定出来ない)
0394nobodyさん2010/06/30(水) 17:07:27ID:???
Pythonには勝てん。
0395nobodyさん2010/06/30(水) 17:22:46ID:???
気持ち悪さで言うと一番気持ち悪いのはRubyだろ。
0396nobodyさん2010/06/30(水) 17:44:40ID:???
Perlの事も(ry
0397nobodyさん2010/06/30(水) 17:58:24ID:???
RubyはDelphiっぽいだけで気持ち悪くはない
気持ち悪いけど
0398nobodyさん2010/06/30(水) 20:17:05ID:???
Javaは気持ち悪さはないけど面倒くさい

ていうかここZFスレね
0399sage2010/07/03(土) 00:16:16ID:???
1回だけPHP全般的なコト書いちゃうけれど

try catch の finaly は確かに欲しいね。
Ruby の入門書を見て便利だなと思ったのは、各文字列オブジェクトごとに文字エンコードをプロパティーとして指定できるところ。
0400nobodyさん2010/07/03(土) 05:10:13ID:???
>>393
>>399

同じtypo
0401nobodyさん2010/07/04(日) 16:17:02ID:???
PHPのtry catchってpythonみたいに既存のどんなerrorでも捕まえられるわけじゃないのね
0402nobodyさん2010/07/04(日) 20:37:45ID:???
errorを捕まえるためのものじゃないからね
0403nobodyさん2010/07/04(日) 20:38:37ID:???
てか、ZFと関係ないしw
PHPの初心者スレか、自分のブログに書いたらいいよ
0404nobodyさん2010/07/04(日) 22:41:57ID:???
ZF使って1つのサーバーでそれぞれ独立したサイトを
2つ以上立てようとするとキモくなる、なんで?
0405nobodyさん2010/07/04(日) 23:15:04ID:???
ZFは君を映す鏡
0406nobodyさん2010/07/04(日) 23:47:14ID:???
俺がZFで作ったサイトになら抱かれてもいいと思えるのはそういう事だったか
0407nobodyさん2010/07/05(月) 09:38:39ID:???
>>404

うちはVirtualHost別にmodule振り分けるRouter自作してやってるよ。
いい感じに疎結合になるし、管理も楽。
0408nobodyさん2010/07/05(月) 10:20:06ID:???
host名で振り分けるルートはもともとあるけど、Routerを自作する理由はなに?
0409nobodyさん2010/07/05(月) 13:01:04ID:???
>>408
Zend_Controller_Router_Route_Hostnameだと、

:hoge.fuga.com

とかやると:hogeが省略出来ないとか、
あと他にも理由あったような気がするけど
正規表現でHostnameマッチできるRouter自作した。
0410nobodyさん2010/07/05(月) 13:03:27ID:???
あ、あとmuduleにRouteされたときだけ
module用のPluginが登録されるようにした。
0411nobodyさん2010/07/05(月) 13:10:07ID:???
>>409
どのくらい複雑なHOST名にしてるのか知らないけど、
Hostnameでも複数ルートを登録できるから、その程度の理由なら自作しなくてもいいな。
他にも理由があったと言う他を思い出したら教えて

>>410はプラグインとZend_Applicationで処理するのが常道だけど、
Routerに書いてんの?Routerでプラグイン登録?まぁ、いいけど。
0412nobodyさん2010/07/05(月) 14:56:06ID:???
>>411
あ、RouterでPlugin登録してるわけじゃないよ。

Module別Bootstrapはあるけど、
Module別Pluginが欲しかったから
Routeされた段階で遅延登録されるようにした。

Host数=Module数は30個くらい?で、
その中でもさらにサブドメイン(?)をパラメータにして
いろいろやってた。

ちなみに今のバージョンでどうなのかは知らない。。
0413nobodyさん2010/07/05(月) 15:00:43ID:???
あとroutesの設定ファイルがXMLで
route要素もextendsとか多用してて複雑になってたから
標準のRoute_Hostnameだと
対応できなかったから自作したんだっけかな?
0414nobodyさん2010/07/05(月) 15:05:19ID:???
そうだ思い出してきた。

まず正規表現でHostnameからパラメータ取得したかったのと、
その際にPunycodeをデコードしたかったんだった。
0415nobodyさん2010/07/05(月) 15:48:35ID:???
なるほどねー
おれだったら、正規表現はmod_rewriteで済ませて、
デコードはルーティングに入る前にプラグイン処理だな。
もしくは、RouterじゃなくてRouteで。
まぁ、Routerでもいけるだろうけど。
0416nobodyさん2010/07/05(月) 17:46:39ID:???
ぷに〜コードのデコードめんどくさくてフレームワーク放棄した俺とは大違いだ(笑)
0417nobodyさん2010/07/13(火) 22:41:12ID:???
よくPlugin作ってdispatchLoopStartupに認証や共通処理をうんぬんって見るけどさ、
画像のリンクが切れてるだけでdispatchLoopStartup何回も走るとかうぜぇ・・
0418nobodyさん2010/07/14(水) 00:21:27ID:???
「画像のリンクが切れてるだけ」と事前に判別出来るなら、
dispatchする前に別処理へ移行すればいいだけの話だ
0419nobodyさん2010/07/14(水) 05:41:59ID:???
>>417
mod_rewriteで対処でしょ jk
0420nobodyさん2010/07/16(金) 15:47:04ID:???
Zend_FormでsymfonyにあたるsfFormのsetNameFormatってどうやったらいいの?
0421nobodyさん2010/07/22(木) 09:02:40ID:8xnHx2ro
初心者です。
ネットとかみてZend_Fromを勉強中ですが、デコレーターとかのファイルを
どこに置いていますか?
Contoroller内?????
0422nobodyさん2010/07/23(金) 14:07:23ID:???
フィルタじゃね
0423nobodyさん2010/07/30(金) 23:46:03ID:???
なぜか1.10.7がダウンロードできた
0424nobodyさん2010/08/07(土) 14:32:30ID:???
1.1から2.0は簡単に移行できるの?
0425nobodyさん2010/08/07(土) 22:28:35ID:???
2.0ってnamespaceとか使うから
簡単にはいかないんじゃない?
使わないの?
0426nobodyさん2010/09/01(水) 17:07:49ID:???
どうも。

MySQLを使用してるのですが、単純なサブクエリを実装して、
ZendFrameWork経由でデータを取得しようとしたのですが、
取得できませんでした。

発行しているSQLをコマンドラインで実行すると
ちゃんとデータを取得できました。


ZendFrameWorkってサブクエリが使用できないなどといった
制限があったりするのでしょうか?
04274262010/09/01(水) 17:14:57ID:1WzgUIV/
すみません。

バインドも使っています。
0428nobodyさん2010/09/01(水) 17:27:19ID:???
「できませんでした」の詳細を書かないとわからんわ
0429nobodyさん2010/09/02(木) 01:35:42ID:???
バインドされている値が間違ってるとかじゃね?
04304262010/09/02(木) 14:41:33ID:bqeUspcn
>>428 429

こんな感じのSQLを投げてます。
select colA1,colA2 (select count(colB3) from tableB where colB4 = :bind1 and colB5=bind2)as col3 from tableA where colA6 = :bind1 and colA7 = :bind2 and colA8 = 'hoge';

バインドを使用しているbind1とbind2の部分に直接値を記述すると
レコードは取得できるのですが、
プログラムからbind機構を使うとレコードを取得できません。

select colA1,colA2 (select count(colB3) from tableB as b where colB4 = a.colA6 and colB5=a.colA7)as col3 from tableA as a where colA6 = :bind1 and colA7 = :bind2 and colA8 = 'hoge';
とした場合はうまく動きました。

bind変数を複数個使っているのが原因でしょうか?
無知な私に救いを。
よろしくお願いします。
0431nobodyさん2010/09/02(木) 22:02:42ID:VdyJTTz3
>>430
実際の呼んでる所のコードも書かないと分からんよ。
0432nobodyさん2010/09/03(金) 00:06:56ID:???
>>430
SQLエラーやPHPエラーは出ていない?

Zend_Db_Profilerやらで、Zend_Dbから発行されているSQL文を検証してごらん。
0433nobodyさん2010/09/04(土) 16:12:12ID:???
あ、自己解決しました。
04344262010/09/06(月) 11:06:46ID:???
>>433
まだ自己解決していないです。

>>431
このような感じで実装しています。

//バインドの設定
$bind = array('bind1'=>'aaa1','bind2'=>'bbb2');
//クエリの実行$dbInfoの中にはDBへの接続設定が入っています。
$db = new Zend_Db_Adapter_Pdo_Mysql($dbInfo);
$stmt = $db->query($sql,$bind);
$rows = $stmt->fetchAll();
としています。

$rowsの中をダンプで出力すると、
select colA1,colA2 (select count(colB3) from tableB where colB4 = :bind1 and colB5=bind2)as col3 from tableA where colA6 = :bind1 and colA7 = :bind2 and colA8 = 'hoge';
の場合は何もデータがないarray()。

select colA1,colA2 (select count(colB3) from tableB as b where colB4 = a.colA6 and colB5=a.colA7)as col3 from tableA as a where colA6 = :bind1 and colA7 = :bind2 and colA8 = 'hoge';
の場合はレコードが取得できています。

>>432
SQLでも、PHPでもエラーは何も出ておりませんでした。。。

Zend_Db_Profilerで出力される情報を
バインド変数で指定している箇所に埋め込むと
しっかりとレコードが取得できました。
ホントにちんぷんかんぷんチンプイワン太夫です。

どうぞよろしくお願いいたします。
0435nobodyさん2010/09/06(月) 21:31:31ID:???
>colB5=bind2

普通にここ、コロンがないよね
0436nobodyさん2010/09/07(火) 03:37:56ID:eLHDoNIE
よろしくお願いします。zend_dbのトランザクションを以下のようにしています

$t_kihon = $this->_config->table->scheduleKihon;
$t_player = $this->_config->table->schedulePlayer;
$where_kihon = array(
$this->_dbConn->quoteInto('uId=?', $uId),
$this->_dbConn->quoteInto('uType=?', $uId),
$this->_dbConn->quoteInto('id=?', $deleteId)
);
$where_player = array($this->_dbConn->quoteInto('evId=?', $deleteId));

try{
$this->_dbConn->beginTransaction();
$ret_k = $this->_dbConn->delete($t_kihon, $where_kihon);
echo "基本>".$ret_k;
echo "<br />";
$ret_p = $this->_dbConn->delete($t_player, $where_player);
echo "出演者>".$ret_p;
echo "<br />";
$ret_c = $this->_dbConn->commit();
echo "commit>".$ret_c;
echo "<br />";
$commit = 1;
}catch (Zend_Db_Statement_Exception $e){//トランザクション失敗
$this->_dbConn->rollBack();
print($e->getMessage());
}catch (Exception $e){
print($e->getMessage());
}

つづきます
04374362010/09/07(火) 03:39:11ID:eLHDoNIE
この処理で、$where_kihonの中で一カ所故意に間違えているので('uType=?', $uId)
echo "基本>".$ret_k;の結果は「基本>0」となるものの、
echo "出演者>".$ret_p;の結果は「基本>1」となり、
実際にテーブルから該当情報が削除されてしまいます。なぜでしょうか?

$t_kihon向けのクエリが失敗しているのだから、$t_player向けのクエリも失敗し
ロールバックするのでは?と思っていましたが違うんでしょうか?
なお、echo "commit>".$ret_c;の部分の出力はされません

Zend_dbの知識以前の話になっているかもしれませんが、すみませんが
ご意見よろしくお願いします
0438nobodyさん2010/09/07(火) 10:34:39ID:an1mTvTq
Zend FrameworkのMVCモデルを使ってます。
エラーになった場合、ほとんどのケースで
'Invalid controller specified (error)'
のエラーメッセージしかでなくてどのが悪いのか
みつけるのにすごく時間がかかるのですが、
これが普通なのでしょうか?
0439nobodyさん2010/09/07(火) 11:57:19ID:???
設計が悪いとしか。ソフトの勉強した事無いでしょ?
0440nobodyさん2010/09/07(火) 12:48:16ID:an1mTvTq
>>439
工夫しないとそうなるということですね?
それについての資料などありませんか?


04414262010/09/07(火) 12:56:14ID:???
>>435
すみません。その箇所は転載時の発生した誤りになります。
実際はしっかりと「:」を入れているので、
SQLの構築でのエラーも出ていない状況なんです。

なんとも不可思議な感じです。
0442nobodyさん2010/09/07(火) 13:40:25ID:jaTKXsd6
>438
errorコントローラがないっていってるので作ってその中で(開発時のみ)色々情報出力すればOK
例外handlingはここ読むべし
ttp://framework.zend.com/manual/ja/zend.controller.exceptions.html
0443nobodyさん2010/09/07(火) 13:41:23ID:QU8+yQCW
>>441
DB側でログ取って、どんなSQLになっているか見てみて

>>438
エラーコントローラーを無効にして、エラーを表示したらいいよ。
0444nobodyさん2010/09/07(火) 15:07:59ID:an1mTvTq
>>442,443
ありがとうございます。調べてみます。
0445nobodyさん2010/09/07(火) 21:53:55ID:???
>>441
要はPDOのpreparedが普通に使えるかってことだろ?
テストしてみればすぐわかるんじゃね?下で普通に動いたけどな。

    $queryString = "select colA1,colA2, (
                        select count(colB1)
                        from tableB
                        where colB2 = :bind1 and colB3 = :bind2
                       )as colA3
            from tableA
            where colA6 = :bind1 and
               colA7 = :bind2 and
               colA8 = 'hoge'";

    $dbAdapter = Zend_Db::factory('PDO_MYSQL', $info));

    $stmt = $dbAdapter->prepare($queryString);

    $parameters = array(':bind1',':bind2');
    $values = array(1, 2);

    $stmt->bindValue($parameters[0], $values[0]);
    $stmt->bindValue($parameters[1], $values[1]);
    $stmt->execute();
    $data = $stmt->fetchAll(PDO::FETCH_OBJ);
    $stmt->closeCursor();
04464262010/09/11(土) 16:05:36ID:???
>>443
SQLにも問題なさそうでした。
副問い合わせのバインド変数の名称に
別のものを指定すると、こちらの期待通りの動きになりました。

釈然としませんが、とりあえず、プレースホルダの名称を別のものにして
やっていってみたいと思います。
0447nobodyさん2010/09/15(水) 06:29:22ID:c+gNv7dN
>>446
DB側でログとってないでしょ。
うまくいったときと、いかないときと同じSQLが発行されているわけがない。

スペルミスでした、って正直に書けないのかな
0448nobodyさん2010/09/15(水) 10:49:01ID:???
いちいち余計なこと言わないと気がすまないのも面倒な性格だな。俺とかw
0449nobodyさん2010/09/15(水) 10:57:10ID:???
ZFをやるならdwooも覚えたほうがいいよ
zendは公式サイトで解説してるほどdwooを押してるからね
0450nobodyさん2010/09/15(水) 15:39:54ID:???
dwooってなんて発音するの?
0451nobodyさん2010/09/17(金) 01:02:51ID:???
ドゥヲゥ!!
04524492010/09/17(金) 12:21:09ID:???
一応ページはここね
http://devzone.zend.com/article/12322
0453nobodyさん2010/09/17(金) 14:55:33ID:???
公式と言っても、そのサイトはPHP関連の技術全般を紹介するブログみたいなもので
ZendがDwooを特別にプッシュしてるわけではないのでは?
0454nobodyさん2010/09/17(金) 15:27:29ID:???
Vikram Vaswaniさんがこういう使い方もできますよって紹介記事書いてるだけだな
SoftwareDesignとかWeb+DB Pressの記事みたいなもんだ
0455nobodyさん2010/09/17(金) 17:17:36ID:???
>>449
それ言ったらsymfonyだって解説してたわけだが
0456nobodyさん2010/09/18(土) 00:21:20ID:???
>>449
それ言ったら公式ドキュメントにはSmatryViewの作り方まで載ってるぜ
0457nobodyさん2010/09/18(土) 03:15:59ID:HoVONag+
質問なんだけど、リクエストオブジェクトで $_FILESに当たるものを取得するにはどうしたらいいの?
無理なのかな。無理だとしたらどうやって取得すべき?
getParam('picture')とかやったんだけど無理だった。すみませんが教えてください
0458nobodyさん2010/09/18(土) 13:16:26ID:???
Zend_Form_Element_File を調べて、関連記事から他人がどうやってるか見るよろし
0459nobodyさん2010/09/19(日) 00:06:18ID:uSiTgTXw
>>458
ありがとうございます
しかしzend_formって扱いにくいんで使ってないんだけど、$_FILESの制御のために導入するなんて…
みんなzend_form使ってるの? そんなに便利?
0460nobodyさん2010/09/19(日) 00:27:48ID:iCptYkYB
>>459
ドキュメント読もうぜ。
http://framework.zend.com/manual/ja/zend.file.transfer.introduction.html
0461nobodyさん2010/09/19(日) 03:19:18ID:???
馬鹿にはzendは無理。
0462nobodyさん2010/09/19(日) 04:20:52ID:???
>>457-
>無理なのかな。無理だとしたらどうやって取得すべき?
Zend_Formを使っていないのであれば、
リクエストオブジェクトを継承した$_FILESも取得出来る子クラスを作るのが良いかと・・・
(もし必要であれば、その子クラス中でZend_Formを使えばいいし)
0463nobodyさん2010/09/19(日) 17:59:19ID:???
Zend_OpenIdの
TODO: OpenID 2.0 (7.3) XRI and Yadis discovery
がなくなってたから、
yahoo.co.jpやmixi.jpでログインテストしてみたんだけど、
エラーになっちゃう・・・

まだ対応してないのかな?
0464nobodyさん2010/09/22(水) 17:02:23ID:???
ところでさ、Zend Framework とその後ってぶっちゃけどうよ
おれもそこそこ使ってきたけど、新規案件で使うべきか迷ってる
使うなら、2.0を試すべき?
0465nobodyさん2010/09/23(木) 00:18:04ID:???
>>464
今まで使っていて新規案件で使わない理由は?
0466nobodyさん2010/09/23(木) 01:19:05ID:???
オートロード楽チン
ブートストラップ書けば大抵どうにかなる
ビューが無駄に適当でPHPそのまま
中のクラスが単体でも呼べる
外部モジュールのラッパークラスが多い

粗結合いいとこ取りだけどなんかperlぽい気がするんだよね
0467nobodyさん2010/09/23(木) 02:38:04ID:???
>>459
ZendFormは確かに使いづらいけども、他に選択肢がなくね?
ZendForm使わないで、フォームどうしてるの?
煽りとかじゃなくて普通に疑問なんだけど、
↓こんな感じなの?

<select name="Hoge">
<option value="1" <?php if ($value == 1) echo "selected"; ?>>
<option value="2" <?php if ($value == 2) echo "selected"; ?>>
</select>
0468nobodyさん2010/09/23(木) 02:52:30ID:az/C8i5M
>>467
View Helper 使えばいいんじゃね?
0469nobodyさん2010/09/23(木) 02:59:54ID:???
>>467
sfForm
0470nobodyさん2010/09/23(木) 04:12:58ID:???
えっフォームの部分だけSymfony使うの?
0471nobodyさん2010/09/23(木) 04:36:38ID:???
ZendFormはオブジェクト組み立ててバリデータだけ使ってる
0472nobodyさん2010/09/23(木) 08:21:59ID:???
>>470
symfony使わなくてもフォームだけ抜き出して使える
0473nobodyさん2010/09/23(木) 10:21:11ID:???
>>465
リリースタイミング的にphp5.3もしくは6でメンテ&追加開発していくので、
そのメリットを生かせるFWにしようかと。
0474nobodyさん2010/09/23(木) 10:45:19ID:???
え?PHP6て白紙になったやつだけど?
0475nobodyさん2010/09/23(木) 14:16:25ID:???
そうだったね。ってことでphp5.3なんだけど
04764592010/09/23(木) 16:26:48ID:???
>>467
smartyと組み合わせてる。
zendformとsmartyが共存出来るかわからないけど、
smartyで自前の関数用意して
<select name="prefecture">
{$val|selecterChk:"prefecture"}
</select>
とかなんとかやって呼び出して解決する方法になれすぎちゃってzendFormに
入れなくなっちゃった。
0477nobodyさん2010/09/23(木) 16:40:00ID:y1pwafIu
zend_dbのdeleteメソッドについて質問させてください。

以下のdelete処理を実行したところ
-----------
 echo "picTblId>>".$picTblId;
 echo "reportId>>".$reportId;

 $where = array(
  $this->_dbConn->quoteInto('id=?', $picTblId),
  $this->_dbConn->quoteInto('reportId=?', $reportId)
 );
 $retP = $this->_dbConn->delete($t_pic, $where);
========

以下のエラーが出ました。
-----------
 picTblId>>7
 reportId>>41

 SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax;
 check the manual that corresponds to your MySQL server version for the right syntax to use
 near 'WHERE `id` ='41' AND `reportId` ='41'' at line 9
========

エラー文の中で、`id`='41'ってなってるのが理解できません。7のはずでは?
また at line 9 となっていますが、このクエリ処理を書いているモデルファイル(.php)は
2000行くらいあって、この処理は9行目なんかに書いていません。
実際の9行目はクラスの宣言部分です。
どう考えたら良いのでしょうか、ご意見お願いします。

php5 ZF1.10です。
0478nobodyさん2010/09/23(木) 17:11:52ID:???
とりあえず、quoteIntoの返り値を見てみたら?
で、9行目ってのはSQL文の9行目じゃね?
04794772010/09/23(木) 18:00:12ID:y1pwafIu
>>478
おお、どうもありがとうございます!

 $where = array(
  $this->_dbConn->quoteInto('id=?', $picTblId),
  $this->_dbConn->quoteInto('reportId=?', $reportId)
 );
 var_dump($where); 

としたところ、
array(2) { [0]=> string(6) "id='7'" [1]=> string(13) "reportId='41'" }
となりました。ちゃんと入ってる…

>で、9行目ってのはSQL文の9行目じゃね?
納得です。
生成されたクエリ文を表示する方法はないんでしょうか?
04804772010/09/23(木) 18:55:24ID:???
すみません、解決しました。
詳細は下らな過ぎて書きませんが自分の凡ミスでした。

一つだけ気になってるんですが、Zend_dbクラスでの deleteメソッドで生成されるクエリ文を
確認する方法はないんでしょうか?
Zend_db_tableのselectメソッドだと __toStringを使って出来ますよね?
それに似たものはないのかなと… 
0481nobodyさん2010/09/25(土) 13:12:44ID:???
>>476
なるほど、既存のリソース(pluginだっけ?)を生かせるし、そういうのはありですね。

偏見かもしれないけど、ZendのFormはせっかくPHPが柔軟な言語なのに、
なんか無理矢理オブジェクト指向にしてる気がする。

まあ確かに利点もあるとは思うけど、場合によってはデメリットも目立つよね。
べた書きなら数行で済むような簡単なフォームでもZendFormだと数十行になっちゃう事とかあるし。

特にSmartyと組み合わせる前提なら、ZendFormとは相性が悪いし、デメリットばっかりになりそう。
0482nobodyさん2010/09/25(土) 13:25:53ID:???
>>480
実行後でいいなら、profilerでできる気がする

$profiler = $dbAdapter->getProfiler();
var_dump($profiler->getQueryProfiles());

俺はdbAdapter直接触るような場合はいつも直接SQL作成して
$dbAdapter->query($sql);
でやってる。
これなら実行前にdumpなりなんなり出来るし。
0483nobodyさん2010/09/25(土) 19:28:24ID:???
adapterって実行したクエリを全部保存してるの?
状況によっては、すごいメモリ食いそうだけど
0484nobodyさん2010/09/25(土) 23:16:09ID:???
>>483
あ、factoryメソッドのオプションでprofile = trueみたいに指定する必要はあるね。
いつも開発環境では常にtrueにしてるから気づかなかった。
0485nobodyさん2010/10/09(土) 15:33:32ID:1KEL8kwG
質問です
zendDBでinsertなりupdateなりdeleteなりが正常に処理できたか確認したいんだけど
みんなどんな方法でやってますか?
しらべたらrowCountを見つけたけど、他に方法ないですか?
0486nobodyさん2010/10/09(土) 17:17:01ID:???
何を持って正常と判断するかは、ロジック次第なので何とも・・・
0487nobodyさん2010/10/09(土) 17:37:49ID:c5ynP6XY
過去レス読めばいいのかもしれんけど、ちょっと知りたい事があります。
今までフレームワーク無しでPHP使ってきたんだけど、最近ZendFrameworkを使ってみようかと思っています。でも、いまいち踏み切れません。(CakePHPのほうがいいのかな? と思ったり)

ZendFrameworkのメリット/デメリットを教えてもらえませんか?
0488nobodyさん2010/10/09(土) 17:55:35ID:???
>>487

CakePHPにZendFramework組み合わせて使うのは?
0489nobodyさん2010/10/09(土) 18:53:54ID:1KEL8kwG
>>486
単純に、insertならちゃんとデータが登録されたか、updateなら変更されたか
そういうことを確認したいんです
それが確認出来るメソッドというか機能は備わってないんでしょうか?
0490nobodyさん2010/10/09(土) 19:21:03ID:???
>>489
返り値が0かどうかじゃだめなの?
0491nobodyさん2010/10/09(土) 21:46:07ID:???
>>487
かなり偏見かもしれないが、良くも悪くも
・CakePHPはウェブアプリケーション開発のためのFW
・ZendはPHPプログラムのためのFWって感じで、PEARの集まりみたいな感じ

web開発するにあたって、cakeならすんなりできる部分も、
Zendなら色々classを呼び出すなり、子クラス実装するなりしなきゃいけなかったりする。
Zendの方がハードルが高いのはまあ間違いない。
0492nobodyさん2010/10/09(土) 22:19:17ID:???
とりあえずcakeはormがしょぼい。
0493nobodyさん2010/10/09(土) 22:27:33ID:v6/8xFVg
>>489

lastInsertId() とか使えばいいんじゃないの。
http://framework.zend.com/manual/ja/zend.db.adapter.html#zend.db.adapter.write.lastinsertid
0494nobodyさん2010/10/10(日) 01:21:37ID:???
>>488, >>491
ありがとうございます。
CakePHPとZendFrameworkは思想そのものが違う感じなんですね。

使いやすさを除いた、たとえばWebサービスや通常のサイトを作ったときの速度はどうでしょうか?
もちろん、それぞれの規模やプログラマ/エンジニアの腕によって大きくばらつくのはわかりきってるのですが・・・
どうしても「フレームワーク=ソースコードが太る」というイメージがあるので、実際に使って開発した感想も聞きたいです。

PHPプログラムはZendFrameworkの方が向いているということなので、一旦はZendFramweorkに挑戦してみたいとは思いました。
繰り返しの質問になりますが、よろしくおねがいします。
0495nobodyさん2010/10/10(日) 01:32:12ID:???
場合に寄るから自分で試せよ
0496nobodyさん2010/10/10(日) 01:49:57ID:???
>>494
数年前と比べて、最近はハードウェアが高性能化してるからな・・・
「フレームワーク有りと、無しでは実行速度が2倍違う」と仮定しても、
0.01秒が0.02秒になるようなレベルで、体感速度は変わらない。


開発チームがフレームワークに慣れれば開発効率は数倍跳ね上がる。
コード肥大化による動作速度の低下を下げたいなら、
その人件費をハードウェアにつぎ込む方が低コストかつ、運用も楽。

そんな感じ。
0497nobodyさん2010/10/10(日) 05:06:02ID:???
CPUの高性能化は頭落ちしてる。
0498nobodyさん2010/10/10(日) 05:06:59ID:???
ごめん。頭打ちだった。
0499nobodyさん2010/10/10(日) 08:03:13ID:???
>>494
人にもよるだろうけど、開発が早いのはcakeだと思うよ。

簡単なプログラムつくるならFW使うとソースは増える。
0500nobodyさん2010/10/10(日) 15:40:37ID:???
>>497
ヒント:クラウド
0501nobodyさん2010/10/10(日) 17:09:41ID:???
>>497
VPS十台借りても1万くらいだし

最初は一台で作って
重くなってきたら役割ごとに分割
それでも重いなら並列化
って感じで増やしてけば対した問題じゃない

もちろん、負荷、売上がちゃんと整合性取れる範囲の話だがフレームの問題じゃなくなる
0502nobodyさん2010/10/10(日) 22:37:53ID:???
ケースに因るんだ。本当に負荷の高いサイト、FacebookなんかはPHPをHipHopでバイナリにしちゃうし、Yahooはロジックをエクステンションに追いやってる。
ZendとかCakeとか、この手のPHPのフレームワークは負担が大きいので使わない。
0503nobodyさん2010/10/10(日) 23:39:03ID:???
>>502
ケースに困る?
YahooとかFacebookとか・・・君の請ける案件はそんなに大規模な案件ばかりなのかい?
多分、ここにいる人の大半は数人〜数十人規模の中規模開発者だと思うよ。
0504nobodyさん2010/10/11(月) 00:50:45ID:???
困ったなw
0505nobodyさん2010/10/11(月) 01:03:04ID:???
どこまで釣りかわからなくなってきたorz
0506nobodyさん2010/10/11(月) 02:41:41ID:???
うち5人で作ってるEC+アフィリのサイトだけどWebサーバ10台クラスですげー高負荷だよ
キャッシュサーバとか検討してるレベルだし
0507nobodyさん2010/10/11(月) 11:21:25ID:???
因みに、Yahooでも5〜10人程度の開発チームが1サービスを担当する。
それぞれのチームが働きやすいようにもろもろ準備してるだけ。
しかも高付加なのはトピックとかの上位10%ほどのサービスを除けば、
中の下のエンジニアでハードウエアで済ますっていう世界だよ。

ま、おれはその中の下より下なわけだがw
0508nobodyさん2010/10/11(月) 20:09:48ID:???
>>496>>499>>502>>503
いろんな意見ありがとうございます。

エクステンションの書き換えとか追加はまあ出来るんですけど、PHP全体の挙動を詳細に解析したことがあるわけじゃないので、思わぬ穴ができそうでやりたくないんですよね。

ハードの性能がある程度あれば、通常の開発規模では気にしなくていいことがわかりました。
実際にサービスをリリースして運用を開始してから、もし問題があればフレームワークの排除等も検討してみます。

ありがとうございました。
0509nobodyさん2010/10/13(水) 17:49:35ID:9/s0PB03
>>506
zend全く関係なくて申し訳ないんだけどアクセス数とCPUとメモリ教えてくれない?
0510nobodyさん2010/10/18(月) 11:50:14ID:???
>>509
アクセス数についてだけど、トピックに上がった記事で人気があると、
だいたい秒間200アクセスを超えてく。
CPU、メモリについては聞いてどうするな世界だな。
サーバーはごく普通のレベル。
自前のDCにDELLとかの平均的なサーバーを入れてるだけ。
0511nobodyさん2010/10/18(月) 12:02:03ID:???
サーバ1台当たり20アクセス/sでアップアップなのかよw
0512nobodyさん2010/10/18(月) 12:41:26ID:???
どんなサイトかしらんけど適切なハードで、ちゃんと設定したら半分も要らなそうだな(笑)
0513nobodyさん2010/10/18(月) 16:10:14ID:???
>>511

> サーバ1台当たり20アクセス/s

そんなこと、どこに書いてあるの?
0514nobodyさん2010/10/18(月) 16:11:50ID:???
あぁ、わかった。ポインタミスだw
0515nobodyさん2010/10/18(月) 18:11:43ID:???
>>510
なんでお前が俺の書き込みに答えてるんだよw
具体的な数字は言えないけどやってくるのが殆どアフィリタグ踏んでくるアクセスだから
DB書き込みやらんとならんし結構重いんだよね
むしろWebサーバってよりロードバランサやSSL処理の方が厳しい感じなのでサーバのCPUなんかは持てあましてる
10台用意してるのはどっちかというと障害対策や不意のピークのためだから
平時はピークでもせいぜい50%くらいしかリソース使わん
0516nobodyさん2010/10/18(月) 21:04:03ID:???
MVCのサンプルがふんだんに見れるサイトないのかなぁ。。
海外とかでもいいから知ってる人いたら教えて
0517nobodyさん2010/10/18(月) 21:59:15ID:???
      _______                     __
    // ̄~`i ゝ                    `l |
    / /        ,______   ,_____    ________  | |  ____ TM
   | |     ___ // ̄ヽヽ // ̄ヽヽ (( ̄))   | | // ̄_>>
   \ヽ、   |l | |    | | | |    | |  ``( (.  .| | | | ~~
      `、二===-'  ` ===' '  ` ===' '  // ̄ヽヽ |__ゝ ヽ二=''
                         ヽヽ___//   日本
  _____ _____  ______  _______
  |  ウェブ  | | イメージ | | グループ | | ディレクトリ |
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
       ._________________
      |MVC sample                │・検索オプション
      └────────────────┘・表示設定
         | Google検索 | I'm Feeling Lucky |  ・言語ツール
          ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
       ◎ウェブ全体から検索 ○日本語のページを検索
0518nobodyさん2010/10/19(火) 02:49:28ID:???
MVCの切り分けってサンプル必要なくらい難しいか?
0519nobodyさん2010/10/19(火) 07:22:15ID:???
>>515
それって結局はZendFWがボトルネックにはなってるわけでは無い、って事だよな?w
05205162010/10/19(火) 09:19:22ID:???
いや実はMVCの切り分けを学びたいとかじゃなくて、
うまい人がどんな書き方(わかりやすさ・メンテナンスのしやすさなど)してるかを
いろいろと知って取り入れられるものはないかという探究心から聞いてみただけなのでないならないでいいんです。
0521nobodyさん2010/10/19(火) 09:50:18ID:???
皆、デフォルトコントローラー群にprefixってつけてる?

IndexController

と書くところを

ModuleName_IndexController
ProjectName_IndexController

のように冗長に。
PDTで複数プロジェクト編集する時にクラス名が被るとコード補完が厄介なんだ・・・
何か上手い方法ないかね
0522nobodyさん2010/10/19(火) 12:00:40ID:???
>>515
すまん、ポインタを見間違えた
0523nobodyさん2010/10/19(火) 15:08:51ID:???
>>521
Controllerをコード補完で呼び出すことなんてあるか?
0524nobodyさん2010/10/19(火) 17:58:33ID:???
>>523
コントローラ内でメソッド呼び出すとき、
$this->hogeXXXで保管しようとしたら、
他のプロジェクトの同名コントローラのメソッドがでてきちゃうんじゃね?
0525nobodyさん2010/10/19(火) 19:56:12ID:???
>>524
ControllerにAction以外のメソッド書くってこと?
private でも他のメソッド出てきちゃうんだっけ?
0526nobodyさん2010/10/19(火) 22:05:23ID:zJOQfrg+
>>463

Ver.1.10.8のZend_OpenId_Consumerの733行目に『/* TODO: OpenID 2.0 (7.3) XRI and Yadis discovery */』があるよ。
やっぱり、mixiのOpenIDだめだった。
0527nobodyさん2010/10/19(火) 22:19:07ID:???
2.0から対応するんだと思う
0528nobodyさん2010/10/19(火) 23:13:44ID:???
>>525
コントローラ固有だったり、サイト全体で使うようなショートカットメソッドを登録する事があるんよ。
$this->log(); とか $this->getXxx() みたいなのを・・・
privateにしててもクラス名が同じだと補完対象にされてしまう。

コントローラにアクション以外書くのってまずい?
0529nobodyさん2010/10/19(火) 23:28:47ID:???
別に君がそう書きたければそれでいいと思う
0530nobodyさん2010/10/20(水) 04:30:26ID:???
$this->log()はログの発行元が追跡しやすくて良い
0531nobodyさん2010/10/20(水) 12:10:17ID:???
アクションコントローラーにActionメソッド以外のメソッドって
結構いろんなサンプルとかでやられてるよな
0532nobodyさん2010/10/20(水) 13:31:25ID:???
privateメソッド限定なら補完の必要性もあんまりないから
放置したほうがいいと思う。

$thisで同名他クラスのメソッド出てきちゃうのは
そのうちPDTのほうで対応されそう。
heliosで親クラスの補完が変だったのもSR1で改善されたし。
05335092010/10/20(水) 17:08:16ID:goNec+dl
>>515
質問したの俺だよ、答えてくれてありがとう
サイトの運営ってプログラム書ければ良いワケじゃないんだね、
わかってたけどトラブル発生時の対応とか考えると大変だわ
みんなはプログラム書く以外にシステム設計とかもやってるの?

>アフィリタグ踏んでくるアクセスだからDB書き込みやらんとならん

これってアクセス解析のためだよね?
うーむ、勉強になったよ
0534nobodyさん2010/10/21(木) 01:30:25ID:???
>>531
>>532
Zend_Controller_Actionのコード見る限り、
普遍的なメソッドはController自体に登録してあるしね。

0535nobodyさん2010/10/21(木) 04:34:34ID:???
>>534
どんなメソッド?
0536nobodyさん2010/10/21(木) 05:14:21ID:???
>>535
_fowerdとか_redirectとか他にも色々、てかコード読めよw

Actinは xxxAction って命名規則があるんだし、
ActionCtonroller = Actionのみを記述するものでは無いってこった
0537nobodyさん2010/10/21(木) 05:18:53ID:???
>>536
それがなかったらコントローラじゃないだろ?何言ってんだ
0538nobodyさん2010/10/21(木) 07:16:01ID:???
>>537
別に?無くてもコントローラとしては機能するよ。

俺がいいたいのは、コントローラにはアクション以外定義するのはおかしいなんて事は無い。
それだけだ。
0539nobodyさん2010/10/21(木) 07:23:46ID:???
ああ、MVCのコントローラとZend_Controllerの実装の話が噛み合ってないわけね
0540nobodyさん2010/10/21(木) 07:32:49ID:???
ついでに言うとそれらはルーティングを行うための基底コントローラに実装されているメソッドであって
自分がそれを継承して作るコントローラに、アクション以外の(コントローラから逸脱する)ロジックなり処理なりを実装するのは
MVCの考えに反するよ。
てかZend_Controllerを見たらAction以外のメソッドがあるから定義しておかしくないなんてのは余りにも短絡すぎ
無かったらユーザがActionだけ書いて動くわけないでしょ
0541nobodyさん2010/10/21(木) 10:18:49ID:???
きっちりしたのはzendに任せるとして
ユーザは好きなように使えばいいのさ
0542nobodyさん2010/10/21(木) 11:09:59ID:???
>>539
MVCの思想としても_fowardをアクションコントローラに実装する必要は無い。
例えばZFで言えばヘルパでもいい。

>>540
最初から全てを書くとは誰もいってなくね?
Action間で共有するメソッドやログ出力ショートカット程度しか言われてない気が。

0543nobodyさん2010/10/21(木) 14:12:10ID:???
>>536

各ControllerでActin以外に独自メソッドいろいろ書いてたら、
将来的なZFのバージョンアップで拡張されたときに
不意なオーバーライドしちゃって動かなくなりそうで怖い。

間に1サブクラスかませてそこでやるならまだしも。
0544nobodyさん2010/10/21(木) 15:03:42ID:???
>>543
Zenc_Controller_Actionを継承した基底コントローラは最低限用意しておく
各コントローラは基底コントローラを継承しておく

全体で必要なら基底コントローラ、
コントローラ固有ならそのコントローラに書く

という感じかな。

オーバーライドしてしまって動作しなくなるケースって相当希だと思う。
0545nobodyさん2010/10/21(木) 19:36:11ID:???
PHPにもJavaみたいにアノテーションで@Overrideとか指定出来れば良いのにね。
0546nobodyさん2010/10/22(金) 01:09:01ID:???
そこまで厳密にやるならもうJavaか.NETやれよみたいな話になるんじゃないの?
0547nobodyさん2010/10/22(金) 01:53:39ID:???
>>545
アノテーション自体は定義出来るし
ランタイム時にReflectionクラスで取得する事も出来るので
必要だと思うなら自分で作ればいい


作ってるうちに >>546 と同じ答えにたどり着くと思うがw
0548nobodyさん2010/10/22(金) 13:26:45ID:???
いやいや、そこまでの話じゃないよ。

単に @deprecated とかPDTでも対応してて便利だし、
そのレベルであれば良いなあって。
0549nobodyさん2010/10/22(金) 15:12:14ID:qwjMjkx8
dbの登録データのデリートアクションみたいに、実際には画面を表示しない場合って
(削除処理がされたら完了画面にリダイレクトする)
viewの設定をどうしたら良いの?

phpエラー(warning)を吐かれてるのを止めたいんだけど…
ルーティングで対処するのか、それともdeleteAction()の中で何か書くのかわからないです

routingは以下のようになってます

routes.scheDelete.route= "/admin/schedule/delete/*"
routes.scheDelete.defaults.module= "admin"
routes.scheDelete.defaults.controller= "Schedule"
routes.scheDelete.defaults.action= "delete"
routes.scheDelete.type= "Zend_Controller_Router_Route"

回答お願いしますー
05505492010/10/22(金) 15:13:38ID:qwjMjkx8
あ、すみません。情報がたりませんでした
どうせ画面の表示はないのだから/schedule/delete.tplを用意していないのです。

0551nobodyさん2010/10/23(土) 00:01:07ID:???
>>549
マニュアルに書いてあるよ
0552nobodyさん2010/10/23(土) 00:37:26ID:???
>>549
deleteActionの最後で_foward()か_redirect()すればいい。

画面を描画したくないなら、viewHelperを無効にすればいい。
http://framework.zend.com/manual/ja/zend.controller.action.html
0553nobodyさん2010/10/23(土) 00:50:00ID:???
>>540
>>543
マニュアル読んで気がついたが、

「自分のウェブアプリケーション用に便利な機能を実装していく一方で、
同じような前処理やちょっとした処理をあちこちのコントローラで書いているといったことはありませんか?
そのような場合は、Zend_Controller_Action を継承した共通基底コントローラクラスを作成し、
共通処理をそこにまとめていくようにしましょう。 」

と明記されてるね。
http://framework.zend.com/manual/ja/zend.controller.action.html
0554nobodyさん2010/10/23(土) 02:16:34ID:???
>>540
>無かったらユーザがActionだけ書いて動くわけないでしょ
動く。ルーティングを行う為の基底コントローラ(ZFではDispatcher)側の実装の問題だ。

MVCの考え方とやらに従うのであれば、Action以外にもCに実装するべきロジックは多々ある。
それを基底クラスに書くのか、別クラスに書くのか、その実装方法自体はMVCの思想には含まれていない。
05555492010/10/23(土) 02:37:46ID:???
>>551,552
お恥ずかしい。ありがとうございました
0556nobodyさん2010/10/23(土) 07:14:23ID:???
継承ってすればするほど重くなるのかな?
ある程度はキャッシュされるとしても体感しない程度に重くなってる?
0557nobodyさん2010/10/23(土) 10:09:58ID:???
>>554
Dispatcherはコントローラだろ 何言ってんだ
0558nobodyさん2010/10/23(土) 10:58:26ID:???
>>557
だからCに関するロジックであれば、Zend_Controller_Actionに実装しようが、Dispatcherに実装しようが、他のクラスに実装しようが、
MVC思想とは関係無いんで >>540 の発言の意味がわからねーんだわ。
0559nobodyさん2010/10/23(土) 11:12:25ID:???
>>558
>>無かったらユーザがActionだけ書いて動くわけないでしょ
>動く。ルーティングを行う為の基底コントローラ(ZFではDispatcher)側の実装の問題だ。

Cに関するロジックが無くても動くってどういうこと?

0560nobodyさん2010/10/23(土) 11:31:06ID:???
>>559
Zend_Ctonroller_ActionにAction以外のメソッドが無くても、
Dispatcherなり、どこかしらに実装しておけば動くって事。

>>540ではAction以外を定義するのはMVCに反すると、
意味不明な書き込みがあったが、Cに関するロジックであれば何処に書こうが何ら問題は無い。

むしろ共有ロジックはActionクラスに書くことをZFは推奨(>>553)している。
0561nobodyさん2010/10/23(土) 11:56:02ID:???
>>560
>Zend_Ctonroller_ActionにAction以外のメソッドが無くても、

Zend_Controller_Actionには_forwardや_getParamや_redirectなど
たくさんAction以外のメソッドがあるように見えるが・・・?
0562nobodyさん2010/10/23(土) 12:03:59ID:???
>>561
話ループしてるし何が言いたいかわからん
>>536 からの流れ読め
0563nobodyさん2010/10/23(土) 18:28:37ID:???
>>556
バイトコードキャッシュとか使ってない環境だと
どのくらい影響あるんだろうね。

PHPでもJavaみたいにInterface多用して設計したいけど、
実行時の無駄な処理が気になる。

本番環境ではInterfaceのチェック処理を
無視する設定とかあるのかね?

ZFでも結構多用されてるってことは、ほとんど影響ないのかな?
0564nobodyさん2010/10/23(土) 18:33:37ID:???
>>562
自分の誤りをごまかさないでほしい
0565nobodyさん2010/10/23(土) 19:07:53ID:???
>>562 >>564

君たち話がかみ合ってない。

要はZend_Ctonroller_Action継承した基底Controller作って、
共通の処理はそこに実装。
※出来ればinit()やらpreDispatch()の中だけで済ませる
それを継承した各Controllerで個別に呼び出したい処理は
ActionHelper作る。

でいいんじゃない?
オーバーライド用に容易されてるメソッド以外に、
各ControllerでAction以外のメソッド書かないといけない必要性って
ほとんどないような。手っ取り早いけど。
0566nobodyさん2010/10/23(土) 19:56:33ID:???
>>565
ヘルパーブローカを使うとPDTでコード補完出来ないのが不便なんだよなぁ、
どこかしらに @return アノテーション付でgetter定義しておかないとならんし・・・

自分の場合、

プロジェクト基底コントローラ
 → アプリケーション基底コントローラ
  → モジュール基底コントローラ

をそれぞれ継承して作っておいて、
Controllerに共通プロパティやショートカットメソッド定義してるわ。
0567nobodyさん2010/10/23(土) 20:19:28ID:???
>>565
>各ControllerでAction以外のメソッド書かないといけない必要性って
>ほとんどないような。手っ取り早いけど。

Controller固有のロジックやプロパティを外部化する必要性もほとんど無いからね
臨機応変に最適な手法を取ればいいと思うよ

無闇に肥大化させるのは好ましくないけれど
将来Zend_Controller_Actionと競合するかもしれないという理由で
実装コストを上げてしまうのは同意し辛いな
0568nobodyさん2010/10/24(日) 00:52:09ID:???
>>563
ベンチで測ってみろよそれくらい
0569nobodyさん2010/10/24(日) 12:51:40ID:???
プラグインからアクションヘルパーを呼ぶ方法ってありますか?
アクションコントローラを作るたびに同じアクションヘルパーを呼ぶ記述書くより
プラグインに共通で書きたいと思ったのでやり方を探しているんですが見つけられません。
0570nobodyさん2010/10/30(土) 15:35:08ID:CCVX4Qsq
各クラス(コントローラ)の中のアクションがありますが、
これを再利用する方法ってないんでしょうか?

というのは、たとえば入力フォームのアクションだったらバリデート処理が書いてるけど
同じようなフォームの時、ほとんど中身変わらないのに同じようなのをもう一つ書くのが面倒なんです
具体的に言うと nikki_addアクションとnikki_rewriteアクションとか。。
新規登録時でも書き換え時でもバリデータは同じだけど、アクションを2つに分けると
中身同じなのにもう一つ書くことになって面倒くさいと…
何か良い方法ないですか?
0571nobodyさん2010/10/30(土) 15:55:15ID:???
バリデート込みのフォーム定義をアクション外に括り出せばいい
0572nobodyさん2010/10/30(土) 15:55:33ID:???
>>570
難しく考えなくていいよ。
コントローラにnikkiValidateメソッドを作って、
nikki_addとnikki_rewriteから呼び出せばいい。

もしそれが気持ち悪いのであれば、Nikkiクラスでも作るなりして、共通処理をまとめればいい。
0573nobodyさん2010/10/30(土) 15:57:20ID:???
アクションにバリデート書くとかMVCの意味なくね?
0574nobodyさん2010/10/30(土) 16:12:06ID:???
MVCの概要を説明する文書がどれもわかりづらいっつーか、
不明瞭な書き方するからいけないんだよね。

モデルに書けそうなロジックは全部モデルに記述するように試みればまず間違いない。
0575nobodyさん2010/10/30(土) 16:22:23ID:???
コントローラ内で局所的にしか使わないようなロジックであれば、まぁいいんでない。
汎用性とか徹底したMVCとか考えるとキリが無い。

要はケースバイケース。
コストに見合った実装すればいいよ。

RDBだからとテーブルを無闇に極限まで正規化しないだろう?
0576nobodyさん2010/10/30(土) 18:06:00ID:???
>>575
いやまあ、そうなんだけど、そういうと馬鹿はコントローラに全部書いちゃうから。
コントローラに書くことなんてほぼ無いのに。
0577nobodyさん2010/10/30(土) 18:44:20ID:CCVX4Qsq
>>571-576
おおー、ありがとうございます。
そうですね!共通利用するんだから両アクションから呼び出せばいいんだ
なんで思いつかなかったかなー
ありがとうございました
0578nobodyさん2010/10/30(土) 23:54:53ID:???
コントローラって名称に毒され過ぎだよね。
極端な例だけど、以下のようにロジックがきっちり分別されていれば、
同クラスだろうが、同ファイルだろうがMVC実装は可能。

class Application
{
public function controller() {}
public function model() {}
public function view() {}
}
0579nobodyさん2010/10/31(日) 00:48:20ID:???
えっ
0580nobodyさん2010/10/31(日) 02:04:35ID:???
デザインパターンに実装方法は定義されてないからね
ファイル、クラス、メソッド、好きな方法で区切ればいい
0581nobodyさん2010/10/31(日) 02:12:58ID:???
お前は何を言ってるんだ
0582nobodyさん2010/10/31(日) 02:23:02ID:???
>>581
何か間違ってた?
0583nobodyさん2010/10/31(日) 04:11:44ID:???
いやそもそも同じクラスに違う目的のものを突っ込むのが
オブジェクト指向的に間違いなわけで
0584nobodyさん2010/10/31(日) 04:36:27ID:???
ああクラス名を MVCにした方が解りやすかったかな。
OOP的にも、MVC的にも問題無いと思うよ。
絶対やらんけど。

class MVC
{
public function controller() {}
public function model() {}
public function view() {}
}

0585nobodyさん2010/10/31(日) 04:46:01ID:???
クラス名がMVCってその時点でもう破綻してるだろw
自動車をオブジェクト指向で表す場合に
EngineWheelStealingってクラス作るようなもんだぞw
0586nobodyさん2010/10/31(日) 04:53:18ID:???
ワロス
0587nobodyさん2010/10/31(日) 05:44:37ID:???
普通は複数の機能が乗るわけでそうなったらどうすんだ?
AMVCとかBMVCってクラスができるのか?
それじゃmodelとcontrollerまで対じゃないと破綻するよな
それともa_controller() b_controller()って増やしていくのか?
0588nobodyさん2010/10/31(日) 13:34:07ID:???
えっ
0589nobodyさん2010/10/31(日) 14:02:42ID:???
例えの話に何ムキになってるの・・・怖い・・・

>>585
Car extends EngineWheelStealing
0590nobodyさん2010/10/31(日) 14:57:07ID:???
・・・はい?w
0591nobodyさん2010/10/31(日) 15:00:09ID:???
>>589
おまえすげーな
スパーハカーだなw
0592nobodyさん2010/10/31(日) 15:04:14ID:???
>>578ってオブジェクト指向もMVCもZendの使い方も一つも解ってないんだろうな
0593nobodyさん2010/10/31(日) 15:04:24ID:???
理解の範疇を超えると煽る事しか出来ないです><
0594nobodyさん2010/10/31(日) 15:10:21ID:???
自分はあんまりオブジェクト指向原理主義者じゃないけど、
is-aとかhas-aとかなんかそういう基本的なところのセンスがとても悪いと思う。
0595nobodyさん2010/10/31(日) 15:10:38ID:???
これはひどい初心者
0596nobodyさん2010/11/01(月) 12:15:19ID:???
class DqnCar extends Car implements AeroParts
0597nobodyさん2010/11/01(月) 20:53:23ID:???
発想は面白いがそれは英語的にもOOP的にも違うなw
0598nobodyさん2010/11/01(月) 21:21:37ID:???
このスレは独創的なオブジェクターが多いなw
0599nobodyさん2010/11/01(月) 22:07:25ID:???
オブジェクト指向っつっても、主観次第で変わるからなぁ・・・
0600nobodyさん2010/11/01(月) 23:04:15ID:EIHh7aSp
zendframeworkで、携帯とPCでviewを分けたい場合
どの部分で、振り分け処理を記載してらいいですかね?
0601nobodyさん2010/11/01(月) 23:40:28ID:???
基底コントローラやinitメソッドからの呼出でいいんじゃない?
0602nobodyさん2010/11/02(火) 00:02:44ID:yTnsmEW2
>601

ipで、振り分けようかと思ってるんですが
PEAR::Net_IPv4を使って、Bootstrap.phpで使用していいか悩んでます。
その後の、viewの振り分けもわからないですけ。。。
0603nobodyさん2010/11/02(火) 00:03:15ID:???
俺は邪道だと言われるかもしれないけど、拡張子を変えてる。
パソコンはphtml野間まで、携帯はhtmlに設定。

同一アドレスで同一サービスが提供可能に。
0604nobodyさん2010/11/02(火) 00:47:33ID:???
>>602
Bootstrapで携帯かPCかを判別して、
何らかの方法(FrontController、Request、Registry、etc)でControllerに渡せばいい。
振り分け方法はケースバイケースだが、面倒でなければ携帯用のViewクラスを用意するのが望ましい。

>>603
何故に拡張子?
テンプレートディレクトリで切り分けた方が良いんじゃね?
0605nobodyさん2010/11/02(火) 01:07:52ID:???
bootstrapなんでもありだな
0606nobodyさん2010/11/02(火) 01:28:32ID:???
本来Bootstrapはアプリケーションを初期化したり、
状況に応じて設定を変更したりする為のものだからな・・・

可能なら MobileBootstrap.php を作って、
リクエストを受け取る index.php でip判別して、Bootstrap自体を振り分ける方法もありかと。
0607nobodyさん2010/11/02(火) 01:44:20ID:???
俺は同じコントローラなのがかなり不便だからコントローラから分けてる。
表示内容とか含めてPCとモバイルでコントローラが同一でいいなら
>>603の方法を使うと思う。
0608nobodyさん2010/11/02(火) 02:22:33ID:???
controllerの親クラス作ってそこでやってるわ俺
0609nobodyさん2010/11/02(火) 11:12:23ID:???
俺もそれだわ、だってPCと携帯で同じアクション使ったりしてるもん。
今見たらinit()でこんな事してた
$this->_helper->layout->setLayout('mobile');
$this->view->setScriptPath(APPLICATION_PATH.'/views/scripts-mobile');
0610nobodyさん2010/11/02(火) 11:43:50ID:???
>>609
それが一番美しいやりかたかと思う。


ただしinitは複数回呼ばれる可能性があるので、気になる人は初期化済か否かのチェックをいれるなりした方が良い。
06116092010/11/02(火) 15:59:56ID:???
よく似たのがあると思ったら、なんと以前このスレに俺が自分で質問してるじゃあないか
誰も返事してくれてないしw なんかちょっと恥ずかしいぞ。 >>264
bootstrapでレイアウトを手動初期化する方法も書いてある
0612nobodyさん2010/11/03(水) 01:33:55ID:???
http://devzone.zend.com/article/12724-Zend-Framework-1.11.0-FINAL-Released

>>600
つZend_Http_UserAgent
いいタイミングw
0613nobodyさん2010/11/03(水) 04:59:30ID:???
Zend_Http_UserAgentってIPアドレス判別とか出来るのかね・・・
クラス名も微妙に輪っか利辛いなぁ・・

Zend_Mobile_Deviceとかで良かったんじゃね?
0614nobodyさん2010/11/03(水) 07:58:18ID:???
IPで判別とか日本ローカルなんだからお前らが作れ
0615nobodyさん2010/11/03(水) 11:22:15ID:???
Java屋です。次案件でzend frameworkを使った開発をするのですが
hibernateやiBatis, S2Daoのような標準的なORMはいくつかあるのでしょうか?
0616nobodyさん2010/11/03(水) 11:26:43ID:???
なんでぐぐらんの?
06176152010/11/03(水) 11:35:27ID:???
>>616
ぐぐってから聞いてる?
自分はぐぐってから書いてるよ。
0618nobodyさん2010/11/03(水) 11:40:14ID:???
じゃそれで分かるじゃん
0619nobodyさん2010/11/03(水) 11:47:12ID:???
ググってわかったら書かないでしょ
0620nobodyさん2010/11/03(水) 12:00:20ID:???
そうかすまんかった。まぁ頑張ってくれ。
0621nobodyさん2010/11/03(水) 12:09:09ID:???
おお。応援ありがとう。頑張るわ
0622nobodyさん2010/11/03(水) 12:52:45ID:???
ORMは山ほどある。
標準的が何を示すのか不明だがZFならZend_Db_Tableあたりだ。
0623nobodyさん2010/11/03(水) 13:06:02ID:???
そもそもhibernateやiBatis, S2Daoは標準的なORMじゃないので
0624nobodyさん2010/11/04(木) 00:39:38ID:1iy2rlVw
質問します。たとえば日記のアプリを作るとき
localhost/diary/edit/y/2010/m/11/d/1 って形で入力画面(editアクション)を開くとします。

そうすると、まずこの時点でパラメータが日付にふさわしい型か
パラメータチェックする必要があると思うんですが、その処理を外部化したいんです。
↓こんな感じで(diaryコントローラ)
public function init(){
 require('paramChk.func.php');//検証機能の外部化
}
public function editAction(){
 $param=$this->getRequest()->getUserParam();
 $checkAry = array(
      array($param['y']=>array('required', 'numeric'),//パラメータyが必須かつ数値かチェック
      array($param['m']=>array('required', 'numeric'),
      array($param['d']=>array('required', 'numeric')
      );
 paramChk($checkAry);
}

このとき、実際の検証用外部関数paramChk()の中でエラー(不正の発見)があったとき、
エラーコントローラにリダイレクトさせたいんですが
function paramChk($ary){
 //チェック処理省略
 if($err) return $this->_redirect('/error/pt/paramerr');
}
とするとエラーが起きます(Using $this when not in object context in /var/www/application/inc/paramChk.func.php)
どうしたらいいんでしょうか? 検証処理は外部化しつつ検証エラーの時のリダイレクトまで実装したいです。
意見よろしくお願いします
0625nobodyさん2010/11/04(木) 00:54:38ID:???
エラーの時返り値返せばいいのでは
0626nobodyさん2010/11/04(木) 01:10:04ID:???
>>624

・editAction側でリダイレクトさせる方法
if (!paramChk($checkAry)) $this->_redirect('/error/pt/paramerr');

・paramChk側でリダイレクトさせる方法1
paramChk($checkAry, $this); // $this(コントローラを引数で渡す)
function paramChk($ary, $controller){};


多分、前者の方が好ましい。
(paramChkもグローバル関数では無く、何らかのクラスに隠蔽すると尚良い)
0627nobodyさん2010/11/04(木) 01:31:00ID:???
コントローラを外部関数に渡すとか初めてみたw
0628nobodyさん2010/11/04(木) 02:11:43ID:???
redirect処理含めて外部関数に隠蔽したいなら、なんらかの方法で渡すしか無いだろうw
06296242010/11/04(木) 11:44:09ID:???
>>625-626
ありがとうございます。
なるほど、確かにエラーの時にfalse返してコントローラでリダイレクトの方が
あとあと便利そうですね!
「if (!paramChk($checkAry)) 」こういうの思いつかないのでホント聞いて良かったです

>paramChkもグローバル関数では無く、何らかのクラスに隠蔽すると尚良い
これはなぜですか?
0630nobodyさん2010/11/04(木) 16:29:59ID:???
>>629
>paramChkもグローバル関数では無く、何らかのクラスに隠蔽すると尚良い
>これはなぜですか?
他にparamChkという関数が存在していると不具合が出ちゃうからね。
値を検証するクラスを別に作り、必須や数値チェックするのもそちらに外部化する方が見通し良くなると思うよ。

以下簡単な例

・Controller側
$diary = new Diary($param['y'], $param['m'], $param['d']);
if ($diary->isValid()) $this->_redirect('/error/pt/paramerr');

・Diaryを処理するクラス
class Diary{
private $_param = array();
public function __construct($y, $m, $d) {
$this->_param['y'] = $y;
$this->_param['m'] = $m;
$this->_param['d'] = $d;
}

public function isValid() {
// $this->_param に正常な値が入っているかチェック
return true;
}
}
0631nobodyさん2010/11/04(木) 20:13:18ID:???
俺はパラメータチェックはアプリケーションではなくアクションの仕事だと考えて

アクション内で
$this->reqParams('y', 'm', 'd');

基底コントローラ内で
public function reqParam() {
foreach (func_get_args() as $arg) {
if (!$this->hasParam($arg)) {
throws Hogehoge_Parameter_Exception();
}
}

みたいなことやってたよ
0632nobodyさん2010/11/04(木) 21:06:11ID:???
Javaやってた自分からすると、メソッドの中で
func_get_argsとか、array渡してextractとかやって
可変引数を扱うのにいまだに馴染めないんだけど
これらってバッドノウハウじゃないのかな?
0633nobodyさん2010/11/04(木) 21:17:13ID:???
>>632
可変引数はPHPにおいてはバッドノウハウでは無く、割と一般的なテクニックかと。
個人的にはfung_get_args()よりarray渡しを使うけど。

#extractは使う場面は思い浮かばない。
0634nobodyさん2010/11/04(木) 21:18:32ID:???
extractとfunc_get_argsを同列に語るのは
さすがにPHPの経験不足が露呈しすぎだぞ
0635nobodyさん2010/11/04(木) 22:32:56ID:???
>>634

というのも、 >>632 で書いたのもスレチなわけではなくて
ZFのViewHelperのForm**** 見てたらどれも

public function form****($name, $value = null, $attribs = null, $options = null, $listsep = "<br />\n")
{
 $info = $this->_getInfo($name, $value, $attribs);
 extract($info); // name, value, attribs, options, listsep, disable

みたいになってて、こんなのどうやって呼び出すんだよ…って思ったんだよ。。
こういうのってPHPでは無茶なやり方ではないのかな?
まあ、フレームワークでやってるってことは一般的なのか・・・
0636nobodyさん2010/11/04(木) 23:16:22ID:???
その例では$name, $value, $attribsを元に戻してるだけ
引数が限られているなら危険性もないし、逐一コード書くより統一性が取れて開発効率も上がるから使ってるんだろう
06376242010/11/05(金) 01:38:03ID:FPhbRDb9
>>630
>他にparamChkという関数が存在していると不具合が出ちゃうから

なるほど、納得出来ました。paramChkクラスを作ってみます。

>if ($diary->isValid()) $this->_redirect('/error/pt/paramerr');

これは、ifの()の中ってこれで良いんですか?
trueを返す条件でエラーのリダイレクトにならないですか?
自分凄い勘違いしてるのかな


他の人の意見も勉強してみます
ありがとうございました
0638nobodyさん2010/11/05(金) 02:12:03ID:???
>>637
>>if ($diary->isValid()) $this->_redirect('/error/pt/paramerr');
>これは、ifの()の中ってこれで良いんですか?

ごめん。 if (!$diary->isValid()) だね。
06396242010/11/05(金) 02:50:10ID:???
>>638
おお、良かったです
こんな時間にありがとうございました
0640nobodyさん2010/11/05(金) 09:45:33ID:???
array渡しはJavaScriptでもよくあるし
JSONやXMLとの親和性もいいんじゃないか?
0641nobodyさん2010/11/05(金) 16:52:21ID:???
オーバーロードが出来ない言語ではよくある手段だね。
0642nobodyさん2010/11/05(金) 19:40:31ID:???
ZF 1.11来たな
http://sourceforge.jp/magazine/10/11/05/0641258
0643nobodyさん2010/11/05(金) 20:48:27ID:???
>>641
単に引数の個数が可変の時に使ってるだけじゃね?
0644nobodyさん2010/11/06(土) 00:53:16ID:???
>>643
普通は無尽蔵に可変なら配列で渡すし、
引数の数や型よって処理が変えたいのであればオーバーロードする。

PHPはオーバーロードが無いから仕方無い。
0645nobodyさん2010/11/06(土) 01:07:38ID:???
>>644
extractとfunc_get_argsのどっちの話?
0646nobodyさん2010/11/06(土) 01:11:09ID:???
>>645
func_get_argsの話。
単に不特定多数の値を渡すだけなら配列渡しの方が見通しが良い。
func_get_argsは、引数の数をチェックして振る舞いを変える為にあるイメージ。(疑似オーバーロード)

まぁ好みの問題だろうけど。
0647nobodyさん2010/11/06(土) 01:38:52ID:???
いや不特定多数の引数を渡す時のための関数だともうよ
0648nobodyさん2010/11/06(土) 02:46:56ID:???
不具合の温床になるから、
配列渡しの書き方を省略したいだけなら array() でくくった方が良いと思う。
IDEとの相性も悪いし。
0649nobodyさん2010/11/06(土) 02:49:53ID:???
不具合ってどんな不具合?
0650nobodyさん2010/11/06(土) 03:05:36ID:???
何故オーバーロードという概念があるか考えれば解るよ。

逆にarrayで囲わない理由は何だろうか?面倒だから?
0651nobodyさん2010/11/06(土) 03:08:01ID:???
なんだよ例出せないんじゃん
0652nobodyさん2010/11/06(土) 04:48:15ID:???
>>651
うーん。そもそもオーバーロードの概念が無い人には説明し辛いんだが

function hoge($array) {}
function hoge($string, $string) {}
function hoge($string, $array) {}

という感じで、同名関数だけど引数によって処理が変わる場合に使うのが望ましいだよ。
ここまでは解る?

fung_get_args()で配列を受け取りたいだけならarrayを受け取る関数一つでもいいよね?

function hoge($array) {}

ここでまでは解る?

オーバーロードは本来、
受け取った引数の型や個数によって処理を振り分ける場合に有用なんだよ。
PHPじゃなくてプログラミング言語自体の基礎がついていれば普通は理解出来ると思うが。
0653nobodyさん2010/11/06(土) 13:19:33ID:???
オーバーロードの例出してどうするw
func_get_argsがオーバーロードを実現するための関数だという根拠は何か
そしてそれを使うとどういう不具合が発生するのか
を聞いてるんだけど
0654nobodyさん2010/11/06(土) 14:18:26ID:???
どっちかっていうと、Cでいうところのstdarg的な使い方を目指してるんじゃね?
0655nobodyさん2010/11/06(土) 14:24:08ID:???
引数の型や個数を見て処理を振り分けるのはオーバーロードとは違うと思う。
オーバーロードは、引数の型や個数を関数を区別する情報の一部として扱うことで、
それぞれ別個の関数を定義する仕組み。
実行時に引数を見てシミュレートすることはできるだろうけど。
0656nobodyさん2010/11/06(土) 14:32:07ID:???
「ここまでは解る?」とか痛すぎる
0657nobodyさん2010/11/06(土) 17:24:47ID:???
>>653
0658nobodyさん2010/11/06(土) 17:36:17ID:???
>>653
マニュアル嫁
http://php.net/manual/ja/function.func-get-args.php
逆に配列渡しにしない理由はなんだよ?

>>655
わかってるよ(>>646に書いてる)
0659nobodyさん2010/11/06(土) 17:46:21ID:???
どっちが良いかなんて、ケースバイケースじゃね?
引数を実行時に組み立てたいなら配列しかないだろうし、
printf的な使い方なら、いわゆる可変引数の方が直感的だろうし。
0660nobodyさん2010/11/06(土) 19:28:44ID:???
>>658
え?>>653の上下どっちに対する回答?
オーバーロードの話も不具合の話も書いてないけど
0661nobodyさん2010/11/06(土) 20:34:35ID:???
>>660
マニュアルのコメント欄まで嫁。
配列渡しを拒む理由も書け。
0662nobodyさん2010/11/06(土) 21:23:28ID:???
>>661
User Contributed Notesはユーザが勝手に追加するコメントだよ?
逆にいうとそこ載っているという事こそ、標準の使い方でないことの証明。
しかも数十件ある中で1件しかそんなこと書いてないからPHPユーザの中でもそんなことしてるのはマイナーと思われる。
0663nobodyさん2010/11/06(土) 21:43:07ID:???
>>662
>逆にいうとそこ載っているという事こそ、標準の使い方でないことの証明。
なんねーよw


func_get_argsが直接バグを生み出す訳では無い

 ・関数の内部処理を見ないとパラメータの扱いが解らない
 ・タイプヒンティングが使えない
 ・IDEによる補完機能が使えない
 ・バージョンによる挙動の違い

という制約が結果的に潜在的なバグを生み出しやすいって事だよ。
それらを踏まえて、単に複数パラメータを渡すだけならarrayを使い、
オーバーロード的な振る舞いを行いたい時にfunc_get_argsを使えば良い。


で、頑なに配列渡しを拒む理由は何なの?
0664nobodyさん2010/11/07(日) 21:13:27ID:???
func_get_args()、検索したらZFの中では60箇所使われてた。
いくつか見た感じ、ZFではオーバーロード的な振る舞いを狙った使い方はしてないかも?

ただ >>663
>単に複数パラメータを渡すだけならarrayを使い、
>オーバーロード的な振る舞いを行いたい時にfunc_get_argsを使えば良い
はわりと同意。
0665nobodyさん2010/11/09(火) 09:47:23ID:???
>>664
ありがとう。
検索してみたけど、確かにオーバーロード的な使い方はしてないね・・・(sprintf系が多い?)

個人的にIDEに洗脳されつつあるので、可変引数は毛嫌いしてたけど、
ちょっと引き出しが増えた気分だよ。ありがとう。
0666nobodyさん2010/11/09(火) 17:16:52ID:bQQ5pU57
zend_dbでの例外処理で質問です。

$ret = $db->query("insert〜〜");
$rowCount = $ret->rowCount();
$errCode = $ret->errorCode();
if($rowCount == 1 && $errCode="00000"){//クエリは成功しました}

自分は普通、Zend_dbで単純なinsert処理とかをする場合は上記のようにクエリの成功/失敗を判別してるけど
トランザクション処理の場合、以下のようにやってます。
try{
 $db->beginTransaction();//トランザクション開始
 $lastInsertIdAry = array();
 for($i=0; $i<$n; $i++){
  $db->query(
   "INSERT INTO `{$table}`(id,uType) VALUE(:id,:uType)",
   array(':id'=>0, ':uType'=>$uType)
  );
  $lastInsertIdAry[$i]=$this->_dbConn->lastInsertId();
 }
 $db->commit();
 return array('status'=>'success', 'insertIdAry'=>$lastInsertIdAry);
}catch (Zend_Db_Statement_Exception $e){//トランザクション失敗A
 $db->rollBack();
 $msg = $e->getMessage());
 return array('status'=>'errorA', 'errorMsg'=>$msg);
}catch (Exception $e){//トランザクション失敗B
 $msg = $e->getMessage();
 return array('status'=>'errorB', 'errorMsg'=>$msg);
}

もっと効率的なやり方ないですか? またそもそもこの方法に穴はないでしょうか。
発生したエラーをログに残すのに効率的な方法を探してます。
0667nobodyさん2010/11/09(火) 23:37:52ID:???
トランザクション失敗Bでロールバックしなくていいの?
あと何のDB使ってるか知らんけどidに0入れてauto incrementになるのかい

効率的といってもコード量なのかメモリ量なのか実行速度なのか可読性なのか開発効率なのか保守性なのか
何を重視するのかによる
0668nobodyさん2010/11/09(火) 23:49:24ID:???
>>663
> ・関数の内部処理を見ないとパラメータの扱いが解らない
> ・タイプヒンティングが使えない
> ・IDEによる補完機能が使えない

それって全部arrayでも同じじゃないの?
0669nobodyさん2010/11/10(水) 00:04:44ID:???
>>668
同じじゃない。
0670nobodyさん2010/11/10(水) 00:09:14ID:???
>>669
なんで?
0671nobodyさん2010/11/10(水) 00:21:19ID:???
>>670
なんでと言われても・・・同じじゃない。
0672nobodyさん2010/11/10(水) 00:22:28ID:???
なんじゃそりゃ
0673nobodyさん2010/11/10(水) 00:31:38ID:???
>>672
>・関数の内部処理を見ないとパラメータの扱いが解らない
これは少々語弊があるね・・・
パラメータの扱いではなく、必要なパラメータが関数の宣言を見るだけで解る。
(func_get_argsにすると内部処理を見ないとわからない)
(PHPDocに書けば別だが、IDEは認識出来ない)

>・タイプヒンティングが使えない
arrayは使える

>・IDEによる補完機能が使えない
引数定義しておけばパラメータ補完機能が働く


以下コード例

function hoge(array $array) {}

function hoge() { $array = func_get_args(); }
0674nobodyさん2010/11/10(水) 14:17:57ID:JflIvKmc
リダイレクト先にuserParamsの形でURLを渡すのはどうやったらいい?

$referer = urlencode("http://www.yahoo.co.jp");
$this->_redirect('/hoge/user/taro/referer/'.$referer);
↑の方法でリダイレクトさせたら404 Not Foundが返ってきて困ってる
($refererを空欄にするとちゃんとリダイレクトできる)
$refererをurlencode()しなければリダイレクトは成功するけどrefererの値がhttp:になってしまうし

もしかしたらZend以前の問題かも知れないけどアドバイスお願いします
0675nobodyさん2010/11/10(水) 15:52:53ID:???
>>674
base64_encodeしたら?
0676nobodyさん2010/11/11(木) 19:52:34ID:???
メソッドオーバーロードを標準でサポートしてるメジャーなスクリプト言語ってないよな。Perl6がサポートするみたいだけど。
引数が多くなってきたらハッシュで渡すのが、メソッドオーバーロードのないスクリプト言語での常套手段だと思う。
0677nobodyさん2010/11/11(木) 21:00:10ID:???
そういうのはオーバーロードできる言語でもハッシュで渡すんじゃね?
0678nobodyさん2010/11/12(金) 11:04:01ID:???
Zend_Paginator でページ移動をするviewで、
ページのエレメントではないチェックボックスやテキストボックスの状態を
ページ移動後も維持したいのですが、
方法が分かりません。ページ移動すると初期状態にもどります。
Zend frameworkに何か仕組みはあるのでしょうか?
0679nobodyさん2010/11/12(金) 12:11:24ID:???
移動前にサーバ側でパラメータ持ってればそのまま引き継がれるはず。
クライアント側で変更したなら当然Javascript使わなきゃだよ。
0680nobodyさん2010/11/12(金) 12:21:47ID:???
すまんちょっと訂正
viewscript内のhrefって基本は自分で書くようになってるやん。
維持するのもリセットするのもあんた次第。
維持する項目が多くてPC用ならセッション使うのが普通。
0681nobodyさん2010/11/12(金) 13:54:05ID:wenK3AdP
初めてZend Frameworkを触り始めました。
Bootstrapで初期処理を行うクラスとみて大丈夫でしょうか。

また、Bootstrap.phpで
protected function _initTest() {
$this->foo = 'var';
}

と変数を格納した場合、
class TestController extends Zend_Controller_Action
public function indexAction()
{
var_dump($this->foo);
}
}

のように、コントローラ側に値を渡すにはどうすれば良いのでしょうか
0682nobodyさん2010/11/12(金) 16:52:02ID:???
bootなんちゃら使ったことないから間違ってるかもだけど
$this->getInvokeArg('bootstrap')->foo
0683nobodyさん2010/11/12(金) 18:01:38ID:???
なんかもうフレームワークとかワケワカメだわ
いちいち必要なモジュール読み込んで
手続き書いていくだけでおなかいっぱいだよ・・
0684nobodyさん2010/11/12(金) 19:24:22ID:???
>>683
その手続きの先にある馬鹿げた繰り返しを防ぐためのものだから
もう少しだけがんばれ
0685nobodyさん2010/11/13(土) 01:50:36ID:???
上の方にも書いてあるが、引数をハッシュにするとタイプヒンティングが利かなくなって、それが問題。
0686nobodyさん2010/11/13(土) 09:44:11ID:YYAlO5qe
>>681
ちょっと違う
ブートストラップは、リソースを初期化してコンテナに保存する所なのよ。
つまりこう

protected function _initTest() {
$test = new stdClass;
$test->foo = "bar";
return $test;
}

とやるとtestという名前でコンテナ(レジストリ)に保存されるから、
あとはコントローラでもモデルでもビューでもどこからでも
ZendRegistry::get('test')->foo;
てやれば取り出せる

フロントコントローラとかビューとかDBとか良く使うリソースは、それ用のプラグインがあって、
初期値だけiniファイルで与えてやればコード書かなくても勝手に作られるようになってる。
0687nobodyさん2010/11/13(土) 10:24:40ID:???
>>685
/* @var $name ClassName */
を駆使すりゃどうにでもなるだろ
まぁ無駄なコードは増えるが
0688nobodyさん2010/11/13(土) 10:47:24ID:???
タイプヒンティングもオーバーロードもやらないで柔軟に開発するってのが元々のPHPの設計思想だろ
だからハッシュだとか可変引数だとかの議論はナンセンス
0689nobodyさん2010/11/13(土) 10:54:25ID:???
思想なんて変わってんのに、もともとのPHPの設計思想なんかに縛られてる方がナンセンス。
0690nobodyさん2010/11/13(土) 11:35:43ID:???
>>687
それはタイプヒンティングでは無い。

>>688
そんな事は名言されていない。
思想時に無かった故に、継ぎ足しされてカオスなコードになっているだけ。知ったか乙。
0691nobodyさん2010/11/13(土) 12:00:49ID:???
>>689
縛られてなんかないよ。
PHPでもやろうと思えばできる、やってもいいしやらなくてもいい、
ただ元々の設計思想が違うんだからJavaと同じようにできるわけがない、だからPHPがどうとかJavaならどうとかいう議論自体が無意味。
むしろ、OOP的に書かねばならないという方が凝り固まっているよ。

>>690
明言されてたら無条件に従うのか?w
思想時って何かよく分からないけど、上述の通りスタートが違うんだから仕様が違って当然。
カオスになって付いていけない?Perl的な書き方もC的な書き方もJava的な書き方もできるようにしましょう、ってだけの簡単な話だと思うが。
別に使うか使わないかはユーザの自由だよ。
0692nobodyさん2010/11/13(土) 12:22:25ID:???
まあ>>688はナンセンスって言ってるだけで
議論の価値そのものを否定してるわけではないだろうし
そうしてる間にも俺はオナ禁してるわけで
0693nobodyさん2010/11/13(土) 12:50:16ID:???
>>691
論点ずれすぎ。日本語でおk。
0694nobodyさん2010/11/13(土) 14:09:27ID:YYAlO5qe
おまえら引数にそうとうなこだわりがあんだな。

そんなことよりzendの話しようぜ。
>>686 たいぶ間違ってた、みんなごめん。ZendRegistry::set()/get()も簡単で悪くないと思うけど。

リソースが保存されるのはブートストラップの中にあるZend_Registryインスタンスだった。
だからアクションでtestリソースを得るには、
$this->getInvokeArg('bootstrap')->getResource('test')->foo

モデルとか外部から呼ぶときは、やっぱフロントコントローラのインスタンスからブートストラップを
とってくんのかな・・なんかまわりくどいような。

quickstartでDBアダプターどうなってんだろうと思って調べたら・・・!なんとで、Zend_Db_Tableの
staticなクラス変数にデフォルト値としてアダプタのインスタンスを突っ込んでたw
たしかブートストラップのリソースプラグインあたり
0695nobodyさん2010/11/13(土) 17:25:56ID:YYAlO5qe
いろいろ調べたんでまとめさせてください。というか間違いがあったら指摘して欲しい

Zend_Applicationを使うときの話です。
リソースプラグインを書かず、一般に俺々リソースを注入するには

まず application.ini に
oreore.foo = bar

Bootstrapで、
protected function _initOreore()
{
$oreore = new Oreore($this->getOption('oreore'));
//または
$oreore = new Zend_Config($this->getOption('oreore'));
//または
$oreore = $this->getOption('oreore');
// または
Oreore::setDefaultOptions($this->getOption('oreore'));

return $oreore;
}

アクションコントローラで、
$this->getInvokeArg('bootstrap')->getResource('oreore')->foo

モデルで使うには、
Zend_Controller_Front::getInstance()->getParam('bootstrap')->getResource('oreore')->foo

またはアクションコントローラでモデルをnewするときに、
$this-_oremodel = new Oremodel(
$this->getInvokeArg('bootstrap')->getResource('oreore')
);
0696nobodyさん2010/11/13(土) 17:28:27ID:???
>>691

PHPそのものはともかく、ZFでは基本的にOOP推奨な気がするけど。
0697nobodyさん2010/11/13(土) 17:30:24ID:???
>むしろ、OOP的に書かねばならないという方が凝り固まっているよ。

むしろ、フレームワークって凝り固めてブレを減らすためのツールじゃないの?
0698nobodyさん2010/11/13(土) 18:43:11ID:???
反応ないな(´・ω・`)
リードオンリーなら2番目の
return new Zend_Config($this->getOption('oreore'));
禿げしく推奨
0699nobodyさん2010/11/13(土) 21:54:53ID:???
フォーム表示用のアクションと
検証を行うアクションを別にするとどうもしっくり来ない
検証エラーがあった場合に表示させることを考えると同じメソッドにした方が楽だけどそのへんどう?
0700nobodyさん2010/11/14(日) 12:36:29ID:cYG57qWr
BootstrapでGET、POST取得する方法ないのん?
0701nobodyさん2010/11/14(日) 20:41:27ID:???
>>697
フレームワークはOOPではない
0702nobodyさん2010/11/14(日) 21:38:53ID:???
Bootstrapの_init***で
$this->bootstrap('Request');
がなぜ使えないという事を聞いてるんですか?
普通に $_GET や $_POST 使えばいいのでは
0703nobodyさん2010/11/15(月) 07:59:13ID:???
>>701
日本語でおk
0704nobodyさん2010/11/15(月) 13:31:06ID:???
>>701
??
0705nobodyさん2010/11/15(月) 13:40:11ID:???
>>679 >>680
返事ありがとございます。
保存したい値を追加したURLへリダイレクトするようにします。
0706nobodyさん2010/11/15(月) 16:55:25ID:5FHMT34S
Zend FrameworkでPDO_Mysqlを使っております。
最後にデータベースに格納したauto_increment_idを取得する場合、
last_insert_id()に値する関数はありますか?
(ちなみにZend_Dbを使っております)
0707nobodyさん2010/11/15(月) 17:07:49ID:???
>> 706
こんなふうに DbTable でやっています。
$this->insert($data);
return $this->_db->lastInsertId();

0708nobodyさん2010/11/15(月) 19:35:02ID:tul9B6Yr
Zend触り始めたけど結構活発で良かった

エラーの質問ですが
An error occurred
Application error
と出てエラー内容が出ないのですが、どこで設定できるのでしょうか
宜しくお願いします
0709nobodyさん2010/11/15(月) 22:49:00ID:???
>>707
insertの戻り値でもプライマリキー取れるよ。

>>707
http://framework.zend.com/manual/ja/learning.quickstart.create-project.html
Configurationの項目見る、環境変数はhtaccessで設定するようになってたと思う
0710nobodyさん2010/11/16(火) 07:53:24ID:Rh5mS6i1
>>709
あちがとうできました!
お陰でエラーの原因を突き止めやすくなりました
0711nobodyさん2010/11/16(火) 09:45:32ID:???
>>708
.htaccessかhttpd.confに
SetEnv APPLICATION_ENV development
0712nobodyさん2010/11/16(火) 10:41:07ID:???
>>709
そうだったんですね。orz
情報ありがとうございます。
0713nobodyさん2010/11/19(金) 19:11:59ID:???
ZFのModuleって使えそうで使えないな…
該当モジュールにルーティングされようとなかろうと、
常に全モジュール初期化されるって仕様はどうなの。
モジュール別にPlugin動かしたりしたいのにわけわからなくなるだろ・・・
意味なくね?
0714nobodyさん2010/11/19(金) 19:21:11ID:???
逆にモジュールごとに初期化するのメンドクサってのがphperのレベル。
豪にイラズンバゴウに従え。
0715nobodyさん2010/11/19(金) 21:29:39ID:???
モジュールは構成が複雑になるだけで、使い勝手微妙だよな・・・

というかZend_Controller系全般が微妙
0716nobodyさん2010/11/21(日) 15:42:08ID:???
>>695
亀ですまんが、モデルからFrontController参照するのは筋が悪いと思う。
モデルの単体テストが難しくなる。

サービスロケータでも作ってモデルインスタンス取得を初期化し、
そこでセットしてあげるのがいいんじゃないかな。
単体テスト時はsetUpでセットしてあげれば良いし、
モックをセットするようなことも簡単になる。
0717nobodyさん2010/11/22(月) 11:29:12ID:???
おおそういう意見を待ってたのよ。でもまあ議論したいわけじゃなくて
だいたいこうやっときゃ齟齬ないよってのが知りたいだけなんだけど。

たしかにモデルからFrontController参照するのは都合悪そうですな。
やっぱモデルのコンストラクタに必要なリソースを入れるのが普通ですかな。
0718nobodyさん2010/11/22(月) 16:21:21ID:???
>>700
Bootstrapでリクエストオブジェクトを使うには、自分でリソース化しなきゃだめ。
やり方はリファレンスガイドのZend_Applicationあたり参照。

リクエストオブジェクトってリソースって扱いじゃないみたい。
フロントコントローラで作られて、ルーター、ディスパッチャやコントローラーで共有してるって感じ。
0719nobodyさん2010/11/24(水) 15:59:17ID:???
その編の単体テストとか考えてプログラミングしてる香具師がphpの場合は皆無だしなあ。
htmlやjavascript並にちゃんと表示されて動けばいいジャンで終わってるし。
0720nobodyさん2010/11/24(水) 16:08:32ID:???
字面だけだと解りにくいし
どっかに日本語で講義してるサイトとかあればいいなぁ
0721nobodyさん2010/11/25(木) 23:18:34ID:???
ZFってプラグインとかプラグインリソースとかコントローラーとか、
シングルトンだと思ってたらinitが何度も呼ばれてたりしてよくわからん。。
0722nobodyさん2010/11/27(土) 01:59:15ID:???
oopはinit呼ばれまくりなのは基本。ウザイならクラスを上書きすれば。
0723nobodyさん2010/11/27(土) 15:01:11ID:PanI73UW
class IndexController extends Zend_Controller_Action {
public function init(){
echo $this->view->render('index/header.phtml');
exit();
}

正しくheader.phtmlは出力されるのですが、

$this->_helper->layout->header =$this->view->render('index/header.phtml');

として、
レイアウトスクリプトの中で、

<?php echo $this->layout()->header; ?>

としても何も出力されません。
なぜ出力されないのでしょうか?

0724nobodyさん2010/11/27(土) 15:23:52ID:???
$this->layout()->header = $this->view->render('index/header.phtml');
0725nobodyさん2010/11/27(土) 15:38:07ID:PanI73UW
>>724さん、ありがとうございます。

しかし、何も表示されないです・・・・。

0726nobodyさん2010/11/27(土) 23:57:44ID:???
$this->header = $this->view->render('index/header.phtml');

<?php echo $this->header; ?>
0727nobodyさん2010/11/29(月) 15:27:10ID:???
>>722
わかって端折って書いてるんだろうけど、字面どおりだとなんだかなーなかんじ。
0728nobodyさん2010/11/29(月) 22:14:24ID:???
http://zend.localhost/testにアクセスすると以下メッセージが出ます、
基底クラスからコントローラー付きの_forwardが使えないのって仕様なんでしょうか?バグなんでしょうか?
require_once APPLICATION_PATH . '/controllers/AbstractController.php';
class IndexController extends AbstractController
{
public function adultAction()
{
die("adult");
}}
require_once APPLICATION_PATH . '/controllers/AbstractController.php';
class TestController extends AbstractController
{
public function init()
{
$this->setup();
}
public function indexAction()
{
// action body
}}
class AbstractController extends Zend_Controller_Action
{
protected function setup()
{
// $this->_forward("adult", "index");
$this->_forward("adult", "index");
//$this->_redirect("/index/adult");
}}
0729nobodyさん2010/11/30(火) 10:35:10ID:???
リファレンスのアクションコントローラーのとこ嫁
_forwardはinitじゃなくてpreDispatchで使う仕様。
無駄を省くためわざとそうなってんのかな。
0730nobodyさん2010/11/30(火) 15:54:28ID:???
Zend_Applicationをコマンドラインから使えるか試してみました。
そこまでして…という気がしなくもなくなってきたんですがまあせっかくなんで。

[command-line : production]
phpSettings.display_startup_errors = 0
phpSettings.display_errors = 0
phpSettings.error_repotring = -1
phpSettings.log_errors = 1
resources.frontController.throwExceptions = 1
resources.frontController.noErrorHandler = 1
resources.frontController.noViewRenderer = 1
resources.frontController.disableOutputBuffering = 1
resources.layout.layoutPath =
resources.layout.layout =
 ↑残念ながらiniの値はunsetすることができずlayoutは作られてしまう。
  どこかでdisableLayout()する必要がある。

あとはindex.phpのようなやつから以下のようにアプリケーション起動
My_は空っぽのやつを作る必要がある。たしかレスポンスのsendHeaders()は空メソッドでオーバーライド

Zend_Layout::startMvc()->disableLayout();

$application->bootstrap()
->getBootstrap()->getResource('FrontController')
->setRequest(new Zend_Controller_Request_Simple($action, $controller, NULL, $params))
->setRouter(new My_ZendControllerRouterRouteCli())
->setResponse(new My_ZendControllerResponseCli());
$application->run();
0731nobodyさん2010/11/30(火) 16:28:36ID:???
すみませんちょっと説明不足でした。
既存のアプリケーションのリソースやコントローラーを利用して
コマンドラインからほげほげするというものです。
0732nobodyさん2010/11/30(火) 19:39:50ID:???
>>730
いいね。
もっと試してみてレポよろしく。
07337282010/12/03(金) 19:24:14ID:zaEZnwnp
そうだったのですね、知りませんでした。どうもありがとうございます。
0734nobodyさん2010/12/03(金) 19:48:49ID:???
ZendFrameworkを習うのに、お勧めのチュートリあったら教えてください。
0735nobodyさん2010/12/03(金) 20:39:31ID:???
英語わかるならyoutubeに動画がある
0736nobodyさん2010/12/04(土) 10:56:51ID:???
掲示板を作ってるんだけど、ログインした人のみ投稿できるようにしようと思う。
zf固有の質問でなくて申し訳ないが、WEBアプリの一般的なロジックとして、
投稿時に投稿内容と投稿者キーをDBに挿入する為には投稿者キーはcookieで保持し続けるのだろうか?

0737nobodyさん2010/12/04(土) 12:26:29ID:???
なんで偉そうなの?
0738nobodyさん2010/12/05(日) 02:33:40ID:???
>>736
先生!CookieにはセッションID以外いれ無いと思います!
07397342010/12/05(日) 06:34:05ID:???
>>735
見てみました。
でも超英語ですね。
全然理解できませんでした・・・

ともあれ情報ありがとう。
0740nobodyさん2010/12/06(月) 13:16:53ID:???
よお!!みんな!!
736だぜ!!

Zend_Authですべて解決した。
よい子はちゃんとドキュメントを読むように!!

以上だ


0741nobodyさん2010/12/07(火) 17:17:46ID:???
>>740
頼むからそんなんで解決とかやめてくれ…
フレームワークは楽をする為のものであって
原理知らずに出来ちゃう便利な道具じゃないんだよう
せめて、Zend_Authの挙動を理解してから使ってくれよ

>>738
最近は暗号化してCookieに全部放り込むのもありだな
ガラケー死ぬけど
0742nobodyさん2010/12/08(水) 10:39:51ID:???
741>>

って言うんだったらお前がさっさと教えてやれよ

0743nobodyさん2010/12/08(水) 11:19:43ID:???
そのアンカーのつけ方流行ってんの?
0744nobodyさん2010/12/08(水) 16:45:27ID:???
743>>
まあ落ち着け。
0745nobodyさん2010/12/08(水) 17:11:03ID:???
<744>
そういうレスは煽りって言うんだぜ低脳
0746nobodyさん2010/12/08(水) 21:32:11ID:???
745<<    (越えられない壁)    <<俺
0747nobodyさん2010/12/09(木) 12:13:32ID:Z4PxvFs5
Zend_AuthはIDorPassに値ないとエラーになるから使うのやめたわ
catchでエラー処理すんのもめんどくさい
0748nobodyさん2010/12/09(木) 15:20:40ID:???
>>747
最初は俺もZend_Auth継承したクラスつかったりしてたけど、
Zend_Authあんまり意味ないよね。
今は独立したクラスで実装してるわ。
0749nobodyさん2010/12/09(木) 21:35:22ID:???
Zend_AclもZend_Authも微妙だよな・・・汎用的故に、独自に拡張し辛い。
そういう箇所に限ってプロジェクト毎に処理ロジックが変わったりするし、
結局自作の認証/権限クラスを作るのがベストだと思った。
0750nobodyさん2010/12/11(土) 12:44:49ID:???
>>749
「そういうとこは自分で書いちゃいなよ!」ってのも
ZFの魅力じゃないか。
0751nobodyさん2010/12/15(水) 09:01:50ID:rTeq7LP8
Zendで作ってあるシステムのサンプルみたいなのってない?
できれば小中規模のもの
0752nobodyさん2010/12/15(水) 09:23:09ID:???
本買えば付いてると思う
0753nobodyさん2010/12/15(水) 16:16:05ID:???
でも自分で作るのならzfの意味無いw
0754nobodyさん2010/12/18(土) 13:33:22ID:???
CakePHPからZFに転向した者です。

クラス設計が素直で自然であり、メソッド等の名前が判りやすく、品質の高さを
感じました。

ZFを知り、CakePHPが糞だってことに気づきました。
あ〜早めに気づいてよかった!
0755nobodyさん2010/12/18(土) 15:52:16ID:???
でもCakePHPのほうが仕事あったりするよね
0756nobodyさん2010/12/19(日) 03:41:25ID:???
無いよ
0757nobodyさん2010/12/19(日) 10:03:56ID:???
特定のブローカーがFWの仕事押さえてるから回ってこないお( ^ω^)
0758nobodyさん2010/12/20(月) 10:28:03ID:???
ZFって基盤だけ使ってあとは自分で作成するのがベストだよな
0759nobodyさん2010/12/20(月) 19:04:35ID:BA8UBi3n
ZF バージョン1.10を使用しています。

http://localhost/Hoge/fuga/
ブラウザからアクセスをするとApacheのエラーログに
PHP Notice: Use of undefined constant nul - assumed 'nul' in (ZFをインストールしているディレクトリ)/Zend/Controller/Dispatcher/Standard.php on line 262
と出力されてしまいます。

当該箇所には
$controller = new $className($request, $this->getResponse(), $this->getParams());
と記述されているだけなので、'nul'というのがどこから来ているのか検討もつきませんでした。
$classNameにはHogeが入って来ていました。。。
Noticeが出る原因は何が考えられますか?

よろしくお願いします。
0760nobodyさん2010/12/20(月) 19:36:44ID:???
ZFの初学におすすめの本を教えてください。
(PHPは使えますがフレームワークは初めてです)

田舎なので立ち読みできず、AmazonのZF関係の
コメントなども少ないので・・・
0761nobodyさん2010/12/20(月) 20:05:05ID:???
>>760
http://framework.zend.com/manual/ja/
0762nobodyさん2010/12/20(月) 22:24:17ID:???
ZendのMVCのディレクトリ構造を使いつつ、コントローラープラグインを使ったり作ったりする方法を知りたいのですが、どこかに資料はないでしょうか?
公式のマニュアルを見たのですが、プラグインを有効にする方法などが載っていませんでした。
検索したところ、海外のブログでいくつか見つかるくらいで、正しい方法がわかりません。

一応自分の見つけた情報をまとめておきます。

http://framework.zend.com/manual/ja/zend.controller.plugins.html
公式のマニュアル、プラグインをどこに登録するのか等がわかりませんでした。
http://codezine.jp/article/detail/2341?p=3
MVCを使ってない例
http://doremi.s206.xrea.com/zend/etc/plugin.html
正常に動作しない例

http://www.waysoflife.be/general/zend-front-controller-plugin-redirect-after-login-2/
プラグインをapplication.iniに書いて使う方法
http://blog.ekini.net/2009/06/04/registering-your-custom-plugins-in-zend-framework-18/
http://spokefire.co.uk/blog/2010/4/how-to-create-a-zend-controller-plugin
プラグインをbootstrapに書いて使う方法

application.iniに書く方法とbootstrapに書く方法は一応正常に動作しますが、
公式のマニュアルとはまったく違う方法でプラグインを読み込んでるので、これが本来の正しい方法なのかわかりません。
よろしくお願いします。
0763nobodyさん2010/12/20(月) 22:48:41ID:???
別に好きな場所に置いてnewしてregisterPluginで登録すればおk
0764nobodyさん2010/12/20(月) 23:07:07ID:???
>>763
newを書くファイルって何が相応しいんでしょうか?
あとZend_Controller_Front::getInstanceを書く場所もわかりません。
0765nobodyさん2010/12/20(月) 23:34:09ID:???
>>764
別に好きなファイルでいいのでは?
bootstrap.phpでもいいしindex.phpでもいい
0766nobodyさん2010/12/20(月) 23:39:02ID:???
あと試してないけどController内でもできるんじゃないかな
0767nobodyさん2010/12/21(火) 11:55:55ID:???
ルールもそれほどなく、本当に自由に実装出来るのがZFの良いところ。
実装次第でパフォーマンスや効率も変わってくるだろうし。

ただ、何も考えずルールに則って作りたい場合にはどうしても不向きだね。
あと使う人によって実装が異なってくるから、ルール作らず複数人で開発してしまうとごちゃごちゃする
(ZFに限った話じゃないけど)
0768nobodyさん2010/12/21(火) 23:26:15ID:???
ZFに限った話じゃないならZF関係ないじゃん
0769nobodyさん2010/12/22(水) 00:16:15ID:???
SymfonyやCakeは良くも悪くもガチガチだろ
0770nobodyさん2010/12/22(水) 10:31:49ID:???
Zend_Db_Tableってテーブルごとに作成しますよね。
(TemplateMethodに法った場合)
その場合ってmodel扱いでいいんですかね

class UserTable extends Zend_Db_Table
{
   protected $_tableName = "user";
}
0771nobodyさん2010/12/22(水) 23:20:20ID:???
えっ
0772nobodyさん2010/12/23(木) 15:14:15ID:8j0z9BIK
Zend_Formでフォームを作っているのですが、デフォルトではform要素の中にdl要素が入り、その中にコントロールはdd要素、ラベルはdt要素で挿入されると思いますが、dtあるいはdd要素の中にspan要素を挿入したいです。

public function indexAction(){
$form =new Zend_Form;

$form->clearDecorators();
$form->addDecorator( 'FormElements' )
->addDecorator( 'HtmlTag', array( 'tag'=>'dl', 'id'=>'controlPane' ) )
->addDecorator( 'Form' );
$form->setMethod('post')->setAction('/regist/add');
$form->setAttrib('id', 'registForm');

$form->setElementDecorators( array( 'ViewHelper', 'Label', array( 'HtmlTag', array( 'tag' => 'dt' ) ) ) );

$counroty =new Zend_Form_Element_Select('country');
$counroty->setLabel('言語');
$counroty->setDescription('<p>test</p>');
$counroty->addDecorator('Label', array('tag'=>'dt', 'class' => 'controlTitle' ) );
$form->addElement( $counroty );

$this->view->assign( 'form', $form );
}
今はこうなっています。
$counroty->setDescription('<p>test</p>');
で所用を達成できるかと思ったらうまくいきませんでした。
どうすればいいでしょうか?

0773nobodyさん2010/12/23(木) 16:15:08ID:???
>>772

$decorator->setOption('escape', false);
0774nobodyさん2010/12/23(木) 16:27:38ID:8j0z9BIK
>>773
お返事ありがとうございます。
出かけないといけなくなりました。
後ほど正しく動作するコードが書けたら報告いたします。


0775nobodyさん2010/12/24(金) 15:05:03ID:qkiZtUnD
ZendFrameworkは公開フォルダ内(例えば/htdocs/zf)にindex.phpとrewriteを有効にするために、
.htaccessを設定する必要がありますが、ここで質問があります。

この場合セキュリティが心配なのですが、どのようにhttpd.confを設定すればいいのでしょうか?
自分は基本的に.htaccessを使いたくない為に<Directory />、<Directory "/usr/local/apache2/htdocs">内で、
AllowOverride None
を設定しているので、本やネットに載っていなかった為に自分で勝手に
<Directory "/usr/local/apache2/htdocs/zf">
Options -Indexes -FollowSymLinks +SymLinksIfOwnerMatch
AllowOverride all
Order allow,deny
Allow from all
</Directory>
と、ZFを使用するには設定せざるを得ませんでした。
ZFがapplicationディレクトリ以下をどのように使用するのかを詳しく分からない為にAllowOverride allにしましたが、
これではAllowOverride all等セキュリティに不安が残るような気がします。

現に、公開フォルダ外に置いたはずの/application/ディレクトリ内のファイルのパスの指定の仕方でさえも(自分には何故作用するのか仕組みが分かりませんが)rewriteエンジンが作動しているようで、offにするとZFが働かずエラーになります。
つまり公開フォルダ外の/application/ディレクトリにも.htaccessが作用しているとなるとセキュリティ上一体どう設定すればいいのか分かりません。
皆さんはどのようにして設定されているのでしょうか?
また、ZF使用時のApache関連の設定方法を詳しく説明しているサイト等ありませんでしょうか?

SymLinksIfOwnerMatchを設定しているのは、
[error] [client 127.0.0.1] Options FollowSymLinks or SymLinksIfOwnerMatch is off which implies that RewriteRule directive is forbidden: /usr/local/apache2/htdocs/zf/controller/request
等と出たために、FollowSymLinksは絶対に指定したく無かったために加えました。
0776nobodyさん2010/12/24(金) 15:31:58ID:???
ちがうちがう そうじゃ そうじゃない
0777nobodyさん2010/12/24(金) 15:37:03ID:???
>>775
3行にまとめてくれ
07787592010/12/24(金) 16:59:30ID:lpwJZIX8
今週ずっと原因を調べてたんですが、
結局わからずじまいでした。

どなたか何か思い当たる節があれば
アドバイス頂けないでしょうか。
0779nobodyさん2010/12/24(金) 17:26:11ID:???
100%再現する問題なら簡単に切り分けられると思うけど
0780nobodyさん2010/12/24(金) 18:05:10ID:???
>>778
再現できるソースをくれ
07817752010/12/25(土) 16:06:14ID:???
>>スリーセブン
rewriteエンジンが非公開ディレクトリまで及んでいるようですが、ZFで公開するディレクトリ、そして公開しないWebコンテンツのアプリケーションディレクトリの為の
httpd.confの設定はセキュリティの観点から皆様はどのように設定していますでしょうか?
パーミッションは一応設定していますが、上記に書いた自分の設定ではどうも不安なのですが、セキュリティ的に大丈夫なのでしょうか?
0782nobodyさん2010/12/25(土) 16:08:58ID:???
>>781
そういうことなら
http://framework.zend.com/manual/ja/project-structure.rewrite.html
0783nobodyさん2010/12/26(日) 17:27:17ID:A6fFNaAD
Zend_Formのデコレータについて教えてください。
デフォルトではフォームはdlタグで囲まれ、ラベルはdtタグで囲まれ、コントロールはddタグで囲まれると思いますが、ddタグの中にテキストボックスとセレクトボックスなど複数のコントロールをいれたいと思っています。
ラベルは一つです。

生年月日:[テキストボックス]年 [セレクトボックス]月 [セレクトボックス]日

このようなイメージです。

Zend_Form_Decorator_Abstract派生クラスを用意して、
private $_element2; /* 二つ目の要素 */
private $_element3; /* 三つ目の要素 */

public fuction setElement2( $element2 ){/* 割愛 */} /* 二つ目のフォーム要素をセットする */
public fuction setElement3( $element2 ){/* 割愛 */} /* 三つ目のフォーム要素をセットする */

public function buildInput(){
/* 割愛 コントロールを三つ並べてddタグで囲む */
}

このようなデコレーターを作るのかな・・・と思ってはいるのですが、、、
Zend_Form->addElement(XXX)する際、三つのコントロールを同時にaddする方法がわかりません。
どのようにすればいいでしょうか?

0784nobodyさん2010/12/31(金) 13:53:33ID:???
初心者です。

Bootstrap内に変数を宣言しておき、それを
コントローラのメソッド内から参照したいのですが、方法がわかりません。
どうしたら良いのでしょうか?
0785nobodyさん2010/12/31(金) 13:58:04ID:???
がいしゅつ
0786nobodyさん2011/01/02(日) 12:33:50ID:???
日本語マニュアルが必要になる度に毎回Web経由で見ていたが、
ダウンロードしてオフライン利用できる便利なもののがあったんですね!

http://framework.zend.com/docs/translations

APIマニュアルも、英語だけどオフライン用。
http://framework.zend.com/docs/api

知らなかった・・・
0787nobodyさん2011/01/02(日) 13:18:40ID:???
がいしゅつ
0788nobodyさん2011/01/02(日) 14:36:43ID:???
ネット上のリファレンスはアフォみたいに垂れ流されてしかもサイトが重くて邪魔なのばかりだもんな
検索しても同じリファレンスマニュアルの中途半端なコピーが山のように上位ヒットするし迷惑してる人多いと思う
0789nobodyさん2011/01/02(日) 18:42:46ID:???
公式サイトだけ指定して検索すりゃいいだろ
0790nobodyさん2011/01/08(土) 21:37:05ID:???
ZFムズいにゃ。
0791nobodyさん2011/01/08(土) 21:39:49ID:???
何なら簡単なんだ
0792nobodyさん2011/01/09(日) 09:34:24ID:???
>>791
ZFのモジュール設計は素晴しいと思う。
Cakeより100倍わかりやすい。
しかしQuickStartとAPIマニュアルだけでは、俺みたいな初学者には少々敷居が高いと感じました。

そこで、TIPS集みたいな情報があれば、大助かりです。
Webサイトの情報をあちこちかき集めれば自分なりのTIPS集ができるかもしれないけど、
初学者はかき集めた情報の正誤を判断することができないし、個々のTipsのドキュメント品質
を統一できないので、やはり本家本元のHPにTips情報があればいいなぁ・・・と思った次第です。

ぜいたくかな?
0793nobodyさん2011/01/09(日) 10:52:06ID:???
リファレンスが中途半端だし
なんと言っても説明が下手くそだよな、それが解りにくくしている一因になってる
0794nobodyさん2011/01/09(日) 11:59:13ID:???
>>792
ぜひ頼んだ
0795nobodyさん2011/01/10(月) 02:57:48ID:???
>>792
何がわからないのか、どこで躓いているのか、を明確にしておくれ。

FW自体に細かいルールが無く、
良くも悪くも自由に扱えるライブラリ群って感じなので、
自分のコーディング方法が正しいのか否かを判断するのは難しい気もする。

>>793
入門者向けに1から10まで説明が乗ってるリファレンスより遙かに情報をくみ取りやすいと思うが・・・
リファレンスでクラス概要を調べて、詳細はソースを読めばいいと思うよ。
0796nobodyさん2011/01/10(月) 04:20:02ID:vXLRlMCo
画面表示を目的としないアクションに直接アクセスされた場合に
任意のエラーを返したいと思っています。
例えばウィジェットのためのアクションで、
メインアクションにてActionStackに追加->
最終的に任意のレイアウトセグメントに表示するなどして使うといった目的のものです。

自分の場合、ほとんどは放っておいてもActionの実行時エラーとなるのですが、
preDispatchなどの段階で制御したいです。
直接アクセスとその他(ActionStackで実行された等)を判別するには
どのような方法が考えられるでしょうか。
0797sage2011/01/10(月) 12:43:35ID:???
>>792, 793
相変わらず「誰か」がやってくれるものだと思っている。
オープンソースなんだから足りないと思ったところはどんどん自分で参加して改善すればいい
0798nobodyさん2011/01/10(月) 13:14:55ID:???
Zend_Form_Element作ってViewにrenderしてるんですが、Errorをrenderすると<ul><li>で囲まれますが<p>に変更したいです。
addDecorator()はどのように書けばいいでしょうか?

07997922011/01/10(月) 22:06:24ID:???
>>797
オープンソースだから足りないものを要求するのではなく、
そのコミュニティに参加し貢献すべきというのは、仰るとおりです。

しかしZFを理解できず挫折する方々も多いと思う。
私は残念ながらTipsを作成するだけ習熟していないが、習熟していない
が故に、初心者向けのドキュメントの不備(?)を指摘することで
微々たる貢献をしたつもりです。
つまりTips集があれば、多くのZF初心者を救えるのではないか、と思った次第。

ZFのコミュニティは上記のようなスタンスも許されないものなのでしょうか>797
0800nobodyさん2011/01/10(月) 22:23:23ID:???
http://ayacnews2nd.com/archives/51685163.html
279 :名無しんぼ@お腹いっぱい :2010/09/04(土) 08:48:29 ID:n1Pb5Cs90
>>274
世の中に男は三種類しかおらぬ
形は何であれ勝負に挑む勇敢な者。その勝者と敗者…
そして一生勝負に出ない腰抜けだが…
三つ目は論外だ。語るに値せん


295 :名無しんぼ@お腹いっぱい :2010/09/05(日) 21:24:40 ID:H9tr5CHz0
>>279
何かに似てると思った
これ思い出した

「薩摩の教え・男の順序」
 一、何かに挑戦し、成功した人
 二、何かに挑戦し、失敗した人
 三、自分では挑戦していないが、挑戦する人を手助けした人
 四、何もしない人
 五、何もしないが、他人の批判だけをする人
0801nobodyさん2011/01/10(月) 23:46:42ID:???
>>799
>ZFのコミュニティは上記のようなスタンスも許されないものなのでしょうか

ZFに限らず、大抵の技術系コミュニティに言える事だけど、
何が解らなくて、何が足りないと思うのかを具体的に示さない限り、
学ぶ気も無い教えて君と認識されてスルーされるのがオチだよ。

単に「難しい」「理解し辛い」ってだけなら、基礎知識が足りてないだけだろうから、
PHP、プログラムの基礎、デザインパターンあたりのから学ぶべきだろうね。

余談だけど俺の周りにはそのタイプが多い、
基礎が出来てないけどFW導入すれば開発楽になるんでしょ?って人。
0802nobodyさん2011/01/10(月) 23:58:43ID:???
>>800
ちょww
コピペしただけじゃお前5番じゃないかよってゆう・・・。
まあその理屈でいったら俺も5か。
0803nobodyさん2011/01/11(火) 11:39:37ID:+Q2uG4Ip
Zend FrameworkのZend_Gdata_YouTubeを使って、Youtubeに動画をアップロードしました。
アップロード後、http://www.youtube.com/watch?v=XXXXXXのXXXXXXの部分を取得することは出来たのですが、
変換処理が完了しているかどうかを識別するのはどうすればいいのかを教えていただけませんか。

やってみたことは下記でexceptionに入った場合はエラーになるという方法です。
===============================================
$yt = new Zend_Gdata_YouTube();
try{
$videoEntry = $yt->getVideoEntry("XXXXXX");
}catch(Exception $e){
//動画が存在しない
}
===============================================
しかしこれでは変換中のものはExceptionに入りませんでした。
よろしくお願いします。
0804nobodyさん2011/01/11(火) 21:54:36ID:???
アップロードが完了したら変換処理が完了してるんじゃないの?
UPしてからしばらくかかるとかあんの?
どちらにせよXMLの中身に出てくるんじゃないのか
08057972011/01/11(火) 22:44:01ID:???
>>799
もし今まで誰も気づいていなくて、君が初めて指摘したことだったらもっと価値があったと思う。
でも、いままでマニュアルについてはいろいろな「指摘」がなされてきているから、残念なことにもう目新しい話じゃないんだ。
同じ要望を持つ人がどれだけいるかという投票にはなるけどね。

今の問題点はむしろ、「何が必要か」じゃなくて「誰がそれをやるか」だと思う。
なので、問題点の指摘にとどまらず、それを形にするところもリーダーシップを取って進めたらすばらしいことだと思う。
ちなみに zendframework.vla.jp こういうことをやっている人もいるのを見つけているので、ここにみんなで肉付けしていくのでもいいんじゃないかな
0806nobodyさん2011/01/17(月) 22:59:36ID:???
アレ?
いつからダウンロードするのにログイン登録しなきゃいけなくなった?
マジうざいんですけど・・・
0807nobodyさん2011/01/17(月) 23:02:06ID:???
別にいらないと思うけど
0808nobodyさん2011/01/17(月) 23:06:33ID:???
え?
http://www.zend.com/community/downloads
ここからZipを取ろうと思ったらログイン画面に飛ばされましたけど
どうにかしてログインしなくても済むのですか?
0809nobodyさん2011/01/17(月) 23:12:11ID:???
>>808
http://framework.zend.com/download/latest
ここから落とせるよ
0810nobodyさん2011/01/17(月) 23:14:44ID:???
>>809
ありがとうございます
0811nobodyさん2011/01/17(月) 23:31:02ID:???
Zend_Dbについて質問させてください。
皆さんはprepare()→execute()等でSQL文を書いていますか?
それともZend_Db_Tableクラスによるメソッドチェーンを利用していますでしょうか?

インピーダンスミスマッチの問題、動的な抽出条件、セキュアを意識しなくても良い等を考えればZend_Db_Tableクラスを利用した方がいいのかもしれませんが、
O/Rマッピングによるパフォーマンスの低下と、自分の思ったようなSQL文が書けるのか?と思うとどっちがいいのか分かりません。
確かに、一般的なSELECT文等であればZend_Db_Tableクラスの方がいいのかもしれませんが、複雑な連結とかした場合や、
また、パフォーマンスチューニングをZend_Db_Tableクラスで作った文で出来るのかな?と思うと普通にSQL文を書いた方がいいのかな、とか思ったりします。
ただ、記法の楽さやコードの変更時等は圧倒的にメソッドチェーンの方が楽そうですけど。

実際ZFで運用している方はどちらの記法で運用していますでしょうか?
0812nobodyさん2011/01/17(月) 23:32:06ID:???
他人が使ってればいいの?
0813nobodyさん2011/01/18(火) 00:42:18ID:???
>>812
いや、そういうわけではなく、使いにくそうな気がして、実運用上で使用されているのかな?よ思いまして
確かにif文やforeachから動的に入れ込み、色々と楽に出来るのは分かるのですが、SQLとしてはどうなのかなと
ま、商品管理からするとblogシステムとかではさほど難しいSQLもないので大丈夫かもしれませんが
0814nobodyさん2011/01/18(火) 00:45:13ID:???
僕はZend_Db(PDO)使ってます。
理由はSQL書くの好きだからです。
0815nobodyさん2011/01/18(火) 13:22:00ID:???
おれもZend_Db_Table使ってない
quickstartのGuestbookMapper見て使いづらそうだったんで。ちょっとかっこいいとは思うんだけどw

Zend_Dbを素で使うときはprepareじゃなくてqueryだったような。
条件によってSQLを変えたいときはZend_Db_Selectが便利ですよん
0816nobodyさん2011/01/18(火) 17:53:24ID:???
Zend_Db_Tableの最大の欠点はLIKE使いたいとき。
ゲロコードになる
0817 [―{}@{}@{}-] nobodyさん2011/01/19(水) 08:49:05ID:???
リファレンスとかカスケード使えないDBなんで出来るだけZend_Db_Tableに任せてる
が、複雑なセレクト、サマリ更新、式やサブクエリ含むアップデートは結局手でゴリゴリ書かないとむずかしい
queryとTable系でトランザクション違うのか混ぜるな危険を感じた事があった


今時リファレンスが無い()笑とか言われるかも知れないけど多分最新の安定バージョンなんだorz
0818nobodyさん2011/01/19(水) 09:21:24ID:???
住人の結論:Zend_Db_Tableは実運用では使えない

自分はSQLの書き方が分かりにくくなるので使っていません
後、純粋なSQL文に慣れているので

逆に、Zend_Db_Tableを運用上で使っている人に意見を聞いてみたいなぁ
自分には知らない便利な活用法なんかあるかもしれないからね
0819nobodyさん2011/01/19(水) 13:34:46ID:???
俺は複雑な検索や最適化が必要な箇所はSQLクエリ書いてる。
1つのテーブルに対する単純なCRUDにはZend_Db_Table使ってる。
select()等のメソッドチェーンは使っていないが便利だよ。

// テーブル定義のキャッシュ使う
Zend_Db_Table::setDefaultMetadataCache($zendCache);

// テーブルのO/Rマッパ作成
$table = new Zend_Db_Table(array(xxxxxx));

$row = $table->find($id)->current(); // キーで検索
$row = $table->createRow(); // 新規行の作成

// 行を更新して保存
$row->fieldName = "fieldValue";
$row->save();

// 行を削除
$row->delete();

こんな感じに書ける。
Zend_Db_Tableインスタンスを取得するショートカットメソッド定義しておけば、

$row = getUserTable()->find($userId)->current();
$row->fieldName = "xxxxxx";
$row->save();

と数行で書ける。

>>817
>queryとTable系でトランザクション違うのか混ぜるな危険を感じた事があった
トランザクションはDb_Adapter単位なので、意識してれば混在しても問題無いよ。
0820nobodyさん2011/01/19(水) 14:32:35ID:???
うはそうだったのか、使えるじゃんZend_Db_Table
せっかちな人はモデルからfetch結果(Zend_Db_Table_Rowset)を返してそのままviewに突っ込めばいいのか。

quickstartのこの実装はいったい何だったんだw 生真面目?
DB → Application_Model_DbTable_Guestbook → Application_Model_GuestbookMapper → Application_Model_Guestbook → view
0821nobodyさん2011/01/20(木) 02:54:37ID:???
>>820
複雑なSQLの入ったコードをDBTABLEに書くのが気持ち悪いから
生真面目実装してます
0822nobodyさん2011/01/21(金) 13:54:46ID:???
いやいや生真面目なのはそこじゃなくて。
Zend_Db_Tableを利用してるのにもかかわらず、さらに自前でMapper書いてるというとこでしょ。
0823nobodyさん2011/01/21(金) 14:41:21ID:???
>>822
DB ←Application_Model_Guestbook(Zend_Db_Tableを継承、もしくは内包) ← Controller

くらいが妥当だよな。
0824nobodyさん2011/01/21(金) 15:02:52ID:???
だよねえ
Skinny Controller Fat Model を表現したかったんだろうけどプロジェクトが小さすぎて
かえって違和感がでてしまったんじゃなかろうか。
0825nobodyさん2011/01/21(金) 17:36:26ID:???
そもそもさ、ZFの機能って皆色々と使ってる?
自分はフロントコントローラ、DB、その他って位しか主に使ってないんだけど・・・
例えばValidateなんかも何かめんどくさくて、自分で実装した方がいいような気がしたり
0826nobodyさん2011/01/21(金) 17:53:03ID:???
一人で開発するならそれでいいと思うけど
0827nobodyさん2011/01/22(土) 00:10:22ID:???
Controller、Session、Db、Cache、Http、あたりは重宝してる。
WEBサービス系のクラスもいざって時に役に立つ。

0828nobodyさん2011/01/22(土) 00:32:46ID:???
Zendは、Zend_Http_Clientをライブラリとして使ってるぐらいなんだけど、
アレはほんと便利。

Zend_Db_Tableが複雑なSQLを書くとき〜云々の件は、普通にView書いたりすれば
記述する方もある程度すっきりしたりするのではないの?
0829nobodyさん2011/01/22(土) 18:46:55ID:???
アクションコントローラー以外からPOST値を取得したいのですが、どのようにすればいいでしょうか?


0830nobodyさん2011/01/22(土) 18:48:09ID:???
$_POST
0831nobodyさん2011/01/22(土) 23:11:07ID:???
>>830
返事遅くなってすみません。
スーパーグローバルは使わない方向でいたきたいです。

0832nobodyさん2011/01/22(土) 23:12:35ID:???
アクションコントローラーだってスーパーグローバル変数を参照してると思いますが
0833nobodyさん2011/01/22(土) 23:28:16ID:???
>>832
すみません。
背景を説明します。

Zend_Formの派生クラスを作ってまして、その派生クラスをアクションクラスの中で使っています。
アクションクラス内では$this->getRequest()->getParams()で取得できますが、Zend_Formの派生クラスの内部でgetRequest()する方法はないでしょうか?
0834nobodyさん2011/01/22(土) 23:49:19ID:???
コントローラから渡すのじゃなんでだめなの?
0835nobodyさん2011/01/22(土) 23:53:51ID:???
>>834
$form =new MyZend_Form( $this->getRequest());
として、MyZend_Formのコンストラクタに渡すとエラーがでます。
0836nobodyさん2011/01/23(日) 00:02:50ID:???
エラーの原因つぶせば?
0837nobodyさん2011/01/23(日) 04:08:35ID:???
>>833
Zend_Controller_Front::getInstance()->getRequest()
じゃだめなの?
0838nobodyさん2011/01/23(日) 11:24:33ID:???
この質問者のグダグダした感じ、いつもの奴だろ
あだ名付けようぜ、今日からお前「グダ質」な
0839nobodyさん2011/01/23(日) 13:31:54ID:???
>>837
ありがとうございます。
0840 ◆8DApXCw..I 2011/01/23(日) 13:40:11ID:???
>>838
お前相当仕事でストレスたまってんだろ
はっきり言って見苦しいぞ
スレにケチつける暇あったらコード書け


0841nobodyさん2011/01/23(日) 13:42:14ID:???
Zend_Formの中でリクエスト取得とかありえねぇw
0842nobodyさん2011/01/23(日) 15:24:06ID:???
>>829
$request = Zend_Controller_Front::getInstance()->getRequest(); でもいいし、
$request = new Zend_Controller_Request_Http(); でもいいし、
$request = Zend_Registry::get("REQUEST"); でもいいし、

$request = $_POST; でもよい。


0843nobodyさん2011/01/23(日) 18:41:07ID:???
皆さんデバッグをどうやってますか?
ZFでエラーが起きた行を表示してくれる機能などあるのでしょうか?
0844nobodyさん2011/01/23(日) 18:54:57ID:???
デバッガー使え
08458432011/01/23(日) 18:57:36ID:???
デバッガを使ってはいますが、エラー行(冷害が発生した行など)の特定までは
自動で行ってくれないかなと思って質問しました
0846nobodyさん2011/01/23(日) 18:59:06ID:???
普通してくれるだろw
0847nobodyさん2011/01/24(月) 02:13:32ID:???
ZFというより、PHP側の設定の問題だなw
開発環境にxdebug入れてるが、自動でエラートレースしてくれて便利だよ。

それが無理なら、
エラーと例外のハンドラ作って、var_dump(debug_backtrace()) とでも書いとけ。
08487592011/01/24(月) 19:25:07ID:???
すみません。

その後の報告ですが、
やっと原因がわかりました。

Hogeクラスの親クラスのプロパティの初期値に
nullと設定すべきところを
nulとしていたのが原因でした。

お騒がせいたしました。
0849nobodyさん2011/01/24(月) 21:15:03ID:mS3EM73v
Zend_Applicationを使うとエラーが表示できなくなる。

class IndexController extends Zend_Controller_Action{
public function indexAction(){
a
}
}
ってするとパースエラーが表示されますが、

class IndexController extends Zend_Controller_Action{
public function indexAction(){
$this->hoge();
}
}
ってするとエラーハンドラにキャッチされてerror.phtmlが表示されてしまいます。

エラーハンドラを無効化しようとBootstrap::_initView()に
$front=Zend_Controller_Front::getInstance();
$front->setParam('noErrorHandler', true);
と書くと、

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD><META content="IE=5.0000" http-equiv="X-UA-Compatible">
<META content="text/html; charset=utf-8" http-equiv=Content-Type></HEAD>
<BODY></BODY></HTML>

という書いたことのない謎のソースが表示されてしまいます。

ふつーにUncaught Exceptionって表示させたいだけなんですがどうすればいいのでしょうか。
0850nobodyさん2011/01/25(火) 02:21:16ID:???
>>849
Bootstrap::_initView() に

$front->throwExceptions(true);
または
$front->setResponse(new Zend_Controller_Response_Http())
->getResponse()->renderExceptions(true);


ソースは以下
Zend_Controller_Front::dispatch()
} catch (Exception $e) {
if ($this->throwExceptions()) {
throw $e;
}
$this->_response->setException($e);
}

Zend_Controller_Response_Abstract::sendResponse()
if ($this->isException() && $this->renderExceptions()) {
0851nobodyさん2011/01/25(火) 02:50:09ID:???
Zend_Applicationの存在しないバージョンから使ってる俺に、
Zend_Applicationを導入する優位性を教えてくれないか?

煽りとかでは無く、
アプリケーションの起動処理って、分岐の無いロジックかつ、アプリケーション固有処理が入る事が多いので汎用クラス(Zend_Application)を使うメリットが感じられないんだ。
0852nobodyさん2011/01/25(火) 10:44:20ID:???
まあざっくり言うとコードを書かずに、大方必要なインスタンスを揃えてリクエストをディスパッチ
してくれる。やってることはZend_Applicationを使わない場合でもそう変りないはずだよん。
むしろ一番フレームワークらしい気がする。
0853nobodyさん2011/01/25(火) 11:05:16ID:???
あれ上のちょっと日本語おかしいな。まあいいか
自分でカスタマイズするときは、application.iniでパラメーター変更したり、クラス名変更したり、
Bootstrapで自分でnewするんだす。
0854nobodyさん2011/01/25(火) 12:15:31ID:???
>>852-853
ありがとう!
やっぱ基本的な初期化処理とかを行うクラスみたいだね。

元々BootstrapもApplicationも無いバージョンから使ってて、
独自クラスで実装してたんだけど、乗り換えてもあまり大差なさそうだ・・・
暇を見つけて乗り換え検証してみるよ。
0855nobodyさん2011/01/25(火) 21:14:33ID:Mp2xKR4s
>>850
できた!さんくす

…Zend_Applicationは巨大すぎて把握しきれんわ
あとvar_dumpしたら至る所に*RECURSION*って出てくるんだが大丈夫なんだろうか?
0856nobodyさん2011/01/25(火) 21:22:58ID:???
へ?何が?
0857nobodyさん2011/01/25(火) 23:20:26ID:???
>>855
大丈夫。
リファレンス値が入っていると無限階層になっちゃうから、
そういう変数はRECRUSIONと表示される。
0858nobodyさん2011/01/29(土) 00:59:18ID:gRK6VmbL
BootstrapでZend_View::baseUrlが拾えない。

Zend_Application使ってるとき、
・ビュー内で$this->baseUrl()するとindex.phpまでのパスが取得できる
・コントローラ内で$this->view->baseUrl()するとindex.phpまでのパスが取得できる

でも、

・ブートストラップ内で
$view = new Zend_View();
$view->baseUrl();
ってやってもNULLになります。

アプリ全体で使うものについて
protected function _initView(){
$view = new Zend_View();
$view->headScript()->appendFile($view->baseUrl() . 'js/jquery.js');
}
とかやりたかったんですが普通はどこらへんでやるものなんですかね?
0859nobodyさん2011/01/29(土) 01:12:08ID:???
>>849と同一人物?
0860nobodyさん2011/01/29(土) 01:55:56ID:gRK6VmbL
よくわかったな!なぜバレた!
0861nobodyさん2011/01/29(土) 01:58:15ID:???
偉そうな口調が似てた
0862nobodyさん2011/01/29(土) 03:40:53ID:???
>>858
$request = new Zend_Controller_Request_Http();
$baseUrl = $request->getBaseUrl();

0863nobodyさん2011/01/29(土) 06:44:22ID:???
アンケートフォームみたいな、テキスト入力欄とかチェックボックスとかの数が多くて、
デザインも複雑な場合(チェックボックスの最初の1個だけラベルが二つとか)、
Zend_Form_Elementを使ってフォームの要素を出力しようとすると、フォームの要素の部分がすげーめんどくさいんだが、
なんとか楽にやる方法ないかな?
0864nobodyさん2011/01/29(土) 11:49:18ID:???
コード自体をスクリプトで書く
0865nobodyさん2011/01/29(土) 23:04:56ID:???
Zend_Dateで和暦を扱うことはできませんか?

Locale/Data/ja.xml に和暦のデータ(calendar[@type="japanese"])
が入っていたので扱えるのかと思ったんですが、
Zend_DateのtoString('GGG')などとしたときのコードを追っていくと
使うデータが calendar[@type="gregorian"] 決め打ちみたいで
「紀元前」と「西暦」しか出てきません。

Zend_Dateを継承して自分で日本のものを作らないとだめでしょうか?
0866nobodyさん2011/01/30(日) 03:02:00ID:???
和暦っつても色々あるらなぁ・・・自分で変換するのが手っ取り早いかと。
0867nobodyさん2011/01/30(日) 11:13:05ID:Mz9WohIA
Zend_Controller
Zend_View
これ以外で覚えたらいいの教えてください
0868nobodyさん2011/01/30(日) 13:07:07ID:???
>>867
覚えたらいいのってのも漠然だけど

Zend_Layout
大抵使う

Zend_Date
Zend_Log
Zend_Cache
Zend_Mail
Zend_Session
この辺は手軽に使えるから試すのも楽
腐れ実装もあるけど

Zend_Application
Zend_Config
Zend_Db
Zend_Form
フレームワークとして使い込む度合いで
この辺りも

他は需要と実装に応じて
0869nobodyさん2011/01/30(日) 13:13:17ID:???
Zend_Validateも必須じゃないか?
0870nobodyさん2011/01/30(日) 13:15:42ID:???
Zend_Validateはメッセージがクソだったから
自前のクラス使ったままだったわ
でも、確かにZend_Formやら使う時は必須ね
0871nobodyさん2011/01/30(日) 13:46:43ID:???
WEBサイトをZFで全部作ってきたのですがある社員にそれはやめろと言われました
cakephp|CIと,ZFを使い分けるべきって
どういうケースにcakephp|CIを利用してどういうケースにZFを使うんですか?
0872nobodyさん2011/01/30(日) 14:58:23ID:???
>>871
なんでそれを言った本人に聞かないの?
0873nobodyさん2011/01/30(日) 15:27:59ID:???
2ちゃんで聞いてみ?俺が言いたい事を誰かが書いてくれるからって言われたもので
0874nobodyさん2011/01/30(日) 16:14:36ID:???
>>871
小学生のおまんこなめたい
0875nobodyさん2011/01/30(日) 17:32:26ID:???
>>866
ありがとうございます。自分で変換します。
0876nobodyさん2011/01/30(日) 18:15:38ID:7lsYYH4G
>>873

逆にその先輩だか同僚だかに使い分けの理由を聞いて結果をここに晒してくれ。
0877nobodyさん2011/01/31(月) 03:06:51ID:???
>>873
アホじゃねえのその先輩という名の情弱は
死んどけって言っといて
0878nobodyさん2011/01/31(月) 06:55:28ID:???
>>871
複合主キーをもつDBのシステムを作るときはZF、単一の主キーだけで構成
されるDBを扱う場合はCakePHP、とか言いそうだなそいつ。

どちらかに統一したほうが、スキル習得コストの面でも作成するコードの品質面
でも将来のメンテナンスの面でも、いいよ。
似たようなスキルを分散するのは、良くない。

てか、その先輩はそんな事は承知の上で言っているんだろうから、単に両方使
えますと威張りたいだけ。
そんな人の言葉を真に受ける必要はないと思うよ。
0879nobodyさん2011/01/31(月) 09:15:17ID:???
>>上
上でZend_Formの事書かれてるけど、皆アレ使ってるんだ・・・
俺はマニュアル見て「何だコレ、めんどくせぇ」と、逆にぐちゃぐちゃになりそうだったから止めたんだけど
単純なフォームを作成するだけでもかなり長いコードになりそうな気がしてるんだけど結構使い勝手いいものなの?
もしそうだったら学習しなおそうかな
0880nobodyさん2011/01/31(月) 09:55:25ID:???
上に挙がってるZend_FormとZend_Validateは使ってない。あとZend_Authも使ってない。
0881nobodyさん2011/01/31(月) 12:59:08ID:???
プロジェクトで組む相手によるでしょ。
普段はsymfony使いだけどzendでやるところに呼ばれたらzendもできるし、cakeでやる人に呼ばれたらcakeでやる。
俺俺のところに呼ばれたらその俺俺を学習して使ってみせるよ。
0882nobodyさん2011/01/31(月) 13:19:04ID:???
企業サイト6ページ作る場合は何で作るのが妥当?

トップページ
お問い合わせ
会社紹介
求人
製品紹介
各製品のページ(5ページ程度。デザインは使いまわし)
0883nobodyさん2011/01/31(月) 13:24:47ID:???
既成CMS使えよ
0884nobodyさん2011/01/31(月) 15:27:51ID:???
ほんと
既製のもので適わないなにかあるなともかく
0885nobodyさん2011/01/31(月) 17:04:48ID:???
>>879
俺も使ってないよ。layoutもformもvalidateも使ってない
あまりに使いにくいし見苦しいから
0886nobodyさん2011/01/31(月) 19:09:35ID:???
Zend_FormのMultiCheckboxってチェックのとこクリックしたときの挙動おかしいよね。
Firefoxだと一番下にチェックつけると一番上にもチェックがつく。
IEとChromeだと一番下にチェックつけると一番上が一瞬選択状態になる。
あとチェックを解除するためにチェック済みの項目をクリックするとチェックがはずれないことがある。

フォームはViewに手書きしてValidateを手動で使うのが良さそう。

Zend_Formは概要を理解するまでがはてしなくめんどくさい。
理解しても細かいとこを覚えきれないから結局これどうやんだっけって調べるはめになる。
ちょっと機能詰め込みすぎて逆に使いにくい。
うまいこと分割していけば使いやすい物になると思う。
0887nobodyさん2011/01/31(月) 22:00:47ID:???
そもそもViewに属するであろうFormが複雑なロジックを含みすぎてるんだよな。
所詮HTMLを出力するだけなのに、学習コストが高すぎる。

Validateは基本英語ってのが微妙だし、
自分で一度作ってしまえば延々使い回せるものなので使いやすいクラスを自作している。
(Zend_Validateを扱えるAdaptorも一応用意してある)

逆に一度覚ると楽で手放せないのは、
Zend_Session、Zend_Cache、Zend_Dbくらいかなぁ・・・
Zend_Log、Zend_Mailは俺俺クラスで一枚ラップしてやらないと微妙に使いにくい気がする。
0888nobodyさん2011/01/31(月) 22:10:12ID:???
メッセージくらい自分でカスタマイズしろよ。
自力開発能力ほんとないのな
0889nobodyさん2011/01/31(月) 22:44:21ID:???
Zend_Validate便利だと思うんだがなぁ。
日本語だってBootstrap.phpで対応可能で、
カスタマイズするのも元があるから簡単よ。

public function _initValidate()
{
$lang = 'en';
$locale = new Zend_Locale();
if ($locale->getLanguage() === 'ja')
{
$lang = 'ja';
}

$translater = new Zend_Translate(
array(
'adapter' => 'array',
'content' => APPLICATION_PATH . '/../resource/languages',
'lang' => $lang,
'scan' => Zend_Translate::LOCALE_DIRECTORY
));

Zend_Validate_Abstract::setDefaultTranslater($translater);
}
0890nobodyさん2011/01/31(月) 23:12:25ID:???
>>885
じゃぁ何使ってるの?
後はDBとView位?


まぁ確かにメッセージくらいは楽に変更できるけどね
0891nobodyさん2011/01/31(月) 23:15:07ID:???
>>883
CMSって使ってる?
俺使ったことないんだけど
どんなの使ってるの?
xoopsとか?

というかさ、CMS使ったら別に俺たち要らなくなるような気がするんだよな
0892nobodyさん2011/01/31(月) 23:16:29ID:???
Zend_Validateって単体項目に対するチェックがメインで、
複数項目チェインさせたり、条件分岐させる場合に使いにくいと感じたなぁ。
コードをZFで統一する美しさには惹かれるけど、
いちいち調べてカスタマイズして・・・ってやる程のモノでも無いと感じたから、自分で書いちゃった。

>>888
車輪の再発明したのに、自己開発能力無いと言われるとは思わなかったわw

>>889
ありがとう。試してみるよ!
0893nobodyさん2011/01/31(月) 23:18:49ID:???
車輪の再発明ってだめな例だぞ
0894nobodyさん2011/01/31(月) 23:24:18ID:???
>>893
大抵のプログラムは再発明を得てブラッシュアップされていくものだ。

多分、今君が書いてるプログラムも、世の中探せば既存コードがある。
探す手間をかけるか、自分で書いて理解を深めるか、好きにすればいい。
0895nobodyさん2011/01/31(月) 23:25:19ID:???
Hello worldが書けないプログラマは大規模なサイトなんて作れんのです
0896nobodyさん2011/01/31(月) 23:54:50ID:???
>>862
ありがとう!できた!
一体どうやって調べるんだこういうの!

ただそのままリクエスト引き回そうとしたら
$request->getParams()がNULLだった。
Smartyでいう$smarty.request的なものってViewにありませんか?
Viewでvar_dump($this)ってしたかぎりではそれっぽいものは見あたりませんでした。

とりあえずコントローラのinitで
$this->view->request = $this->getRequest()->getParams()って
やったんだが、もっと汎用的な方法ってあるよね?
0897nobodyさん2011/02/01(火) 01:31:02ID:???
>>896
Zend_View(_Abstract)自体には、Requestを保持する機構は無いみたいなのでそれでOKかと。
もしくはgetRequestを実装した、Zend_View継承クラスを使うとかかね。

__get / __set マジックメソッド使ってるからvar_dumpでは解読出来ないよね・・・
IDEとか使ってソースコード追うのが一番早いよ。
0898nobodyさん2011/02/01(火) 01:34:01ID:???
>>896
$router = new Zend_Controller_Router_Rewrite();
$request = $router->route(new Zend_Controller_Request_Http());
var_dump($request->getParams());

っていう意味?
つーか、ここまでやっちゃうともうZend_Controller_Front::dispatch()丸パクリだから
本当にそこでする必要があるのか悩んでみてもいいかも。

調べるのはZend Frameworkのソースをgrepで検索してる。
0899nobodyさん2011/02/01(火) 10:04:22ID:???
アレを使ってるだの使ってないだのと
色々と議論されていますが、
皆さんどれくらいの規模のシステムを開発されてますか?

フレームワークの選定権とかもたれているのですか?
0900nobodyさん2011/02/01(火) 10:37:13ID:???
Zend_Validateは結構便利だと思ってたけど、少数派なのかな。
Zend_Validateの派生クラスを生成するクラスを作っておけば、使い回しもできて便利だと思うのだけど。
0901nobodyさん2011/02/01(火) 11:22:37ID:???
Zend_Validateだけとかならいいけど、FilterとかFormとかFileなどと連携になると非常に知識を覚えるのがめんどくさい
特にForm
Layout、MVCとかと一緒にすると自分には逆に混乱してしまう
0902nobodyさん2011/02/01(火) 13:13:40ID:???
>>890
dbとviewとaclとconfigとsessionとcacheかなー
0903nobodyさん2011/02/01(火) 14:25:39ID:???
index.phpの雛形で修正したほうがいい、こっちのほうがいいってのありませんか?
<?php

// Define path to application directory
defined('APPLICATION_PATH')
|| define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application'));

// Define application environment
defined('APPLICATION_ENV')
|| define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'production'));

// Ensure library/ is on include_path
set_include_path(implode(PATH_SEPARATOR, array(
realpath(APPLICATION_PATH . '/../library'),
get_include_path(),
)));

/** Zend_Application */
require_once 'Zend/Application.php';

// Create application, bootstrap, and run
$application = new Zend_Application(
APPLICATION_ENV,
APPLICATION_PATH . '/configs/application.ini'
);
$application->bootstrap()
->run();
0904nobodyさん2011/02/01(火) 16:11:09ID:???
Zend_ApplicationとかBootstrapって、
大した事してないのにコード追うのが面倒になるので使ってねーや。
(というかちょっと前のバージョンには存在して無かった)

疎結合で好きな機能だけ使えるのもウリなのに、
最近は兎に角あるものは極力ZFを使うべきって流れになってて嫌だなぁ
0905nobodyさん2011/02/01(火) 16:24:08ID:???
>>903
そこから変えるとしたら自分の場合はZend_Configはiniじゃなくてphpの方使うくらい
0906nobodyさん2011/02/01(火) 16:29:11ID:???
↓でもControllerとViewになっててデザインとロジックが分かれてるのに何でフレームワークなんて使いたがるの?


setting.php
$a="ヘッダ";
$b="メイン文章";
$c="フッタ";

index.php
<?php
include "setting.php";

echo <<<HTML
<div id="header">$a</div>
<div id="main">$b</div>
<div id="footer">$c</div>
0907nobodyさん2011/02/01(火) 17:23:30ID:???
>>906
デザインとロジックを分けるためだけにFWを導入するわけでは無い。

それ以前に君の例だと、
ViewからController(?)であるsetting.phpを呼び出している時点でMVCのなんたるかすら理解していないと思われる。
基礎からお勉強してきなさい。
0908nobodyさん2011/02/01(火) 18:31:42ID:???
じゃあこうすりゃいいんだろ?
setting.php
$a="ヘッダ";
$b="メイン文章";
$c="フッタ";
include "index.php";


index.php
<?php
echo <<<HTML
<div id="header">$a</div>
<div id="main">$b</div>
<div id="footer">$c</div>
0909nobodyさん2011/02/01(火) 18:33:32ID:???
>>908
恥ずかしいから他所行った方がいいとおもうなぁ…
0910nobodyさん2011/02/01(火) 18:56:17ID:???
無知の知って言葉すら知らない餓鬼なんだろうよw
自分がついていけないから、必死でフレームワークの存在を否定したいんだよ。

クラス設計とか全く出来なそうな臭いがするな。
0911nobodyさん2011/02/01(火) 19:01:27ID:???
ヒアドキュメントで変数置換してたら、jQueryとか使う時面倒そうだなw
まぁ、それ以前の問題だけどドヤ顔で>>908を出しちゃうあたり微笑ましい。

専門学校生以下。間違っても職場にいたら足を引っ張るタイプ。
0912nobodyさん2011/02/01(火) 19:09:19ID:???
http://framework.zend.com/manual/ja/project-structure.project.htmlのサイトにあるような構造にする時
jsonファイルやxmlファイルやcsvファイルはどこにドキュメントルートの外に置く場合は置いたらいいですか?
0913nobodyさん2011/02/01(火) 19:23:37ID:???
>>912
データとかなら data/resources とか好きにディレクトリ作ればいいと思うよ。
推奨プロジェクト・ディレクトリは良くも悪くも冗長で、時として管理し辛い。
0914nobodyさん2011/02/01(火) 19:31:34ID:???
ありがとうございます!
0915nobodyさん2011/02/01(火) 20:59:45ID:???
<ul>
<li>メニュー1</li>
<li>メニュー2
<ul>
<li>サブリンク1</li>
<li>サブリンク2</li>
</ul>
</li>
<li>メニュー3</li>
</ul>

これをZend_Navigatorで表示したいのですがどなたか教えてください
0916nobodyさん2011/02/01(火) 22:53:14ID:???
http://framework.zend.com/manual/ja/manual.htmlにZend_Modelsがない・・・
0917nobodyさん2011/02/02(水) 01:22:54ID:???
>>915
http://framework.zend.com/manual/ja/zend.navigation.containers.html これの
「例7 Converting a container to an array」で$container = Zend_Navigationうんちゃらをコピーする。

フロントコントローラを使っているなら、
Bootstrap.phpにpublic function _initNavigation()作ってそこに貼り付けて、
Zend_Registry::set('Zend_Navigation', $container); しておく。
表示は view/scripts/ にあるphtmlのなかで
<?php echo $this->navigation()->menu(); ?> とする。

使ってないなら
$container->toArray()から作るのかなぁ?
0918nobodyさん2011/02/02(水) 03:21:43ID:???
>>915 >>917
素朴な疑問なんだが、なんでHTMLを書こうとせず、壁にぶつかってまで自動生成しようとするの?
後々カスタマイズとか非常に面倒な気がするんだが・・・

慣れると手書きよりカスタマイズ性と運用性が上がるとか?
0919nobodyさん2011/02/02(水) 03:28:13ID:???
えっ
0920nobodyさん2011/02/02(水) 09:31:38ID:???
blogとか、SNSとかその他サンプルとしてでもいいので
Zend_Frameworkde作られたWebサイト、Webアプリなどのソースコードを出しているようなサイトとかCMS等は何かありませんか?
マニュアルとかの断片的なものではなく、実際どのように製品として組み立てているのかとかを学びたいのですが
0921nobodyさん2011/02/02(水) 09:52:56ID:???
>>920
TomatoCMS http://www.tomatocms.com/
SetucoCMS http://sourceforge.jp/projects/setucocms/
Live Commerce ! http://www.live-commerce.com/

有名所だと、こんぐらいかね。
Xoops本家の次期版が採用って聞いた気もする。
0922nobodyさん2011/02/02(水) 11:01:32ID:???
前頁で共通箇所というのを一回で指定する方法ってありませんか?
<link type="text/css" rel="stylesheet"href="http://example.com/style.css">
っていうタグを全ページに入れたいのですが???Cntroller.phpのfunction ???Action(){〜}で一つ一つアサインしてます
これだとstyle.cssを書き換えると手間がかかってしまうのでいい方法ありませんか?
0923nobodyさん2011/02/02(水) 11:02:21ID:???
訂正
×前頁
○全ページ
0924nobodyさん2011/02/02(水) 11:34:25ID:???
>>922
Zend_Layoutは、そういう用途のためのもの。

取り敢えず、全体に1回でいいから目を通したほうがいいよ。
0925nobodyさん2011/02/02(水) 13:50:05ID:???
>>922
俺はZend_Controller_Actionを継承した中間クラスを作って、init()でアサインするという手でやってる。
0926nobodyさん2011/02/02(水) 14:12:57ID:???
>>922
Zend_Layout
Zend_View_Helper
0927nobodyさん2011/02/02(水) 14:53:36ID:???
Zend_Layoutって使いにくくない?
俺はSmartyを連携させて使ってる。俺はこっちの方が楽だ。
0928nobodyさん2011/02/02(水) 16:07:58ID:???



ありがとうございます
0929nobodyさん2011/02/02(水) 16:34:06ID:???
>>927
俺もそうしてる
09309172011/02/02(水) 19:53:18ID:???
>>918
正直、手書きも含めて自作しちゃうのが簡単だとは思うw

あえて利点を挙げるなら、パンくずリストとサイトマップにも
変換可能ってところかな。
0931nobodyさん2011/02/03(木) 05:28:20ID:???
Zend Frameworkに見習って細やかなクラス設計してたんだけど、
なじみの無い人には

「パッと見のコードは綺麗だし、IDEとの親和性も良いが、実際使うには冗長な気がする。
疎結合なのは良いが、ドキュメントやサンプルが無いとその関連性が理解出来ず苦労する。」

と、あまり評価がよろしくないw
結局自作クラス群を更にラップするクラス群を作る事になっている件・・・orz


極例だけどStringクラスがあったとして

A) $str = String::create("xxx")->convertEncoding("utf-8")->convertKana("KV")->toUpper()->toString();
B) $str = String::convert(array(options));
C) $str = String::convert($str, "utf-8", "KV", "UP");

AとBは面倒らしい。
パラメータや処理が増えた時はC)の引数を増やせば良い、と・・・。
0932nobodyさん2011/02/03(木) 07:28:11ID:???
>>931
普段はCakeを使うことが多いが、個人的には引数増えるよりBの方法が楽だと思う。
というか引数の順番をいちいち記憶するのが面倒。
array(
 'val' => $str,
 'encoding' => 'utf-8',
 'convert' => array('KV', 'upper')
)
とかすれば引数の順番覚えなくてすむし。
Cakeを触りすぎたせいかもしれないが

Aのようなメソッドチェーンの引き回しはPHPの文法に向いてないと思う。
("->"と"."の違いは心理的に大きい)
0933nobodyさん2011/02/03(木) 09:39:49ID:???
>>932
意見ありがとう!

A)は冗長だけど、エラーハンドリングのしやすさとか、処理の順番とかキッチリしていて扱いやすいとは思う。
コードは冗長だけど、補完の優秀なIDE使えばタイプ数は、Bよりタイプ数が少なくてすむよ。

B)案だと、配列のキー名のタイポが発生したり、IDEのコード補完が使えないのが辛いよねぇ・・・
かといって引数をクラス化すと途端に冗長と言われるし。


適材適所なんだろうけど、皆の意見をもっと聞きたいっす。
0934nobodyさん2011/02/03(木) 10:46:00ID:???
俺も自前でC型のクラス(や関数)を作って、そのうち変数の意味や順序を忘れて面倒になって
B型にしとけば良かったよと後悔するタイプだな
0935nobodyさん2011/02/03(木) 21:13:17ID:???
>>934

Cはなんとなく気持ち悪いかなぁ。。

その例でいうなら
Number::convert()作ったときに引数が違ってくるよね?
0936nobodyさん2011/02/03(木) 21:30:04ID:???
megentoっていうEC-CUBEよりもすごいショッピングカートがあるんだけど
日本では流行ってないけど時間が立てば流行るよぐらいすごいんだけど
それにZFが使われてた
んで、megentoをダウンロードするとZFが含まれているんだけど、最新のZFにアップグレードするのはファイルの上書きだけで大丈夫か教えて欲しいのです
0937nobodyさん2011/02/04(金) 04:48:18ID:???
>>936
知らんけど、やるなら上書きじゃなくてフォルダごと差し替えじゃね
0938nobodyさん2011/02/04(金) 10:27:21ID:???
調べてくれと言っておるのだ
ttp://www.magentocommerce.com/
0939nobodyさん2011/02/04(金) 11:40:19ID:???
誰かやってやれ。俺は面倒臭い。
0940nobodyさん2011/02/04(金) 13:57:58ID:???
商用サポートもあるみたいだしコミュニティもあるんだからフォーラムで英語で聞いてみろよ。
ここはそのmagentocommertceのスレじゃないぞ
0941nobodyさん2011/02/04(金) 14:07:29ID:???
>>938
ZendFWはディレクトリ丸ごと差替えるだけでバージョンアップ出来る。
magentocommertce自体が別のZendFWバージョンに対応しているかは別の話。
0942nobodyさん2011/02/04(金) 22:57:24ID:???
>>941
わかりました
0943nobodyさん2011/02/05(土) 03:35:47ID:???
ルーティングに関して質問です。

以下のURLで'.html'を取り除いて、アクション名を受け取りたいのですが、
ルーティングではどのように設定すれば良いでしょうか?
http://domein.com/controller/action.html

以下のようにすると、’action’には'action.html'が格納されます。
----
$route = new Zend_Controller_Router_Route_Regex(
':controller/:action\.html'
);
$router->addRoute('route', $route);
----

どなたかご教示頂ければ幸いですmm
0944nobodyさん2011/02/05(土) 10:08:36ID:???
>>926
Zend_Layout は、 有名な「ツーステップビューパターン」を実装したものです。 開発者は、アプリケーションのコンテンツを別のビューの中に埋め込むことができます。 この「別のビュー」は、通常はサイトのテンプレートとなります。
0945nobodyさん2011/02/05(土) 10:31:07ID:???
ああもう!!!!Zend_Layout難しいすぎるのだ!!!!!!!!!!
0946nobodyさん2011/02/05(土) 11:08:20ID:S6HoVMWF
こう書いたら画面にフッターしか出てきません
どう書き直したらいいですか?
■application/controllers/IndexController.php
<?php
class IndexController extends Zend_Controller_Action
{
public function indexAction()
{
$this->_helper->layout->setLayout('footer');
}
}
■application/views/index/index.phtml
<html>
<head>
<title>タイトル</title>
</head>
<body>
<h1>トップページ</h1>
</body>
</html>
■application/layout/footer.phtml
<div id="footer">フッター</div>
■起動スクリプト
<?php
include "Zend/Controller/Front.php";
include "Zend/Layout.php";
Zend_Layout::startMvc('../application/layouts/');
Zend_Controller_Front::run('../application/controllers');
0947nobodyさん2011/02/05(土) 13:22:33ID:???
それぞれのページごとにキーワードを設定したいのでコントローラのアクションに$this->view->headMeta()->appendName('keywords', 'キーワード');を書きました。
レイアウトは共通するのでlayout.phtmlを作成しそこで$this->headMeta()->setCharset('UTF-8');を書きました。
ブラウザでみると<meta name="keywords" content="キーワード" >が最初に来て<meta charset="UTF-8"> が後に来ます。
文字化けの原因にもなるので<meta charset="UTF-8">を<meta name="keywords" content="キーワード" >の前に持って生きたいのですが良い方法ございますでしょうか?



layout.phtmlに
0948nobodyさん2011/02/05(土) 14:24:02ID:???
>>947
$item = new stdClass;
$item->type = 'charset';
$item->charset = 'UTF-8';
$item->content = null;
$item->modifiers = array();

$this->headMeta()->prepend($item);

無駄に長くなるね。
0949nobodyさん2011/02/05(土) 14:25:31ID:???
試してないけどheadScriptのoffsetSetNameみたいな感じでmetaも指定できたような
0950nobodyさん2011/02/05(土) 17:55:32ID:???
chrsetなんて共通だろうし直接書いちゃえ
0951nobodyさん2011/02/06(日) 03:42:21ID:???
Zend_ViewもZend_Layoutも敷居が高いだけで、あまり良い事ないな・・・
Smartyとかと連携した方がいいと思うよ。
0952nobodyさん2011/02/06(日) 15:15:47ID:???
>>951
Zend_ViewもZend_Layoutも使わないならそもそもZF使わないほうがいいような・・・
0953nobodyさん2011/02/06(日) 15:19:01ID:???
ZendFrameworkのフォーラムってありませんか?
0954nobodyさん2011/02/06(日) 16:25:28ID:???
>>951
上にあるようなheadMetaとかheadSctipt(だっけ?)とか無駄に色々あるのを
使わなければ単に変数assignするだけだし敷居も低くない?
viewでPHP関数をそのまま利用できるのは有りだと思うよ。

Smartyの知識+独自のライブラリとかがすでにあるならSmartyでもいいかもしれないけど。
むしろSmartyと連携するメリットがまるでわからない。
0955nobodyさん2011/02/06(日) 16:35:18ID:???
>>954
テンプレートエンジンにフィルターとかキャッシュは必須だと思っている。
ZF導入にあたってViewの乗り換えを検討し、同様の事をZend_Viewで行おうとしたけど、
Smartyより難しい印象だったなぁ・・・

PHP構文使えるのはメリットにもデメリットにもなるので、なんとも。
0956nobodyさん2011/02/06(日) 16:37:32ID:???
ZF+SMARTY導入でページを表示するたびにZFとSMARTYを起動しちゃうじゃん
重いじゃん
0957nobodyさん2011/02/06(日) 16:42:56ID:???
headに
<script type="text/javascript">
alert(1);
</script>
をコントローラから追加したいのですが下記のようにアクションに書いてもエラーページに繋がってしまいます
ページ毎に異なるjavascriptを埋め込みたいので直接VIEWスクリプトには書かないでコントローラから操作できるようにしたいのですがお知恵を拝借させてください


public function indexAction()
{
$this->headScript()->captureStart(); ?>
alert(1);
<?php $this->headScript()->captureEnd();
}
0958nobodyさん2011/02/06(日) 16:43:36ID:???
>>955
Smartyよく知らないんだけど、Zend_View_FilterとZend_Cacheと違うの?
0959nobodyさん2011/02/06(日) 16:57:57ID:zdEuJ7Gl
function init(){
$this->view->headScript()->offsetSetFile(100, 'test.js');
}
で読み込ませているのですが特定のアクションだけ読み込ませない方法ってありませんか?
0960nobodyさん2011/02/06(日) 17:52:22ID:???
>>958
いや、同じ事は出来ると思う。
性能の優劣とでは無くて、ゼロから学ぶならSmartyの方が楽な印象がしたのさ。

ZendFW自体、疎結合で好きな部分だけ使えるようになってるんだから、
Viewには慣れ親しんだSmartyとかでもいいのかな、と。
0961nobodyさん2011/02/06(日) 20:51:49ID:???
ZFとWPって連携して使うもの?
WP使えるのにZFまぜる必要ってある?
0962nobodyさん2011/02/07(月) 01:58:53ID:???
WPって何?WordPress?
0963nobodyさん2011/02/07(月) 04:15:06ID:X/yGRmJE
新しいコンポーネントがリリースされた時に、そのコンポーネントだけ追加することって出来る?
ターミナルでのコマンド入力で一気にコンポーネントの追加したりって可能かな?

それと、リモートのサーバで動いてるzendFWのバージョンアップさせようと思ったら
1)新バージョンのFWをブラウザでローカルにダウンロード
2)リモートのサーバにアップロード
3)sshで既存のFWに上書き
って流れでやるしかないの?
一発で実現できるコマンドってないのかな
0964nobodyさん2011/02/07(月) 10:29:45ID:???
Zend_Formってどのような場面で使うものですか?
0965nobodyさん2011/02/07(月) 11:46:17ID:???
>>964
フォーム作るときだけど…
0966nobodyさん2011/02/07(月) 11:51:29ID:???
それはわかりますよw
HTML直書きと比べての話です
0967nobodyさん2011/02/07(月) 12:32:05ID:???
「varidatorと組み合わせて簡単に入力値検証できるとかがメリット」のはずだけど実際には
「zend_formもjsとの組み合わせとかやりづらいし、zend_varidatorも
自前の検証クラスに比べて冗長でややこしい一方だしろくなことねーぞ!」って感じ

まあ使ってみなよ
結局使う人の感性次第だ、俺はあわなかったな
0968nobodyさん2011/02/07(月) 18:44:44ID:???
Zend_Pdfってフォントの拡張子がttfのものじゃないとダメなんですか?
日本語使いたいんですけどttcって使えないですか?
0969nobodyさん2011/02/07(月) 19:35:31ID:???
Zend_Tagって何ですか?
ttp://yuubiseiharukana.blog.shinobi.jp/Entry/455/見てもよくわかんない
09709692011/02/07(月) 19:45:19ID:???
ごめん自己解決した
0971nobodyさん2011/02/07(月) 20:01:54ID:???
>>963
>新しいコンポーネントがリリースされた時に、そのコンポーネントだけ追加することって出来る?
何らかの方法で差分を取得すればいい。(SVNリポジトリ見ればいいと思う)

>ターミナルでのコマンド入力で一気にコンポーネントの追加したりって可能かな?
バッチ組めばOK。俺はSVN UPで済ましちゃってるけど。

>一発で実現できるコマンドってないのかな
リモートサーバが外部にアクセス出来るなら、バッチ処理書けばいい。
0972nobodyさん2011/02/07(月) 21:17:48ID:???
>>971さん>>968をお願いします
0973nobodyさん2011/02/07(月) 21:21:10ID:???
971じゃないけど
TTCなんてきもい実装への対応をOSSに求めんなよ
自分で調べて分割しろ
あとライセンスは気をつけろ
0974nobodyさん2011/02/07(月) 21:22:57ID:???
>>973さん
ええええMSゴシックがttcだからもうオワタか
0975nobodyさん2011/02/08(火) 00:03:35ID:???
>>974
BREAKTTC
0976nobodyさん2011/02/08(火) 09:21:06ID:???
>>980
次スレ御願いね
0977nobodyさん2011/02/08(火) 10:59:38ID:???
>>975さん
うはwそれいいですねwダウンロードして試してみますw

0978nobodyさん2011/02/09(水) 11:48:44ID:???
layoutって結構使うもの?
0979nobodyさん2011/02/09(水) 13:10:38ID:???
使わない。使いにくい。
0980nobodyさん2011/02/09(水) 13:29:55ID:aJnPZ9zM
http://www.example.com/
http://www.example.com/sample
という風にモジュールで分けたいので以下のようにディレクトリを作成しました
/application/default/
/application/sample/
(各モジュール内にcontrollers,models,viewsディレクトリも入ってます)
(各モジュール内にcontrollersにはIndexController.php、viewsにはindex/index.phtmlとerror/error.phtmlが入ってます)

public_html/index.phpには以下のように書きました
<?php
include 'Zend/Controller/Front.php';
$front = Zend_Controller_Front::getInstance();
$front->addModuleDirectory('../application');
$front->dispatch();

これで
http://www.example.com/http://www.example.com/defaultで/application/default/の内容が表示
http://www.example.com/sampleだとエラーページが表示されます。(エラーページは/application/default/views/error/error.phtmlのものです)

モジュール別に分けて制作したいのですがどこを修正したらよろしいでしょうか?
0981nobodyさん2011/02/09(水) 14:09:32ID:???
レベルが足りなくてスレッド建てられませんでした
修正したテンプレだけ張っておきます

公式
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/
0982nobodyさん2011/02/09(水) 15:17:33ID:???
すいません自己解決できました
なんかコントローラのクラス名の命名規則があってモジュール名_IndexControllerって書かないといけなかったようでした
ggって見つけたものなのでマニュアルのどこに書いてあるのかよくわからないのでこれで良いのか分かりませんが・・・
0983nobodyさん2011/02/09(水) 16:02:02ID:S6y2j2QG
Zend_Service_Twitter使って、以下のような処理を作ってます

アプリケーションのURLを踏む(http://hoge.com/twitter_app/
 ↓
「あなたのTwitterアカウントへログイン」(http://twitter.com/oauth/authenticate?oauth_token=***
 ↓
認証&callback
 ↓
callback先のページ(http://hoge.com/twitter_app/callback/
 ↓
Service_Twitterの各メソッドで何か処理。

が、どうにも一番下のメソッドの実行部分で失敗します
例:
$response = $twitter->status->update("APIから日本語で投稿");
$response = $twitter->status->update("post with API by testuser");
var_dump($response);//両方ともエラーメッセージ「Could not authenticate you.」になる。PHPエラーはなし

$response = $twitter->status->userTimeline();
var_dump($response);//エラーメッセージ「This method requires authentication.」。PHPエラーはなし

何が原因で認証失敗のエラーが出てるんでしょうか?
callback後、あらかじめ別ウインドウで開いてたtwitterのトップページを更新すると、
ユーザー(testuser)のトップに移動するので認証は成功してるはずなんですが…

zendFWのバージョンは1.10.3です。よろしくお願いします
0984nobodyさん2011/02/09(水) 17:45:22ID:???
>>983
Zend_Service_Twitterは使った事ないけど、
OAuthで受け取ったアクセストークンの設定とかはしてる?
0985nobodyさん2011/02/10(木) 12:44:36ID:B6xb9mKa
>>984
レスどうもです。
原因わかりました
ZendFWのバージョンがOauth認証に対応してませんでした
1.10のマニュアルを見ると対応してるように書いてるのに、
実際には(自分のは?)対応してなかったという…
意味わからないですが、ありがとうございました
0986nobodyさん2011/02/10(木) 16:41:11ID:???
レイアウト使うとページ読み込むの遅いんだけどこういうものなの?
レイアウトからheaderとcontentsとfooterを呼び出している
0987nobodyさん2011/02/10(木) 16:43:10ID:???
Zend_Layoutが原因で、そんなに重たいと感じたことはないなあ
いや、よく考えたらキャッシュ使いまくりだから、あんまり感じないだけなのかも
何にせよキャッシュは大事だよ
0988nobodyさん2011/02/10(木) 16:45:33ID:???
なんだこれsmartyみたいにキャッシュて勝手に聞いてくれるものじゃないのか
0989nobodyさん2011/02/10(木) 18:31:27ID:???
>>988
好きにZend_Cache使いなさい、
ってのがこのフレームワークのスタンスなのよ

Zend_Cacheは簡単だし、粒度もそれなりに設計できる
0990nobodyさん2011/02/10(木) 23:30:56ID:2I2O4kI9
ドキュメントルートにZFをインストールする場合って特別にパーミッションやhtaccess設定することってありますか?
いつもincludeパスが通った所に置いた利用しかしてなかったので分かりません
0991nobodyさん2011/02/11(金) 04:01:23ID:???
>>990
どこに置こうがZFを呼び出せるということは、
include_pathの通った場所(例えば".")に置いてるということなので
PHP視点でZFを使うための追加の設定は不要
ただ、ZFに限らずライブラリ系置くなら外部からHTTPアクセスはできないようにしておく方が無難
0992nobodyさん2011/02/11(金) 04:05:19ID:???
次スレ

Zend Framework Part5
http://hibari.2ch.net/test/read.cgi/php/1297364669/
0993nobodyさん2011/02/11(金) 12:42:29ID:???
ドキュメントルートに送って事はapplicationの中見られるって事ですよね
htaccessの修正なくてもOK?
0994nobodyさん2011/02/11(金) 12:44:32ID:???
はい・・・?
0995nobodyさん2011/02/11(金) 12:46:04ID:???
えっと
http://framework.zend.com/manual/ja/zend.controller.quickstart.htmlのこと
0996nobodyさん2011/02/11(金) 12:50:32ID:???
>>995
うん、それで?
0997nobodyさん2011/02/11(金) 12:52:49ID:???
>>996
それで>>993聞いてます
0998nobodyさん2011/02/11(金) 12:53:45ID:???
>>997
そこのページどの記述からapplicationドキュメントルートに置くって読み取ったの?
0999nobodyさん2011/02/11(金) 12:54:09ID:???
へんなバカに粘着されてレス伸びてるから次スレで聞いたらいいよ
1000nobodyさん2011/02/11(金) 16:51:20ID:g4d041We
超高速で俺が1000ゲット!
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。