Zend Framework Part4

このエントリーをはてなブックマークに追加
1nobodyさん
2nobodyさん:2010/02/10(水) 01:40:17 ID:???
専門的な記述のめちゃくちゃ和訳wktk
容赦なく突っ込んでやるからケツ貸せよ。
3nobodyさん:2010/02/10(水) 09:21:33 ID:???
質問させて下さい
<?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」、としかブラウザに表示されないものですから
4nobodyさん:2010/02/10(水) 09:35:15 ID:???
>>3
ネタ乙
5nobodyさん:2010/02/10(水) 09:37:20 ID:???
>>4
ごめんなさい、ネタじゃなくてマジで聞いています・・・すみません
6nobodyさん:2010/02/10(水) 09:51:06 ID:???
foreach($in->getInvalid() as $invalid) foreach($invalid as $message) echo $message . "<br />\n";
7nobodyさん:2010/02/10(水) 10:35:10 ID:???
>>6
ありがとうございました
8nobodyさん:2010/02/12(金) 22:56:41 ID:Rluma8O9
Zend_Db_Table::fetchAll()はありますが、
Zend_Db_Table::fetchOne()はなぜないのでしょうか?
9nobodyさん:2010/02/12(金) 23:14:04 ID:???
一人はみんなのために
みんなは一人のために
10nobodyさん:2010/02/12(金) 23:39:35 ID:???
fetchAll()に対するのはfetchRow()じゃないのか
11nobodyさん:2010/02/12(金) 23:42:53 ID:Rluma8O9
>>10
対の話ではないです。

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

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

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

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

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

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

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

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

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


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

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

php インスタンス管理/php インスタンス共有/オブジェクト指向 インスタンス管理
などでググって調べたんですがはっきりわかるものが出てきませんでした。
zend以前の質問かもですね…
うーん、、
37nobodyさん:2010/02/13(土) 23:56:21 ID:???
インスタンス管理って、別にたいしたことじゃない。
変数に保存しておいて、setValidaterするだけ
38nobodyさん:2010/02/14(日) 00:24:20 ID:???
>>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);
39nobodyさん:2010/02/14(日) 01:09:08 ID:???
>>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のクラスを適用するような処理には向いてなさそうですね。。
テーブルに組み込んだりのレイアウトも癖がありそうだし…
上手に使い分けできるようにならなきゃだめですね〜
難しいけどできるようになりたいな。。


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

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

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

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

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

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

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

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

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



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

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

Zend_Controllerをいじっててトイレに行きたくなったんだけどトイレはどこ?
そのレベル
58nobodyさん:2010/02/16(火) 19:08:26 ID:???
メール出来る様に設定すればいいだけだしな。
メール出来るならZFでも問題なく使える。
ZFからスパムメール送るなら規制されて当然w
59nobodyさん:2010/02/17(水) 02:08:15 ID: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の結果が出力されるのです。
どんな原因が考えられるでしょうか?
60sage:2010/02/17(水) 02:31:41 ID:???
>208
returnを使ってください。
redirectだけではなくforwardも同様ですよ。

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

ちょうど素通りしましたのでご参考になれば。
61nobodyさん:2010/02/17(水) 03:38:19 ID:???
>>60
こんな時間にありがとうございます
でも、そのreturnを冒頭に加える処理をしても結果は同じでした
そもそもなんでindexActionに転送するのか、
bbbActionの中に限らずredirect処理を実行してる場所なんて
どこにもないので困っています。
どんな原因が考えられるでしょうか?
6261:2010/02/17(水) 10:06:25 ID:???
自己解決しました
原因はredirectの動作には関係ありませんでした
routingでbbbアクション用のルート設定をしてなかったのが原因でした
indexが出力されるのは/hoge/bbbのbbbをパラメータと判定されてたからでした
お騒がせしてすみません、ありがとうございました
63nobodyさん:2010/02/18(木) 15:20:23 ID:???
Manual英語の部分まだまだ沢山あるね
64nobodyさん:2010/02/18(木) 15:46:08 ID:???
個人的にはPEARのマニュアルのいい所をZFには導入して欲しいと思う
65nobodyさん:2010/02/18(木) 16:34:46 ID:???
66nobodyさん:2010/02/19(金) 10:25:20 ID:???
Zend_Cacheにgetってメソッドがあったようですが、コレはどうなったのでしょうか?
ZF徹底入門(バージョンは1.5のようです)のP455の一番下に書かれていたのですが、後ろのリファレンス集には書かれていません・・・
昔のマニュアルなどには$cache->get()みたいに書かれて使われていたみたいなのですが、最近のマニュアルには書かれていませんし、APIにも出てきません
67nobodyさん:2010/02/19(金) 12:35:08 ID:???
その本のことは知らんけど、昔から test load save だったと思うよ。
なんかの間違いでは
68nobodyさん:2010/02/19(金) 14:06:08 ID:???
過去のソース見ればええねん
69nobodyさん:2010/02/19(金) 14:28:05 ID:vk4cE2Qg
>>66
Zenf_Registryと勘違いしてないか?
70nobodyさん:2010/02/19(金) 14:31:26 ID:???
>>67
自分も急にgetメソッドとか書かれて「?」って感じでその本をくまなく見てみましたがZend_Cache内では見当たらず、マニュアル、APIと探しましたがありませんでした
Web上では少なかったですが見つけましたが、推奨メソッドなのか良く分からなくて
もしかしたらどっかのバージョンで廃止になったかな、とも思いましたがバージョンアップ情報には書かれていませんでした
このサイト(http://itpro.nikkeibp.co.jp/article/COLUMN/20060810/245681/?ST=lin-server&P=3)にはgetが書かれていましたが、0.1.5という化石のようなバージョンで参考になりませんでした
71nobodyさん:2010/02/19(金) 14:34:05 ID:???
>>69
えっ?
Zend_Cacheのページですし、Outputフロントエンドの項目の説明文中に書かれています
Zenf_Registryはこのコード、MVC内では使用されていないようです
getメソッドと書かれているくせに、サンプルコードにはいっさいgetは入っておりません
7271:2010/02/19(金) 14:36:38 ID:???
Zenfではなく、Zend_Registryです
73nobodyさん:2010/02/19(金) 16:12:47 ID:g43faW/Y
ZF徹底入門のTypoってことで
次の方どうぞ
74nobodyさん:2010/02/20(土) 00:54:29 ID:???
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じゃないの。。
75nobodyさん:2010/02/20(土) 10:04:46 ID:???
>>74
他のことが忙しくて、 1.0 には間に合わないと contributor が思ったからじゃないの?
76nobodyさん:2010/02/21(日) 18:19:24 ID: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では設定した警告文以外でません。。
どなたかご意見よろしくお願いします。
77nobodyさん:2010/02/21(日) 19:14:38 ID:???
>>76
インスタンスに関係性がない
78nobodyさん:2010/02/21(日) 20:42:22 ID:???
>>76
コテハン付けてくれ
79nobodyさん:2010/02/21(日) 21:15:35 ID:???
>>76
コテハンにすると質問に答えてもらいやすくなるよ。
80nobodyさん:2010/02/22(月) 11:06:23 ID:???
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

自分には良く分かりませんでした
8180:2010/02/22(月) 11:08:15 ID:???
すみません、ZFのバージョンは1.9.6だったと思います
PHPは5.2.12です
8280:2010/02/22(月) 11:25:50 ID:???
連投すみません
今、バージョンによって駄目なのかと思い、最新版の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などは普通に動作しておりました
83nobodyさん:2010/02/22(月) 12:20:57 ID:???
今はjaにしてる?言語ならjaでいいけど、地域がわからないと通貨がわからないからね
ja_JPにしてみたらどう?
8480:2010/02/22(月) 14:39:46 ID:???
>>83
ありがとうございました
ja_JPにしたら出来ました
ご迷惑おかけしました
85nobodyさん:2010/02/22(月) 19:06:49 ID:???
覚えることいっぱいあるなぁ
もう疲れたよ
86nobodyさん:2010/02/22(月) 20:11:47 ID:???
いちいち覚えてないよ
必要になったら調べるだけ
87nobodyさん:2010/02/22(月) 20:29:21 ID:???
確かに、ZFは他のFWと比べても色々と大変だよな
今コンポーネントっていくつあるんだっけ?
70あるかないかってとこかな?
88haruna:2010/02/23(火) 14:59:27 ID: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
89nobodyさん:2010/02/23(火) 15:14:19 ID:???
おれも初心者で詳しくないが、ZFダウンロードしてきて展開してinclude_path通してrewrite設定してる?
90nobodyさん:2010/02/23(火) 15:36:27 ID:???
> サーバが見つかりません

URIの前にlocalhostにアクセスできてないでしょ
9188:2010/02/24(水) 09:18:28 ID:???
まさかの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()
{ }
}
9289:2010/02/24(水) 09:51:56 ID:???
つまりhtdocs直下にChapter02-02を入れたわけね
htdocsがDocumentRootなわけね
で、RewriteBase設定は /Chapter02-02/html/ になってると

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

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

