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

Zend Framework Part4

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

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

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

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

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

前のスレッド Zend Framework Part3
http://pc11.2ch.net/test/read.cgi/php/1239320100/
0002nobodyさん2010/02/10(水) 01:40:17ID:???
専門的な記述のめちゃくちゃ和訳wktk
容赦なく突っ込んでやるからケツ貸せよ。
0003nobodyさん2010/02/10(水) 09:21:33ID:???
質問させて下さい
<?php
require_once 'Zend/Filter/Input.php';

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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


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

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

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

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

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


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


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

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

>>26じゃないけど、このスレは基本突っかかってくるからあんまり気にしない方がいいよ。
利用者がひねくれたフレームワークなのかもしれない。
■ このスレッドは過去ログ倉庫に格納されています