>>皆さん
ありがとうございました
解決いたしました
確かに、RewriteBaseのパスを間違えていたようでした
ほんとごめんなさい
99nobodyさん:2010/02/24(水) 23:57:57 ID: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

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

正しく動いてないなら、なんか間違ってる。
設定とかファイル名なんて、全部見ないとわからないよね。
10399:2010/02/25(木) 01:08:47 ID:???
>>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);を入れ替えても同じエラーが出ています
104nobodyさん:2010/02/25(木) 01:22:05 ID:???
$front->setParam('noErrorHandler');
をdispatchより上に

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

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作成代行してくれるところ
106nobodyさん:2010/02/25(木) 14:55:31 ID:???
ZendFrameworkwo使ってきて、基本的な事はおさえました
しかし、気がついたのですが、コントローラーとヴューは使用しているけれど、モデルってのを一度も使ってきませんでした
色んなサンプルでも上記の2つだけ利用して、モデルは空っぽでした
このmodelという機能は何に使うのでしょうか?
107nobodyさん:2010/02/25(木) 14:56:47 ID:???
基本的なこと抑えられてないじゃねぇかw
108nobodyさん:2010/02/25(木) 15:02:04 ID:???
なんか、うまいこと言えっていうネタだろ?
109nobodyさん:2010/02/25(木) 16:29:58 ID:???
>>107-108
確かに(苦笑
表現が悪かったです
コンポーネントなどは理解したのですが、基本的な事をおさえたつもりでした・・・


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

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

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

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

Why Checkbox is upper?
I should lower it because its not beautiful.
117nobodyさん:2010/02/26(金) 01:48:46 ID:???
>php自体、mvcをきっちり分離出来ないからねえ。
え?
118nobodyさん:2010/02/26(金) 08:27:54 ID: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)からだけ実行できないのが理解できません。何が原因なんでしょうか?

つづく
119118:2010/02/26(金) 08:29:04 ID: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());
}

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

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

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

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

132nobodyさん:2010/02/26(金) 19:25:12 ID:???
教えてください。以下のように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>
133nobodyさん:2010/02/26(金) 19:53:53 ID:???
なんか恨みでもあるのか
134132:2010/02/26(金) 21:41:26 ID:???
自己解決しました。
135nobodyさん:2010/02/26(金) 21:52:25 ID:???
どうやって?
136nobodyさん:2010/02/27(土) 15:37:06 ID:???
この流れにワラタw
137nobodyさん:2010/02/27(土) 16:57:04 ID:???
がんばって。
138nobodyさん:2010/03/04(木) 20:52:09 ID:iGtVy898
Zend_DBで、insertメソッドでもupdateメソッドでもqueryメソッドでも良いんですが、
値が入っていないパラメータを送るとき、自動的にカラであることをチェックして
自動的にNULLを入れて送信することって無理なの?

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

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

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


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

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

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

日常的なinsertやselect、updateの成功・失敗はどうしたら確認できるのかな
誰か良かったら教えてください
154nobodyさん:2010/03/13(土) 17:02:24 ID:???
有名なサイトってどのフレームワーク使ってるか公開してる方が少ないと思うが
なんで有名なサイトで使われてないと思ったんだ?
155nobodyさん:2010/03/13(土) 17:06:06 ID:???
156nobodyさん:2010/03/13(土) 18:11:31 ID:???
>>155

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

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

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

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

メール配信が金になるってのは、それだけ大量配信に無理があるからだぜ
それでいて、メルアド間違ったり、メルアド変わったり、盗聴されたり
途中で消えたり、ろくなことないからなメールは。
173nobodyさん:2010/03/15(月) 14:04:54 ID:???
やっぱ何にも解ってないんだなお前は
174nobodyさん:2010/03/15(月) 14:08:25 ID:???
お前さんは何をわかってるんだい?
で、実績は?
175nobodyさん:2010/03/15(月) 14:16:40 ID:???
zendを取り入れた?らしいsymfony2.x系に期待
今はCodeIgniterを改造して使ってごまかしてる
176nobodyさん:2010/03/15(月) 14:34:17 ID: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/');


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

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

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

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

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

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

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

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

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

ご教授願います。

application.iniで
resources.modules[] =
設定し、モジュール別にルーティングされている事も確認できてます。
207nobodyさん:2010/03/19(金) 12:33:49 ID:???
208nobodyさん:2010/03/19(金) 14:10:39 ID:2j6+t1LQ
>>207
ありがとうございます。
翻訳して読みましたが、よく分かりません…
プラグインでモジュール確認するとか。

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

何か良い方法あるのでしょうか?
209nobodyさん:2010/03/19(金) 15:04:30 ID:???
馬鹿には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フレームワークを作るスレ
210nobodyさん:2010/03/19(金) 15:07:32 ID:iYK3Oj1q
>>208
そのブログで書いてあるのは、モジュールを検知して動作するプラグインを書けば?という話

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

モジュール別bootstrapでそのプラグインをフロントコントローラーに登録。
そんな感じ。
211nobodyさん:2010/03/19(金) 15:47:42 ID: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/


212nobodyさん:2010/03/19(金) 16:02:16 ID: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
213nobodyさん:2010/03/19(金) 17:30:31 ID:2j6+t1LQ
>>212
下のリソースのロード制限は解りやすいですね。
ありがとうございます。
これは、各モジュールのブートストラップでinit〜作って
呼べばよいですよね?
214nobodyさん:2010/03/19(金) 18:00:26 ID:???
>>213
えっと、すんません。解説がないんでアレですけど。。
わかりにくいようだったら、スルーしてもらっていいっす。恥ずかしいのでw

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

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

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

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

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

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

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

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

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

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

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

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

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

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

対策法はありませんか?
238nobodyさん:2010/03/31(水) 06:55:05 ID:???
文字列で統一の方がよくね?
239nobodyさん:2010/04/01(木) 08:41:41 ID:???
馬鹿には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
240nobodyさん:2010/04/01(木) 23:02:16 ID:???
zendを使って作成されたそれなりの規模のソースを配布しているところってありますでしょうか?
zendについているソースはすべて見ました。
daoやキャッシュなどをフルに利用した参考になるソースありましたら教えて欲しいです。
ディレクトリの構成やDBコネクション、エラー定義などを参考にしたいです。
241nobodyさん:2010/04/01(木) 23:35:40 ID:???
242nobodyさん:2010/04/02(金) 00:37:50 ID:???
>>240
お勧めは
storefront
http://www.ohloh.net/p/zfstorefront

TomatoCMS Omekaもなかなかよいよ。

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

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

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

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

そこをもう少し詳しく・・・
それだけじゃ何がしたいのかわからない。
257nobodyさん:2010/04/12(月) 13:30:57 ID: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(現在はカラ)


続きます
258257:2010/04/12(月) 13:36:32 ID: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
という形で良いんでしょうか?
よろしくお願いします。
259257:2010/04/12(月) 21:26:30 ID:???
どうにか自己解決できました
スレ汚しすみませんでした
260nobodyさん:2010/04/14(水) 08:59:09 ID:???
すみません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)、 ドメインおよびパスがすべて一致した場合にのみ」と反するような気がします。
単に基本的な事が分かっていないだけなのかもしれませんが、自分には考えても分かりませんでしたので教えて頂けたらと思います。
よろしく御願いいたします。

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

しょうがないので今はコントローラの中で
$this->view->layout()->setLayout('mobile');
とやってるんですが、そんなもんでしょうか?
264263:2010/04/22(木) 13:23:51 ID:???
細かいけど訂正。こうだった
$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;
}
265nobodyさん:2010/04/22(木) 17:52:05 ID: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()の使い方は間違ってますか?
266nobodyさん:2010/04/22(木) 23:09:32 ID:???
新しいバージョン使いなさい
1.10とか
267nobodyさん:2010/04/22(木) 23:55:56 ID:doAUeW+3
>>266
どうもありがとうございます
バージョンが古いのが問題かと思って新しくしたんですが、まだエラーが出ます。
PHP Fatal error: Class 'DOMDocument' not found in /usr/lib/php/Zend/Service/Amazon.php on line 128
何が問題なんでしょうか。
調べたらzendfwよりphp自体の問題に思えて来たのでphpスレに移動します。
ありがとうございました
268nobodyさん:2010/04/23(金) 00:33:42 ID:???
269nobodyさん:2010/04/23(金) 00:37:54 ID:???
>>268
どうもです。
しかし、そこに書いてあることやったんですけどエラー解消しないんですよね
php質問スレに詳細書いたので、気が向いたらお願いします。ありがとうございました
270nobodyさん:2010/04/23(金) 04:13:25 ID: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'); でなら目当ての商品情報を取得できるので
コンポーネントの設定や動作条件は満たしてるのではと思うんですが…
271nobodyさん:2010/04/23(金) 10:07:38 ID:yrV1Z6KO
Zend_Cache_Frontend_File(http://framework.zend.com/manual/ja/zend.cache.frontends.html)について分からないことがあります

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

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

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

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

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

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

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

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

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

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

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

作るサービス次第だと思うよ。
295nobodyさん:2010/05/06(木) 01:10:04 ID:???
>>290-292
sendmailつっても、この場合sendmailコマンドじゃなかったけ。
うちはpostfix使っているけど特に問題なく使えているよ。
296nobodyさん:2010/05/06(木) 16:26:28 ID:???
qmail も sendmail ラッパーあるみたいだし大丈夫だろ
297nobodyさん:2010/05/08(土) 04:09:56 ID:???
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は日本語では動かない等あきらめたほうが良い等
アドバイスをいただけないでしょうか?
298nobodyさん:2010/05/09(日) 17:05:23 ID:???
Zend_Controller_Router_Route_Interfaceを実装して
オリジナルのRoute作ってるんだけど
assemble()ってどういうときに呼ばれるんだろうか?
今のところ何も実装しなくても希望の動作になってるから良いのだが。。

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

なるほどthx

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

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

の間違いでした、ごめん
305nobodyさん:2010/05/15(土) 16:56:30 ID:???
みんなの意見が聞きたいです。
私が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を呼び出すようにしています。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ローカル環境にPHPいれてZF最新版いれて・・・ってやる程恩恵あるのかなと疑問に思ったんだけど、
覚えなくてもいい感じかね。
332nobodyさん:2010/06/14(月) 20:34:32 ID: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)
をどう解釈したら良いのかわからない…

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ありがとうございます。

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

rememberMeもあまり多用すると、パフォーマンスに影響するという
情報もありましたので、要所要所で使用していきたいと思います。
346nobodyさん:2010/06/19(土) 12:46:56 ID:???
rememberMe()ってクッキーの有効期限を操作するものだと思ってた。
347nobodyさん:2010/06/19(土) 16:33:15 ID: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()とかのメソッドを利用してクエリ結果を簡単に確認出来るけど
トランザクション時の方はわからない。
どなたかアドバイスお願いします。
348nobodyさん:2010/06/19(土) 22:51:45 ID:???
>>347
トランザクションの時も同じだよ。

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

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

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

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

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

これではマズイのでcommit()を行う前に、
自前でDELETE後の行数を確認する必要があるわけだ。
355nobodyさん:2010/06/20(日) 18:48:10 ID:???
>>351
空港でチケット止めたり、ICカードシステムが止まるような仕様だよそれ。
普段はうまく行ってるけど、実はバグってて見えないだけ、を隠蔽してる。
356351:2010/06/20(日) 23:49:48 ID:???
>>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件以下になってはいけない云々みたいな条件が無い時でもこういう処理が必要なら
トランザクションの説明全部にそう書いてて欲しかったなぁ… ずっと誤解してたよ
357nobodyさん:2010/06/21(月) 00:03:17 ID:???
>356
途中でエラーが出た場合、ループを抜けないと無駄なクエリを発行する事になってしまうので、
ループ部分はこんな感じでもいいと思う。
for($i=0;$i<$loop;$i++){
if($db->query(insert 〜)->rowCount() != 1)
throw new Exception('クエリの結果がおかしいです><');
}

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

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

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

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

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

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

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

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

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


PHPの気持ち悪い点

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

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

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

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

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

:hoge.fuga.com

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

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

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

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

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

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

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

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


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

バインドも使っています。
428nobodyさん:2010/09/01(水) 17:27:19 ID:???
「できませんでした」の詳細を書かないとわからんわ
429nobodyさん:2010/09/02(木) 01:35:42 ID:???
バインドされている値が間違ってるとかじゃね?
430426:2010/09/02(木) 14:41:33 ID: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変数を複数個使っているのが原因でしょうか?
無知な私に救いを。
よろしくお願いします。
431nobodyさん:2010/09/02(木) 22:02:42 ID:VdyJTTz3
>>430
実際の呼んでる所のコードも書かないと分からんよ。
432nobodyさん:2010/09/03(金) 00:06:56 ID:???
>>430
SQLエラーやPHPエラーは出ていない?

Zend_Db_Profilerやらで、Zend_Dbから発行されているSQL文を検証してごらん。
433nobodyさん:2010/09/04(土) 16:12:12 ID:???
あ、自己解決しました。
434426:2010/09/06(月) 11:06:46 ID:???
>>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で出力される情報を
バインド変数で指定している箇所に埋め込むと
しっかりとレコードが取得できました。
ホントにちんぷんかんぷんチンプイワン太夫です。

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

普通にここ、コロンがないよね
436nobodyさん:2010/09/07(火) 03:37:56 ID: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());
}

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

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

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


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

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

>>438
エラーコントローラーを無効にして、エラーを表示したらいいよ。
444nobodyさん:2010/09/07(火) 15:07:59 ID:an1mTvTq
>>442,443
ありがとうございます。調べてみます。
445nobodyさん:2010/09/07(火) 21:53:55 ID:???
>>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();
446426:2010/09/11(土) 16:05:36 ID:???
>>443
SQLにも問題なさそうでした。
副問い合わせのバインド変数の名称に
別のものを指定すると、こちらの期待通りの動きになりました。

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

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

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

粗結合いいとこ取りだけどなんかperlぽい気がするんだよね
467nobodyさん:2010/09/23(木) 02:38:04 ID:???
>>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>
468nobodyさん:2010/09/23(木) 02:52:30 ID:az/C8i5M
>>467
View Helper 使えばいいんじゃね?
469nobodyさん:2010/09/23(木) 02:59:54 ID:???
>>467
sfForm
470nobodyさん:2010/09/23(木) 04:12:58 ID:???
えっフォームの部分だけSymfony使うの?
471nobodyさん:2010/09/23(木) 04:36:38 ID:???
ZendFormはオブジェクト組み立ててバリデータだけ使ってる
472nobodyさん:2010/09/23(木) 08:21:59 ID:???
>>470
symfony使わなくてもフォームだけ抜き出して使える
473nobodyさん:2010/09/23(木) 10:21:11 ID:???
>>465
リリースタイミング的にphp5.3もしくは6でメンテ&追加開発していくので、
そのメリットを生かせるFWにしようかと。
474nobodyさん:2010/09/23(木) 10:45:19 ID:???
え?PHP6て白紙になったやつだけど?
475nobodyさん:2010/09/23(木) 14:16:25 ID:???
そうだったね。ってことでphp5.3なんだけど
476459:2010/09/23(木) 16:26:48 ID:???
>>467
smartyと組み合わせてる。
zendformとsmartyが共存出来るかわからないけど、
smartyで自前の関数用意して
<select name="prefecture">
{$val|selecterChk:"prefecture"}
</select>
とかなんとかやって呼び出して解決する方法になれすぎちゃってzendFormに
入れなくなっちゃった。
477nobodyさん:2010/09/23(木) 16:40:00 ID: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です。
478nobodyさん:2010/09/23(木) 17:11:52 ID:???
とりあえず、quoteIntoの返り値を見てみたら?
で、9行目ってのはSQL文の9行目じゃね?
479477:2010/09/23(木) 18:00:12 ID: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行目じゃね?
納得です。
生成されたクエリ文を表示する方法はないんでしょうか?
480477:2010/09/23(木) 18:55:24 ID:???
すみません、解決しました。
詳細は下らな過ぎて書きませんが自分の凡ミスでした。

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

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

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

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

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

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

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

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

web開発するにあたって、cakeならすんなりできる部分も、
Zendなら色々classを呼び出すなり、子クラス実装するなりしなきゃいけなかったりする。
Zendの方がハードルが高いのはまあ間違いない。
492nobodyさん:2010/10/09(土) 22:19:17 ID:???
とりあえずcakeはormがしょぼい。
493nobodyさん:2010/10/09(土) 22:27:33 ID:v6/8xFVg
494nobodyさん:2010/10/10(日) 01:21:37 ID:???
>>488, >>491
ありがとうございます。
CakePHPとZendFrameworkは思想そのものが違う感じなんですね。

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

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


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

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

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

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

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

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

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

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

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

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

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

IndexController

と書くところを

ModuleName_IndexController
ProjectName_IndexController

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

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

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

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

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

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

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

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

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

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

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

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

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

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

という感じかな。

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


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

単に @deprecated とかPDTでも対応してて便利だし、
そのレベルであれば良いなあって。
549nobodyさん:2010/10/22(金) 15:12:14 ID: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"

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

自分の場合、

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


ただしinitは複数回呼ばれる可能性があるので、気になる人は初期化済か否かのチェックをいれるなりした方が良い。
611609:2010/11/02(火) 15:59:56 ID:???
よく似たのがあると思ったら、なんと以前このスレに俺が自分で質問してるじゃあないか
誰も返事してくれてないしw なんかちょっと恥ずかしいぞ。 >>264
bootstrapでレイアウトを手動初期化する方法も書いてある
612nobodyさん:2010/11/03(水) 01:33:55 ID:???
613nobodyさん:2010/11/03(水) 04:59:30 ID:???
Zend_Http_UserAgentってIPアドレス判別とか出来るのかね・・・
クラス名も微妙に輪っか利辛いなぁ・・

Zend_Mobile_Deviceとかで良かったんじゃね?
614nobodyさん:2010/11/03(水) 07:58:18 ID:???
IPで判別とか日本ローカルなんだからお前らが作れ
615nobodyさん:2010/11/03(水) 11:22:15 ID:???
Java屋です。次案件でzend frameworkを使った開発をするのですが
hibernateやiBatis, S2Daoのような標準的なORMはいくつかあるのでしょうか?
616nobodyさん:2010/11/03(水) 11:26:43 ID:???
なんでぐぐらんの?
617615:2010/11/03(水) 11:35:27 ID:???
>>616
ぐぐってから聞いてる?
自分はぐぐってから書いてるよ。
618nobodyさん:2010/11/03(水) 11:40:14 ID:???
じゃそれで分かるじゃん
619nobodyさん:2010/11/03(水) 11:47:12 ID:???
ググってわかったら書かないでしょ
620nobodyさん:2010/11/03(水) 12:00:20 ID:???
そうかすまんかった。まぁ頑張ってくれ。
621nobodyさん:2010/11/03(水) 12:09:09 ID:???
おお。応援ありがとう。頑張るわ
622nobodyさん:2010/11/03(水) 12:52:45 ID:???
ORMは山ほどある。
標準的が何を示すのか不明だがZFならZend_Db_Tableあたりだ。
623nobodyさん:2010/11/03(水) 13:06:02 ID:???
そもそもhibernateやiBatis, S2Daoは標準的なORMじゃないので
624nobodyさん:2010/11/04(木) 00:39:38 ID: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)
どうしたらいいんでしょうか? 検証処理は外部化しつつ検証エラーの時のリダイレクトまで実装したいです。
意見よろしくお願いします
625nobodyさん:2010/11/04(木) 00:54:38 ID:???
エラーの時返り値返せばいいのでは
626nobodyさん:2010/11/04(木) 01:10:04 ID:???
>>624

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

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


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

>paramChkもグローバル関数では無く、何らかのクラスに隠蔽すると尚良い
これはなぜですか?
630nobodyさん:2010/11/04(木) 16:29:59 ID:???
>>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;
}
}
631nobodyさん:2010/11/04(木) 20:13:18 ID:???
俺はパラメータチェックはアプリケーションではなくアクションの仕事だと考えて

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

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

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

#extractは使う場面は思い浮かばない。
634nobodyさん:2010/11/04(木) 21:18:32 ID:???
extractとfunc_get_argsを同列に語るのは
さすがにPHPの経験不足が露呈しすぎだぞ
635nobodyさん:2010/11/04(木) 22:32:56 ID:???
>>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では無茶なやり方ではないのかな?
まあ、フレームワークでやってるってことは一般的なのか・・・
636nobodyさん:2010/11/04(木) 23:16:22 ID:???
その例では$name, $value, $attribsを元に戻してるだけ
引数が限られているなら危険性もないし、逐一コード書くより統一性が取れて開発効率も上がるから使ってるんだろう
637624:2010/11/05(金) 01:38:03 ID:FPhbRDb9
>>630
>他にparamChkという関数が存在していると不具合が出ちゃうから

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

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

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


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

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

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

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

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

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

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

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

function hoge($array) {}

ここでまでは解る?

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

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


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

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

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


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

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

個人的にIDEに洗脳されつつあるので、可変引数は毛嫌いしてたけど、
ちょっと引き出しが増えた気分だよ。ありがとう。
666nobodyさん:2010/11/09(火) 17:16:52 ID: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);
}

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

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

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

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

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


以下コード例

function hoge(array $array) {}

function hoge() { $array = func_get_args(); }
674nobodyさん:2010/11/10(水) 14:17:57 ID: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以前の問題かも知れないけどアドバイスお願いします
675nobodyさん:2010/11/10(水) 15:52:53 ID:???
>>674
base64_encodeしたら?
676nobodyさん:2010/11/11(木) 19:52:34 ID:???
メソッドオーバーロードを標準でサポートしてるメジャーなスクリプト言語ってないよな。Perl6がサポートするみたいだけど。
引数が多くなってきたらハッシュで渡すのが、メソッドオーバーロードのないスクリプト言語での常套手段だと思う。
677nobodyさん:2010/11/11(木) 21:00:10 ID:???
そういうのはオーバーロードできる言語でもハッシュで渡すんじゃね?
678nobodyさん:2010/11/12(金) 11:04:01 ID:???
Zend_Paginator でページ移動をするviewで、
ページのエレメントではないチェックボックスやテキストボックスの状態を
ページ移動後も維持したいのですが、
方法が分かりません。ページ移動すると初期状態にもどります。
Zend frameworkに何か仕組みはあるのでしょうか?
679nobodyさん:2010/11/12(金) 12:11:24 ID:???
移動前にサーバ側でパラメータ持ってればそのまま引き継がれるはず。
クライアント側で変更したなら当然Javascript使わなきゃだよ。
680nobodyさん:2010/11/12(金) 12:21:47 ID:???
すまんちょっと訂正
viewscript内のhrefって基本は自分で書くようになってるやん。
維持するのもリセットするのもあんた次第。
維持する項目が多くてPC用ならセッション使うのが普通。
681nobodyさん:2010/11/12(金) 13:54:05 ID: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);
}
}

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

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

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

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

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

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

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

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

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

quickstartでDBアダプターどうなってんだろうと思って調べたら・・・!なんとで、Zend_Db_Tableの
staticなクラス変数にデフォルト値としてアダプタのインスタンスを突っ込んでたw
たしかブートストラップのリソースプラグインあたり
695nobodyさん:2010/11/13(土) 17:25:56 ID: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')
);
696nobodyさん:2010/11/13(土) 17:28:27 ID:???
>>691

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

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

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

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

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

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

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

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

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

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

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

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

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

<?php echo $this->header; ?>
727nobodyさん:2010/11/29(月) 15:27:10 ID:???
>>722
わかって端折って書いてるんだろうけど、字面どおりだとなんだかなーなかんじ。
728nobodyさん:2010/11/29(月) 22:14:24 ID:???
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");
}}
729nobodyさん:2010/11/30(火) 10:35:10 ID:???
リファレンスのアクションコントローラーのとこ嫁
_forwardはinitじゃなくてpreDispatchで使う仕様。
無駄を省くためわざとそうなってんのかな。
730nobodyさん:2010/11/30(火) 15:54:28 ID:???
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();
731nobodyさん:2010/11/30(火) 16:28:36 ID:???
すみませんちょっと説明不足でした。
既存のアプリケーションのリソースやコントローラーを利用して
コマンドラインからほげほげするというものです。
732nobodyさん:2010/11/30(火) 19:39:50 ID:???
>>730
いいね。
もっと試してみてレポよろしく。
733728:2010/12/03(金) 19:24:14 ID:zaEZnwnp
そうだったのですね、知りませんでした。どうもありがとうございます。
734nobodyさん:2010/12/03(金) 19:48:49 ID:???
ZendFrameworkを習うのに、お勧めのチュートリあったら教えてください。
735nobodyさん:2010/12/03(金) 20:39:31 ID:???
英語わかるならyoutubeに動画がある
736nobodyさん:2010/12/04(土) 10:56:51 ID:???
掲示板を作ってるんだけど、ログインした人のみ投稿できるようにしようと思う。
zf固有の質問でなくて申し訳ないが、WEBアプリの一般的なロジックとして、
投稿時に投稿内容と投稿者キーをDBに挿入する為には投稿者キーはcookieで保持し続けるのだろうか?

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

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

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

以上だ


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

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

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

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

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

ZFを知り、CakePHPが糞だってことに気づきました。
あ〜早めに気づいてよかった!
755nobodyさん:2010/12/18(土) 15:52:16 ID:???
でもCakePHPのほうが仕事あったりするよね
756nobodyさん:2010/12/19(日) 03:41:25 ID:???
無いよ
757nobodyさん:2010/12/19(日) 10:03:56 ID:???
特定のブローカーがFWの仕事押さえてるから回ってこないお( ^ω^)
758nobodyさん:2010/12/20(月) 10:28:03 ID:???
ZFって基盤だけ使ってあとは自分で作成するのがベストだよな
759nobodyさん:2010/12/20(月) 19:04:35 ID: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が出る原因は何が考えられますか?

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

田舎なので立ち読みできず、AmazonのZF関係の
コメントなども少ないので・・・
761nobodyさん:2010/12/20(月) 20:05:05 ID:???
762nobodyさん:2010/12/20(月) 22:24:17 ID:???
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に書く方法は一応正常に動作しますが、
公式のマニュアルとはまったく違う方法でプラグインを読み込んでるので、これが本来の正しい方法なのかわかりません。
よろしくお願いします。
763nobodyさん:2010/12/20(月) 22:48:41 ID:???
別に好きな場所に置いてnewしてregisterPluginで登録すればおk
764nobodyさん:2010/12/20(月) 23:07:07 ID:???
>>763
newを書くファイルって何が相応しいんでしょうか?
あとZend_Controller_Front::getInstanceを書く場所もわかりません。
765nobodyさん:2010/12/20(月) 23:34:09 ID:???
>>764
別に好きなファイルでいいのでは?
bootstrap.phpでもいいしindex.phpでもいい
766nobodyさん:2010/12/20(月) 23:39:02 ID:???
あと試してないけどController内でもできるんじゃないかな
767nobodyさん:2010/12/21(火) 11:55:55 ID:???
ルールもそれほどなく、本当に自由に実装出来るのがZFの良いところ。
実装次第でパフォーマンスや効率も変わってくるだろうし。

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

class UserTable extends Zend_Db_Table
{
   protected $_tableName = "user";
}
771nobodyさん:2010/12/22(水) 23:20:20 ID:???
えっ
772nobodyさん:2010/12/23(木) 15:14:15 ID: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>');
で所用を達成できるかと思ったらうまくいきませんでした。
どうすればいいでしょうか?

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

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


775nobodyさん:2010/12/24(金) 15:05:03 ID: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は絶対に指定したく無かったために加えました。
776nobodyさん:2010/12/24(金) 15:31:58 ID:???
ちがうちがう そうじゃ そうじゃない
777nobodyさん:2010/12/24(金) 15:37:03 ID:???
>>775
3行にまとめてくれ
778759:2010/12/24(金) 16:59:30 ID:lpwJZIX8
今週ずっと原因を調べてたんですが、
結局わからずじまいでした。

どなたか何か思い当たる節があれば
アドバイス頂けないでしょうか。
779nobodyさん:2010/12/24(金) 17:26:11 ID:???
100%再現する問題なら簡単に切り分けられると思うけど
780nobodyさん:2010/12/24(金) 18:05:10 ID:???
>>778
再現できるソースをくれ
781775:2010/12/25(土) 16:06:14 ID:???
>>スリーセブン
rewriteエンジンが非公開ディレクトリまで及んでいるようですが、ZFで公開するディレクトリ、そして公開しないWebコンテンツのアプリケーションディレクトリの為の
httpd.confの設定はセキュリティの観点から皆様はどのように設定していますでしょうか?
パーミッションは一応設定していますが、上記に書いた自分の設定ではどうも不安なのですが、セキュリティ的に大丈夫なのでしょうか?
782nobodyさん:2010/12/25(土) 16:08:58 ID:???
783nobodyさん:2010/12/26(日) 17:27:17 ID: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する方法がわかりません。
どのようにすればいいでしょうか?

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

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

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

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

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

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

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

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

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

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

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

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

ZFのコミュニティは上記のようなスタンスも許されないものなのでしょうか>797
800nobodyさん:2011/01/10(月) 22:23:23 ID:???
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
何かに似てると思った
これ思い出した

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

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

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

余談だけど俺の周りにはそのタイプが多い、
基礎が出来てないけどFW導入すれば開発楽になるんでしょ?って人。
802nobodyさん:2011/01/10(月) 23:58:43 ID:???
>>800
ちょww
コピペしただけじゃお前5番じゃないかよってゆう・・・。
まあその理屈でいったら俺も5か。
803nobodyさん:2011/01/11(火) 11:39:37 ID:+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に入りませんでした。
よろしくお願いします。
804nobodyさん:2011/01/11(火) 21:54:36 ID:???
アップロードが完了したら変換処理が完了してるんじゃないの?
UPしてからしばらくかかるとかあんの?
どちらにせよXMLの中身に出てくるんじゃないのか
805797:2011/01/11(火) 22:44:01 ID:???
>>799
もし今まで誰も気づいていなくて、君が初めて指摘したことだったらもっと価値があったと思う。
でも、いままでマニュアルについてはいろいろな「指摘」がなされてきているから、残念なことにもう目新しい話じゃないんだ。
同じ要望を持つ人がどれだけいるかという投票にはなるけどね。

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

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

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

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


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

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

逆に、Zend_Db_Tableを運用上で使っている人に意見を聞いてみたいなぁ
自分には知らない便利な活用法なんかあるかもしれないからね
819nobodyさん:2011/01/19(水) 13:34:46 ID:???
俺は複雑な検索や最適化が必要な箇所は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単位なので、意識してれば混在しても問題無いよ。
820nobodyさん:2011/01/19(水) 14:32:35 ID:???
うはそうだったのか、使えるじゃんZend_Db_Table
せっかちな人はモデルからfetch結果(Zend_Db_Table_Rowset)を返してそのままviewに突っ込めばいいのか。

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

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

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

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


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

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

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


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

$request = $_POST; でもよい。


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

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

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

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

お騒がせいたしました。
849nobodyさん:2011/01/24(月) 21:15:03 ID: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って表示させたいだけなんですがどうすればいいのでしょうか。
850nobodyさん:2011/01/25(火) 02:21:16 ID:???
>>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()) {
851nobodyさん:2011/01/25(火) 02:50:09 ID:???
Zend_Applicationの存在しないバージョンから使ってる俺に、
Zend_Applicationを導入する優位性を教えてくれないか?

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

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

…Zend_Applicationは巨大すぎて把握しきれんわ
あとvar_dumpしたら至る所に*RECURSION*って出てくるんだが大丈夫なんだろうか?
856nobodyさん:2011/01/25(火) 21:22:58 ID:???
へ?何が?
857nobodyさん:2011/01/25(火) 23:20:26 ID:???
>>855
大丈夫。
リファレンス値が入っていると無限階層になっちゃうから、
そういう変数はRECRUSIONと表示される。
858nobodyさん:2011/01/29(土) 00:59:18 ID: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');
}
とかやりたかったんですが普通はどこらへんでやるものなんですかね?
859nobodyさん:2011/01/29(土) 01:12:08 ID:???
>>849と同一人物?
860nobodyさん:2011/01/29(土) 01:55:56 ID:gRK6VmbL
よくわかったな!なぜバレた!
861nobodyさん:2011/01/29(土) 01:58:15 ID:???
偉そうな口調が似てた
862nobodyさん:2011/01/29(土) 03:40:53 ID:???
>>858
$request = new Zend_Controller_Request_Http();
$baseUrl = $request->getBaseUrl();

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

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

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

Zend_Layout
大抵使う

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

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

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

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

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

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

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

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

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

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

逆に一度覚ると楽で手放せないのは、
Zend_Session、Zend_Cache、Zend_Dbくらいかなぁ・・・
Zend_Log、Zend_Mailは俺俺クラスで一枚ラップしてやらないと微妙に使いにくい気がする。
888nobodyさん:2011/01/31(月) 22:10:12 ID:???
メッセージくらい自分でカスタマイズしろよ。
自力開発能力ほんとないのな
889nobodyさん:2011/01/31(月) 22:44:21 ID:???
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);
}
890nobodyさん:2011/01/31(月) 23:12:25 ID:???
>>885
じゃぁ何使ってるの?
後はDBとView位?


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

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

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

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

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

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

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

__get / __set マジックメソッド使ってるからvar_dumpでは解読出来ないよね・・・
IDEとか使ってソースコード追うのが一番早いよ。
898nobodyさん:2011/02/01(火) 01:34:01 ID:???
>>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で検索してる。
899nobodyさん:2011/02/01(火) 10:04:22 ID:???
アレを使ってるだの使ってないだのと
色々と議論されていますが、
皆さんどれくらいの規模のシステムを開発されてますか?

フレームワークの選定権とかもたれているのですか?
900nobodyさん:2011/02/01(火) 10:37:13 ID:???
Zend_Validateは結構便利だと思ってたけど、少数派なのかな。
Zend_Validateの派生クラスを生成するクラスを作っておけば、使い回しもできて便利だと思うのだけど。
901nobodyさん:2011/02/01(火) 11:22:37 ID:???
Zend_Validateだけとかならいいけど、FilterとかFormとかFileなどと連携になると非常に知識を覚えるのがめんどくさい
特にForm
Layout、MVCとかと一緒にすると自分には逆に混乱してしまう
902nobodyさん:2011/02/01(火) 13:13:40 ID:???
>>890
dbとviewとaclとconfigとsessionとcacheかなー
903nobodyさん:2011/02/01(火) 14:25:39 ID:???
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();
904nobodyさん:2011/02/01(火) 16:11:09 ID:???
Zend_ApplicationとかBootstrapって、
大した事してないのにコード追うのが面倒になるので使ってねーや。
(というかちょっと前のバージョンには存在して無かった)

疎結合で好きな機能だけ使えるのもウリなのに、
最近は兎に角あるものは極力ZFを使うべきって流れになってて嫌だなぁ
905nobodyさん:2011/02/01(火) 16:24:08 ID:???
>>903
そこから変えるとしたら自分の場合はZend_Configはiniじゃなくてphpの方使うくらい
906nobodyさん:2011/02/01(火) 16:29:11 ID:???
↓でも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>
907nobodyさん:2011/02/01(火) 17:23:30 ID:???
>>906
デザインとロジックを分けるためだけにFWを導入するわけでは無い。

それ以前に君の例だと、
ViewからController(?)であるsetting.phpを呼び出している時点でMVCのなんたるかすら理解していないと思われる。
基礎からお勉強してきなさい。
908nobodyさん:2011/02/01(火) 18:31:42 ID:???
じゃあこうすりゃいいんだろ?
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>
909nobodyさん:2011/02/01(火) 18:33:32 ID:???
>>908
恥ずかしいから他所行った方がいいとおもうなぁ…
910nobodyさん:2011/02/01(火) 18:56:17 ID:???
無知の知って言葉すら知らない餓鬼なんだろうよw
自分がついていけないから、必死でフレームワークの存在を否定したいんだよ。

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

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

これをZend_Navigatorで表示したいのですがどなたか教えてください
916nobodyさん:2011/02/01(火) 22:53:14 ID:???
917nobodyさん:2011/02/02(水) 01:22:54 ID:???
>>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()から作るのかなぁ?
918nobodyさん:2011/02/02(水) 03:21:43 ID:???
>>915 >>917
素朴な疑問なんだが、なんでHTMLを書こうとせず、壁にぶつかってまで自動生成しようとするの?
後々カスタマイズとか非常に面倒な気がするんだが・・・

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

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

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



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

あえて利点を挙げるなら、パンくずリストとサイトマップにも
変換可能ってところかな。
931nobodyさん:2011/02/03(木) 05:28:20 ID:???
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)の引数を増やせば良い、と・・・。
932nobodyさん:2011/02/03(木) 07:28:11 ID:???
>>931
普段はCakeを使うことが多いが、個人的には引数増えるよりBの方法が楽だと思う。
というか引数の順番をいちいち記憶するのが面倒。
array(
 'val' => $str,
 'encoding' => 'utf-8',
 'convert' => array('KV', 'upper')
)
とかすれば引数の順番覚えなくてすむし。
Cakeを触りすぎたせいかもしれないが

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

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

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


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

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

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

以下の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
944nobodyさん:2011/02/05(土) 10:08:36 ID:???
>>926
Zend_Layout は、 有名な「ツーステップビューパターン」を実装したものです。 開発者は、アプリケーションのコンテンツを別のビューの中に埋め込むことができます。 この「別のビュー」は、通常はサイトのテンプレートとなります。
945nobodyさん:2011/02/05(土) 10:31:07 ID:???
ああもう!!!!Zend_Layout難しいすぎるのだ!!!!!!!!!!
946nobodyさん:2011/02/05(土) 11:08:20 ID: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');
947nobodyさん:2011/02/05(土) 13:22:33 ID:???
それぞれのページごとにキーワードを設定したいのでコントローラのアクションに$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に
948nobodyさん:2011/02/05(土) 14:24:02 ID:???
>>947
$item = new stdClass;
$item->type = 'charset';
$item->charset = 'UTF-8';
$item->content = null;
$item->modifiers = array();

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

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

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

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


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

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

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

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

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

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

978nobodyさん:2011/02/09(水) 11:48:44 ID:???
layoutって結構使うもの?
979nobodyさん:2011/02/09(水) 13:10:38 ID:???
使わない。使いにくい。
980nobodyさん:2011/02/09(水) 13:29:55 ID: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のものです)

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

公式
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/
982nobodyさん:2011/02/09(水) 15:17:33 ID:???
すいません自己解決できました
なんかコントローラのクラス名の命名規則があってモジュール名_IndexControllerって書かないといけなかったようでした
ggって見つけたものなのでマニュアルのどこに書いてあるのかよくわからないのでこれで良いのか分かりませんが・・・
983nobodyさん:2011/02/09(水) 16:02:02 ID: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です。よろしくお願いします
984nobodyさん:2011/02/09(水) 17:45:22 ID:???
>>983
Zend_Service_Twitterは使った事ないけど、
OAuthで受け取ったアクセストークンの設定とかはしてる?
985nobodyさん:2011/02/10(木) 12:44:36 ID:B6xb9mKa
>>984
レスどうもです。
原因わかりました
ZendFWのバージョンがOauth認証に対応してませんでした
1.10のマニュアルを見ると対応してるように書いてるのに、
実際には(自分のは?)対応してなかったという…
意味わからないですが、ありがとうございました
986nobodyさん:2011/02/10(木) 16:41:11 ID:???
レイアウト使うとページ読み込むの遅いんだけどこういうものなの?
レイアウトからheaderとcontentsとfooterを呼び出している
987nobodyさん:2011/02/10(木) 16:43:10 ID:???
Zend_Layoutが原因で、そんなに重たいと感じたことはないなあ
いや、よく考えたらキャッシュ使いまくりだから、あんまり感じないだけなのかも
何にせよキャッシュは大事だよ
988nobodyさん:2011/02/10(木) 16:45:33 ID:???
なんだこれsmartyみたいにキャッシュて勝手に聞いてくれるものじゃないのか
989nobodyさん:2011/02/10(木) 18:31:27 ID:???
>>988
好きにZend_Cache使いなさい、
ってのがこのフレームワークのスタンスなのよ

Zend_Cacheは簡単だし、粒度もそれなりに設計できる
990nobodyさん:2011/02/10(木) 23:30:56 ID:2I2O4kI9
ドキュメントルートにZFをインストールする場合って特別にパーミッションやhtaccess設定することってありますか?
いつもincludeパスが通った所に置いた利用しかしてなかったので分かりません
991nobodyさん:2011/02/11(金) 04:01:23 ID:???
>>990
どこに置こうがZFを呼び出せるということは、
include_pathの通った場所(例えば".")に置いてるということなので
PHP視点でZFを使うための追加の設定は不要
ただ、ZFに限らずライブラリ系置くなら外部からHTTPアクセスはできないようにしておく方が無難
992nobodyさん:2011/02/11(金) 04:05:19 ID:???
993nobodyさん:2011/02/11(金) 12:42:29 ID:???
ドキュメントルートに送って事はapplicationの中見られるって事ですよね
htaccessの修正なくてもOK?
994nobodyさん:2011/02/11(金) 12:44:32 ID:???
はい・・・?
995nobodyさん:2011/02/11(金) 12:46:04 ID:???
996nobodyさん:2011/02/11(金) 12:50:32 ID:???
>>995
うん、それで?
997nobodyさん:2011/02/11(金) 12:52:49 ID:???
>>996
それで>>993聞いてます
998nobodyさん:2011/02/11(金) 12:53:45 ID:???
>>997
そこのページどの記述からapplicationドキュメントルートに置くって読み取ったの?
999nobodyさん:2011/02/11(金) 12:54:09 ID:???
へんなバカに粘着されてレス伸びてるから次スレで聞いたらいいよ
1000nobodyさん:2011/02/11(金) 16:51:20 ID:g4d041We
超高速で俺が1000ゲット!
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。