専門的な記述のめちゃくちゃ和訳wktk 容赦なく突っ込んでやるからケツ貸せよ。
質問させて下さい <?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」、としかブラウザに表示されないものですから
>>4 ごめんなさい、ネタじゃなくてマジで聞いています・・・すみません
foreach($in->getInvalid() as $invalid) foreach($invalid as $message) echo $message . "<br />\n";
8 :
nobodyさん :2010/02/12(金) 22:56:41 ID:Rluma8O9
Zend_Db_Table::fetchAll()はありますが、 Zend_Db_Table::fetchOne()はなぜないのでしょうか?
一人はみんなのために みんなは一人のために
fetchAll()に対するのはfetchRow()じゃないのか
11 :
nobodyさん :2010/02/12(金) 23:42:53 ID:Rluma8O9
>>10 対の話ではないです。
Zend_Db::fetchOne()はありますが、
Zend_Db_Table::fetchOne()がなぜないのかなぁと。
Zend_Db::fetchOne() ってあるの?
無いよ
Zend_Db_Tableってそもそもテーブル単位のデータ取得なんだからOneがあったらおかしい PKだけ入ってるテーブルって事になる
15 :
nobodyさん :2010/02/13(土) 00:58:51 ID:vm0LKRH2
COUNT(*)での利用を想定していたのですが、無いようですね
Adapterにあるね
Zendやりたくて環境設定まで終えてググってHelloWorld表示まではできたんですが、 次にプログラマ向けリファレンスガイド見て覚えようと思い まずZend_Controllerから見ていこうと思ったんですが、最初に最低限目を通して おいた方がいいのはZend_何でしょうか?
19 :
nobodyさん :2010/02/13(土) 17:01:12 ID:vm0LKRH2
>>16 それで解決しました。
>>!4
Tableだって一つの返り値あります。
普通にZend_Db使えばいいのでは
21 :
nobodyさん :2010/02/13(土) 17:35:28 ID:vm0LKRH2
>>20 何でですか?
複数テーブルで運営してるので明らかに不便なんですけど。
使い方解ってないんじゃね
23 :
nobodyさん :2010/02/13(土) 21:05:02 ID:Vt3QKYJR
スゴい素人質問なんですが、 一つのサーバでzendFWを使う複数のサイトを作るとき(バーチャルドメインとかで)、 zendFWのパッケージ(?)はサイトの数分インストールしなくても良いのでしょうか? FWのインストールは一度限りで、applicationディレクトリやルーティング、 テンプレートへのパス設定をそれぞれのサイトのフロントコントローラでやるだけで、 それぞれ別のサービス・ルールとして動いてくれるんでしょうか? PHPだって2つも3つもインストールしないんだから一緒だろうとは思ったのですが FWが初めてなので質問しました。すみませんが回答お願いします。
>>23 application単位で管理すればおk
それでだいたいうまく行く
Zend_Db_TableにOneないのってのは PHPプログラマらしい質問だと思う オブジェクト指向が解ってない
質問者じゃないけど、このスレって質問があったときに適当に突っかかってくるよね。
OneがないならAdapterって返答スレばいいのに
>>25 みたくオブジェクト指向的には〜みたいに言いがかりつけて。
使いたいように使えっていうのがZFの発想だからどう使おうが自由。
>>25 オブジェクト指向的な説明お願いします。
使いたいように使えっていうのがZFの発想 え?
Zend_Db_TableでfetchOneはないんですかって質問なんだから オブジェクト指向のデータアクセスでどのデータが帰ってくるか解らないOneなんて無いんだから無いんだよって話だろ 帰ってくるのはオブジェクトかオブジェクトのリストなんだから
> ってくるのはオブジェクトかオブジェクトのリストなんだから なぜ、そう言い切れるんだ? Zend_Db_AdapterならfetchOneがあって、TableならfetchOneがない理由とは言えないよな。 テーブルゲートウエイパターンに忠実とかそういう話なら少しはわかるが、 オブジェクト指向のデータアクセス??そこんとこ詳しく教えてくれ。
31 :
nobodyさん :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 ありがとうございました、自信がもてなかったので助かりました。
32 :
31 :2010/02/13(土) 22:57:13 ID:???
書き間違えました >たとえば$val= new Zend_Vlidate_GreaterThanInt(n) たとえば$val= new Zend_Vlidate_GreaterThan(n) でした
おれは大量にnewするのがいやだから、インスタンス管理して投入してる Validaterだけじゃなくて、decoratorもfilterも ベンチとったわけじゃないけどね。なんとなく。
36 :
31 :2010/02/13(土) 23:50:18 ID:???
>>33 Zend_Form、そんなに画期的なんですか?
ありがとうございます、調べてみます。
>>34 インスタンス管理ってどんなことをするんでしょうか?
かなり恥ずかしい質問かもしれないです、すみません
php インスタンス管理/php インスタンス共有/オブジェクト指向 インスタンス管理
などでググって調べたんですがはっきりわかるものが出てきませんでした。
zend以前の質問かもですね…
うーん、、
インスタンス管理って、別にたいしたことじゃない。 変数に保存しておいて、setValidaterするだけ
>>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);
>>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のクラスを適用するような処理には向いてなさそうですね。。
テーブルに組み込んだりのレイアウトも癖がありそうだし…
上手に使い分けできるようにならなきゃだめですね〜
難しいけどできるようになりたいな。。
お二人とも、本当にありがとうございます
あぁ、すまんtypo Zend_Form関係のsetValidatorsを使う 必要なValidatorのセットを作っておいてFormとかElementに設定して使う > n個目だけCSSのクラスを適用するような処理には向いてなさそうですね。。 めちゃめちゃ向いている。 そのためのZend_Form
Zendの書式で質問なんですけど、なんで字下げにタブ使っちゃダメなの? ドキュメントに理由が書いてないのですごく引っかかります。
ドキュメントに書いていないことなんだよな。 で、他人の妄想を聞いてどうすんの?
妄想とか聞く気はないんですが、どこかに書いてあって見つけきれないだけかと思い 聞いてみました。 明確に書いてあることなのでそれなりの理由があると思ったんですがなにかおかしなこと聞いていますか?
コーディング規約があるプロジェクトに参加したことないのか 複数人で開発するときは、書き方が混ざったら読みづらくなるから 全員同じ書き方にあわせる ただそれだけの話だ
46 :
45 :2010/02/15(月) 15:15:26 ID:???
diffとったときに、スペースがタブになってると萎える かといって、PHPの場合、テンプレ兼ねてるからタブだけガン無視も無理だし
49 :
nobodyさん :2010/02/16(火) 03:49:53 ID:iRRBilsA
一つの同じコントローラ中に ・queryAction ・finishAction の二つのアクションがあります。 queryActionではデータベースへのquery登録処理(insert)がされていて、 それが成功したら $this->_forward('finish'); と、finishAction(完了画面)に遷移させています。 が、遷移後の画面で画面をリロードすると、再度クエリしようとしてしまいます。 どうしたらいいでしょうか? リロードしても何も起こらないようにしたいのですが。。
>>49 処理終了後はforwardじゃなくてredirect
>>49 PRG (POST-REDIRECT-GET) パターンが一般的かなぁ
他にはpostにチケットを入れといて、リロード時や2度押しを判別
フィルターを一部のコントローラーだけでなく、全体に適用したいのですが それ用の処理関数はありますか?
53 :
nobodyさん :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 ありがとうございます。たすかりました!
MTAなんて何使っても同じ トヨタ車でもホンダ車でも目的地に着けるのと同じ
>>54-55 ありがとうございました。
zendFWにかかわるのでスレチじゃないかと思ってましたが、すみません
別にいいよ。すみませんはいらない。 1. sendmailからpostfixへの切替方法 2. phpでsendmailではなくsmtpでメール送信する方法 それぞれどこに聞くといいかちょっと考えてみて Zend_Controllerをいじっててトイレに行きたくなったんだけどトイレはどこ? そのレベル
メール出来る様に設定すればいいだけだしな。 メール出来るならZFでも問題なく使える。 ZFからスパムメール送るなら規制されて当然w
59 :
nobodyさん :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の結果が出力されるのです。 どんな原因が考えられるでしょうか?
60 :
sage :2010/02/17(水) 02:31:41 ID:???
>208 returnを使ってください。 redirectだけではなくforwardも同様ですよ。 public function aaaAction(){ //ここの処理に成功したら以下のリダイレクト return $this->_redirect('/hoge/bbb'); } ちょうど素通りしましたのでご参考になれば。
>>60 こんな時間にありがとうございます
でも、そのreturnを冒頭に加える処理をしても結果は同じでした
そもそもなんでindexActionに転送するのか、
bbbActionの中に限らずredirect処理を実行してる場所なんて
どこにもないので困っています。
どんな原因が考えられるでしょうか?
62 :
61 :2010/02/17(水) 10:06:25 ID:???
自己解決しました 原因はredirectの動作には関係ありませんでした routingでbbbアクション用のルート設定をしてなかったのが原因でした indexが出力されるのは/hoge/bbbのbbbをパラメータと判定されてたからでした お騒がせしてすみません、ありがとうございました
Manual英語の部分まだまだ沢山あるね
個人的にはPEARのマニュアルのいい所をZFには導入して欲しいと思う
Zend_Cacheにgetってメソッドがあったようですが、コレはどうなったのでしょうか? ZF徹底入門(バージョンは1.5のようです)のP455の一番下に書かれていたのですが、後ろのリファレンス集には書かれていません・・・ 昔のマニュアルなどには$cache->get()みたいに書かれて使われていたみたいなのですが、最近のマニュアルには書かれていませんし、APIにも出てきません
その本のことは知らんけど、昔から test load save だったと思うよ。 なんかの間違いでは
過去のソース見ればええねん
69 :
nobodyさん :2010/02/19(金) 14:28:05 ID:vk4cE2Qg
>>66 Zenf_Registryと勘違いしてないか?
>>69 えっ?
Zend_Cacheのページですし、Outputフロントエンドの項目の説明文中に書かれています
Zenf_Registryはこのコード、MVC内では使用されていないようです
getメソッドと書かれているくせに、サンプルコードにはいっさいgetは入っておりません
72 :
71 :2010/02/19(金) 14:36:38 ID:???
Zenfではなく、Zend_Registryです
73 :
nobodyさん :2010/02/19(金) 16:12:47 ID:g43faW/Y
ZF徹底入門のTypoってことで 次の方どうぞ
>>74 他のことが忙しくて、 1.0 には間に合わないと contributor が思ったからじゃないの?
76 :
nobodyさん :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では設定した警告文以外でません。。 どなたかご意見よろしくお願いします。
>>76 コテハンにすると質問に答えてもらいやすくなるよ。
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 自分には良く分かりませんでした
81 :
80 :2010/02/22(月) 11:08:15 ID:???
すみません、ZFのバージョンは1.9.6だったと思います PHPは5.2.12です
82 :
80 :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などは普通に動作しておりました
今はjaにしてる?言語ならjaでいいけど、地域がわからないと通貨がわからないからね ja_JPにしてみたらどう?
84 :
80 :2010/02/22(月) 14:39:46 ID:???
>>83 ありがとうございました
ja_JPにしたら出来ました
ご迷惑おかけしました
覚えることいっぱいあるなぁ もう疲れたよ
いちいち覚えてないよ 必要になったら調べるだけ
確かに、ZFは他のFWと比べても色々と大変だよな 今コンポーネントっていくつあるんだっけ? 70あるかないかってとこかな?
88 :
haruna :2010/02/23(火) 14:59:27 ID:p7GWr9xn
おれも初心者で詳しくないが、ZFダウンロードしてきて展開してinclude_path通してrewrite設定してる?
> サーバが見つかりません URIの前にlocalhostにアクセスできてないでしょ
91 :
88 :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()
{ }
}
92 :
89 :2010/02/24(水) 09:51:56 ID:???
つまりhtdocs直下にChapter02-02を入れたわけね htdocsがDocumentRootなわけね で、RewriteBase設定は /Chapter02-02/html/ になってると ここまでの設定はおかしくないはずと・・
> 設定はおかしくないはずなのですが・・・ じゃぁ、設定は変えなくていいね。
w
そのパス通りなら、'../application/controllers'は違うよな
96 :
89 :2010/02/24(水) 09:58:17 ID:???
違うか
>>88 見るとC:\Apache2.2\htdocs\ZF2\Chapter02-02
だからRewriteBaseは /ZF2/Chapter02-02/html/ になるかな
友達に頼んで書き込んでもらうほど匿名掲示板に期待されても
98 :
88 :2010/02/24(水) 12:00:03 ID:???
>>97 本書のサポートページがなくて、また、質問は受け付けていないようなのです・・・
>>皆さん
ありがとうございました
解決いたしました
確かに、RewriteBaseのパスを間違えていたようでした
ほんとごめんなさい
99 :
nobodyさん :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
長くなってしまいすみません、よろしくお願いします。
ErrorControllerをちゃんと設置するか もしくは、 $front->throwExceptions(true); して、エラーの原因を探ってみて
101 :
99 :2010/02/25(木) 00:27:05 ID:nHRZ8Mu+
>>100 すばやいレスありがとうございます。
ルーティングの設定やコントローラ名・ファイル名などはあれで問題ないのでしょうか?
フロントコントローラの一番下に
$front->throwExceptions(true);
と追記しましたが、画面は真っ白のまま、エラーログも同じ変わりありませんでした
フロントコントローラーの1番下ってどういう意味かわからないけど、 Zend_Applicationを使ってるなら、 設定ファイルで↓のように書く frontcontroller.throwexceptions = 1 正しく動いてないなら、なんか間違ってる。 設定とかファイル名なんて、全部見ないとわからないよね。
103 :
99 :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);を入れ替えても同じエラーが出ています
$front->setParam('noErrorHandler'); をdispatchより上に で、問題がsmartyなのかrouteなのか、標準に戻して切り分けてみたら?
ZendFrameworkwo使ってきて、基本的な事はおさえました しかし、気がついたのですが、コントローラーとヴューは使用しているけれど、モデルってのを一度も使ってきませんでした 色んなサンプルでも上記の2つだけ利用して、モデルは空っぽでした このmodelという機能は何に使うのでしょうか?
基本的なこと抑えられてないじゃねぇかw
なんか、うまいこと言えっていうネタだろ?
>>107-108 確かに(苦笑
表現が悪かったです
コンポーネントなどは理解したのですが、基本的な事をおさえたつもりでした・・・
すみません、マジで聞いております
このModelフォルダの中にはいったいどんなものを入れて使うのかが分かりません
ControllerとViewは分かったのですが、Modelの概念が見えてきませんでした
ビジネスロジック、処理とか書かれていますが自分には良く分かりませんでした
マニュアルや本などでもサンプルコードや説明に、特にModelの事が書かれていたような記憶も無くて・・・
>ヴュー www
ビジネスロジックを検索すればいいじゃないか
>>109 の言ってる事も分からなくはないな
俺の学習した本なんかもControllerとViewのコードしか書かれていなかったし、説明もほぼ皆無と言えるほど何も書かれていなかったし
マニュアルでもコンポーネントの学習がメインになるだろうから、サンプルにはModel部の事なんて書かれていないし
基本的にFrontControllerとActionControllerが重要視されて解説されてるし
ネットで「ZendFramework Model」なんかで上位部だけ調べてみたけど、あんま具体的なものはないね
ちょっと意味がわかんないんだけど MVC知らんの?
例えるなら アプリ全体=お前の人生 コントローラー=お前の思想 ウ゛ュー=お前の表現力 モデル=お前の脳みそ
馬鹿にはzendは無理。 php自体、mvcをきっちり分離出来ないからねえ。だから大規模サイト構築で問題有りまくり出し。
Multiselect MultiCheckbox Why Checkbox is upper? I should lower it because its not beautiful.
>php自体、mvcをきっちり分離出来ないからねえ。 え?
118 :
nobodyさん :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)からだけ実行できないのが理解できません。何が原因なんでしょうか? つづく
119 :
118 :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()); }
VALUESじゃねの? エラーはちゃんとintegerにしろって書いてあるようにみえるけど。
このスレってさ、5人くらいしか居ないんじゃねぇの? なんか文章の書き方が同じように思える 少々ガラの悪いのが数人って感じ?
>>120 >>118 主キーに同じIDを使ってinsertはできないというエラー
バックアップかdirty更新をやりたいんだろうけど、
同じスキームにしないでコピー先に専用の主キーを振る方がよくね。
てか、重そうだなその処理。バックアップならSQLひとつでいけそうだけど。
あぁ、まぁ書いてるときりがないからこの辺でw
で、自己解決しましたとか言って、なんか関係ない話を理由にするんだよな どうみても釣りw
解決する人は何故か解決した方法は書かない
125 :
118 :2010/02/26(金) 16:21:38 ID:???
答えてくれた皆さんありがとうございます。 いただいたアドバイスを元に突き詰めてるんですが、原因がまだわかりません。 SQLが異常な動作をしてるみたいなので今はそっちの確認をしてますが 解決しなかったらまたこちらで相談させてください。 ほんとにすみません。 ありがとうございました。
どうもここのスレの住人はすぐに釣りだとか決め付けたがるな
スレの住人じゃなくてオレな
128 :
125 :2010/02/26(金) 17:34:46 ID:???
解決しました! 皆さんすみません、よく見たら最後のクエリ処理の後でトランザクションをcommit()してませんでした 最後のクエリのテーブルがMyISAMだからこいつだけ実行されてたんでした。 ありがとうございました。お騒がせしました。
>>127 お前かw
一番上の辺りの、即効釣りとか決め付けてるのもお前か?
結構頻繁に出てくるよなw
>>129 そう
>>4 もオレ
配列のechoがわからない奴がZend_Filter_Inputのエラーメッセージを
設定するとかありえないww
>>128 MySQLならautocommitじゃね
教えてください。以下のように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>
なんか恨みでもあるのか
134 :
132 :2010/02/26(金) 21:41:26 ID:???
自己解決しました。
どうやって?
この流れにワラタw
がんばって。
138 :
nobodyさん :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)); みたいなことをいちいちやってるんだけど、効率悪いと言うか。 なにか上手いやり方ないですか?
Zend_Db_Tableを使うとか
何か面倒な仕様だな。コボル廚か?
やっと2chに繋がったか・・・
Yes, You Can!
チョンにはまいるよ、マジで
チョンも在日チョンもうざいね。
145 :
nobodyさん :2010/03/11(木) 18:03:58 ID:uuGJLteE
Zend_Dbのqueryメソッドで updateやdeleteを実行したときに、それが成功したかどうかを 判断するのはどうやったらいいんですか?
判断ってのは相場が決まってる 返り値で判断するかエラーメッセージがセットされてるの見るかcatchでとっ捕まえるか
selectしてデータが入っているか、消されているかを確認する。
148 :
nobodyさん :2010/03/11(木) 20:42:00 ID:uuGJLteE
>>146 どうもありがとうございます。
僕も返り値で判断したくて試してるんですけど、
$rs =$db->query("UPDATE ---");
var_dump($rs);
したところ、成功しても失敗しても$rsにはオブジェクトが入ってきますよね?
このオブジェクトをどう操作したら成功・失敗が判別できるのかわからない状況です。
無理なのでしょうか
>>147 さんはクエリするたびに判定用のクエリを再度実行しているんですか?
>>148 全クエリのたびになんて実行してないよ。
エラーも例外も発生してないのに矛盾が発生して、DBのログにも何も出ず、
Zend_Dbのプロファイラーでも確認できなかった時とかは、selectして前後のデータを確認する。
エラーが出なくても、データベースの自動変換とかで意図しないデータになることがあるからね。
150 :
nobodyさん :2010/03/13(土) 12:35:39 ID:EhIFVaNI
煽るつもりじゃなくて、真面目に聞きたいんだけど、 Zend Framework ってかなりイケてないですよね? 最近ちょろっと使ってみたんですけど使いにくくて仕方ないです。 このフレームワークそもそも有名なサイトでの使用実績とか全然ないし、 railsと比べた時こっち選ぶ理由が一個も見当たらない・・
フロントエンドまでカバーするフレームワークじゃないからなぁ 裏方ではけっこう使われてるんじゃね
>>149 どうもです。
自分の未熟なせいか良くわからないですが、定期的なメンテナンスの時に
異常を確認したときの検証作業って感じですね
データベースがそんなに不安定なものだとは知らなかったんで、教えてもらってよかったです
日常的なinsertやselect、updateの成功・失敗はどうしたら確認できるのかな
誰か良かったら教えてください
有名なサイトってどのフレームワーク使ってるか公開してる方が少ないと思うが なんで有名なサイトで使われてないと思ったんだ?
採用件数で一番多いのは、どうみてもWordPress
記事が古かろうが基本方針や特徴は3フレームワークとも変わってないけどな
変わってる ・ZFの自動育成はCakeほどではないが、その記事ほど酷いものじゃない。 ・規模についてはまったく的外れではないけど、根拠がない ・スピードはsymfonyとZFではほとんど変わらない。symfonyが遅かったのは昔のこと ・その他の比較はsymfonyもCakeもZFも全部○ まったく特徴をとらえていない。
>>155 その求人、大規模ポータルサイトへの派遣で
経験1年以上の条件で設計からテストまで担当って
典型的な○○請負じゃまいか!
Symfony今でも遅いぞぶっちゃけ 去年の暮れにうちの社のインフラの奴らがベンチ取ってZendに決めてた
ちょっと前のzendはかなり自分でいじらなきゃ使いものにならなかったけど 最近のは結構イケてますよね
な、なに?エイケアって?
>>160 派遣って書いてね?
っても偽装請負なんて茶飯事だけど
単金安いよなぁとか思ったけど,要求スキルも低そうだし残業出るなら
>>165 メルマガってもう流行らないよね
メルマガで当てた資金で開発にも手を出して、
開発のノウハウなんてないけど、人材だけ投入できますよ?
っていうハマりパターンはよくある。
腕に覚えがあるやつはチャンスかもな。
gmailで弾かれて終了だと思うけどな。偽装spamなんだし。 まだまぐまぐとか人雇ってたりしてたな。ヤバくて逃げ出した香具師の穴埋めか?
いや、企業のメールニュース配信は別に廃れてないだろ
メルマガスタンドと勘違いしてるんだろ レベル低いな相変わらず
難でいちいちメールで配信してあげなきゃ成らないの。 rss見て自分でチェックしろよ。
>>169 >>170 レベル低いな相変わらず。
メール自体がすたれるだろ JK
おまいら新しいサービスを作るために開発やってんじゃねーん?
メール配信が金になるってのは、それだけ大量配信に無理があるからだぜ
それでいて、メルアド間違ったり、メルアド変わったり、盗聴されたり
途中で消えたり、ろくなことないからなメールは。
やっぱ何にも解ってないんだなお前は
お前さんは何をわかってるんだい? で、実績は?
zendを取り入れた?らしいsymfony2.x系に期待 今はCodeIgniterを改造して使ってごまかしてる
176 :
nobodyさん :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/'); あと他に状況を記載してほしい箇所があれば記載します。
HTMLソース見る。解決。
いや、重要なのは、エラーコントローラーがないっていう例外 エラーコントローラーを置かないならエラーハンドラープラグインを無効にするべき
179 :
nobodyさん :2010/03/15(月) 15:33:02 ID:S0jC/HjU
>>178 エラーハンドラープラグイン無効にしてみた。
画面真っ白になったからエラーログみてみたけど特にめぼしい情報はなかったー。
こんな風に無効にしたんだけど合ってるかな。
$front = Zend_Controller_Front::getInstance();
$front->setParam('noErrorHandler', true);
$front->throwExceptions(true); はやってある?
181 :
nobodyさん :2010/03/15(月) 19:22:03 ID:S0jC/HjU
$front->throwExceptions(true); はやってなかった! ので、付けたらエラー吐き出されたよ。 どうやらコントローラーの名前を正しく認識していないっぽい感じのエラーでした。 全然別のアクションにとんで全然別のビューを呼んでました。 なんでsakuraにした途端おかしくなったのか結局解明できなかったけれど 飛ぶ先を修正してフォームは動作するようになりました。 ありがとうございました!
工エエェェ(´д`)ェェエエ工 工エエェェ(´д`)ェェエエ工 工エエェェ(´д`)ェェエエ工
そういうことにしたいんだな
symphony 2 (reloaded) は zend fw 取り入れた rad で,速度も3倍って書いてあったよ。
そもそも3倍ってなんの3倍だよ
, ノ) ノ)ノ,(ノi ( (ノし ┐) ∧,∧ ノ いまだ!「通常の」…っと ..|( ( ....:::::::) (  ̄⊂/ ̄ ̄7 ) ヽ lヽ,,lヽ (/ 川口 /ノ ( ) やめて!  ̄TT ̄ と、 ゙i
シャア専用かw
190 :
nobodyさん :2010/03/17(水) 03:17:14 ID:0MVPdABS
localhost/controller/hogeaction と言う感じにアクションにアクセスするとき、あるパラメータがGetもしくはPostで 送られてくることが必須の場合、パラメータの不備を確認するにはどうしたらいいですか? 単純に考えたら$this->getRequest()から値をとって、 if(!$param){ //リダイレクトとか警告表示 } とするんでしょうが、いろんなコントローラのいろんなアクションで共通して使える 必須パラメータの不備確認処理がないか考えています。 (エラーコントローラは存在しないコントローラへのアクセスの制御だからちょっと違うんですよね?…)
コントローラの基底クラスにそういうの付けておくというのは?
必須パラメータがなかったらそのアクションに来てほしくないなら、 ルーターのルートで宣言する アクションで使える共通機能が欲しいなら、アクションヘルパーを作る。 パラメータチェックぐらいなら、おれは Zend_Form
193 :
190 :2010/03/17(水) 11:26:18 ID:0MVPdABS
>>191 ,192
なるほど。意見ありがとうございます。
>必須パラメータがなかったらそのアクションに来てほしくないなら、ルーターのルートで宣言する
これが答えかなーって思ったんですが、これってルーティング設定ってことですよね?
それだと、そのアクションにくる度にチェックすることになるから…
管理画面で、登録済みの料理のレシピがたくさん並んでて、「編集するレシピ名をクリックして編集画面に移動」て
感じなんですよね。
localhost/kanri/recipi?henshu=100 でレシピ番号100の編集画面を表示って感じで、
Getメソッドで必須パラメータを渡すけど、この形式のURLは編集画面のトップ画面に限られてるんです。
(確認画面・修正画面・登録画面へは全部postとセッションでheishu=100も渡すので)
つまり、トップ以外の編集画面は/kanri/recipiの形になるので、これだと教えていただいた
ルーティングで固める上の方法は使えないですよね?
やっぱり編集画面のトップ画面でだけ、個別に必須パラメータ($_GETで)のチェック入れるしかないでしょうか?
ちょっと情報不足でした、すみません。
そのURL形式が必須なら、既存のルーティングで処理するのは難しそう 形式をこだわらなければ現在あるルーティングで目的は達成できるけど、 もし形式を変更できないなら、それにあったルートクラスを書く方が、 オーバーヘッドはないしクリーンだよ
質問させてください
マニュアル(
http://framework.zend.com/manual/ja/zend.db.table.html )の、例27などに出てくる、select()の引数のZend_Db_Table::SELECT_WITH_FROM_PARTというのが分かりません
コレはいったい何なのでしょうか?
自分の持っている本にも載っていませんし、ネットで検索しても良く分かりませんでした
APIでもコンストラクタだという事しか出てこないように思います
いったいコレは何の為に使っているのか分かる方がいましたら教えていただけませんでしょうか?
>>195 Zend_Db_Tableのソース見た?
どこかで定数がdefineされてるはず
>>195 selectオブジェクトを作り、そのテーブル単独でfrom指定する
デフォルトでは、fromは自分で指定する。
symfony2.0はZendFrameworkベース
Zend Framework 2.0はsymfonyベース?
たしかに、 Ruby on Railsって、なんで Rails on Rubyじゃないの?って思ってる
実行速度とか口ばっかで、ろくな実績がない
framework.zend.comが重いか重くないかで判断するのが簡単
大規模サイトに不向きだしねえ。
206 :
nobodyさん :2010/03/19(金) 11:40:36 ID:2j6+t1LQ
モジュール構成での質問です。 ZF1.9.7を利用しています。 端的に言うと、リクエスト時に全てのモジュールのブートストラップが呼ばれてしまいます。 出来れば、ルート直下と要求のあったモジュールの ブートストラップだけ起動させたいのですが、 どう設定すればよろしいのでしょう? ご教授願います。 application.iniで resources.modules[] = 設定し、モジュール別にルーティングされている事も確認できてます。
208 :
nobodyさん :2010/03/19(金) 14:10:39 ID:2j6+t1LQ
>>207 ありがとうございます。
翻訳して読みましたが、よく分かりません…
プラグインでモジュール確認するとか。
やりたいことは、全体のHPの一部のコンテンツにDBを利用した
システムがある。このコンテンツだけ分離したくてモジュールに
しようと考えました。レイアウトも別にしたかったし。
defaultモジュール:HP全体モジュール
appモジュール:dbを利用したコンテンツ
何か良い方法あるのでしょうか?
210 :
nobodyさん :2010/03/19(金) 15:07:32 ID:iYK3Oj1q
>>208 そのブログで書いてあるのは、モジュールを検知して動作するプラグインを書けば?という話
モジュールのpluginsディレクトリにプラグインを置くとautoloadされる。
そのプラグインは現在のモジュール名とリクエストが一致してたら仕事をする。
モジュール別bootstrapでそのプラグインをフロントコントローラーに登録。
そんな感じ。
211 :
nobodyさん :2010/03/19(金) 15:47:42 ID:2j6+t1LQ
212 :
nobodyさん :2010/03/19(金) 16:02:16 ID:iYK3Oj1q
213 :
nobodyさん :2010/03/19(金) 17:30:31 ID:2j6+t1LQ
>>212 下のリソースのロード制限は解りやすいですね。
ありがとうございます。
これは、各モジュールのブートストラップでinit〜作って
呼べばよいですよね?
>>213 えっと、すんません。解説がないんでアレですけど。。
わかりにくいようだったら、スルーしてもらっていいっす。恥ずかしいのでw
下の方は、リソースを必要とするまでinitしないためのものなので、
モデルとかサービスリソースを作ったときに、idleresourcesとしてresourcesと
同じように指定するとスタンバイになって、使われるときに初めて
getResourceでinitされます。
モジュール別に対応するには、上のやつをプラグインとして登録したうえで、
splObserverを実装したクラスならなんでも、モジュール名と一緒にプラグインに
attachすると、プラグインのイベントをupdateメソッドに送ってくれます。
なので、今回のケースだと、モジュール別BootstrapにsplObserverを実装して
updateメソッドで、遅延ロードしたいリソースをbootstrapするとOKなんですけど・・・
215 :
nobodyさん :2010/03/20(土) 10:54:26 ID:ZDcRVlf5
>>214 遅くなりました…
ご説明感謝します。
initしないためのものでしたかw
無知ですいません。
sqlObserverは使ったこと無いので勉強しないと理解できないです…
何となくですが、必要な時に初めてinit〜としてresourceを
生成ってことかなと。
216 :
nobodyさん :2010/03/20(土) 18:42:46 ID:4HvTXNoM
いえいえ、説明がへぼいので(ry
217 :
nobodyさん :2010/03/20(土) 19:24:26 ID:ZDcRVlf5
>>216 またお世話になると思うので宜しくお願いします。
Zend_Db_Table + Zend_Paginatorの組み合わせで使っています。 Zend_Db_Table_SelectにlimitをしてZend_Paginator無視されてしまうのですが何か良い方法はないでしょうか? $select = $db->select()->limit(100); Zend_Paginator::factory($select, 'DbTableSelect'); としてもlimit(100)が無視されてすべてのデータが入ってしまいます。
219 :
nobodyさん :2010/03/23(火) 11:35:31 ID:7nF+H1X7
zend_dbでクエリ実行してる限りは、sqlインジェクション対策は万全なんでしょうか? 自分は名前つきプレースホルダの形でqueryメソッドしているんですが… 今日みたモンベルのサイトがsqlインジェクションで大被害という話をみて気になっています
ZFってほかのFWよりは軽くて早いけれども、それでもZF使わないよりは遅いらしいですがそのサイトを回っていて体感できるほどでしょうか?
体感速度はクライアントのマシンやネットワーク環境にも依存する。 早いか遅いかは自分で確かめろ
作り方にも寄るしねえ。 zf使わなくても重いサイトはいくらでも作れる。pearで逐一sql発行してみたりとか。
10msかかる処理が50msになったとしたら、数値上は5倍も重くなった事になるよね。 でも体感は出来ない。そんな感じ。
質問させてください やっぱある程度の規模の大きさに成長がみこまれるサイトというのはFWは使わない方がいいのでしょうか? 最初ZFなどのFWで構築すると後から変更などで大変になるのでしょうか?
> ある程度の規模の大きさに成長がみこまれる トラフィックとかユーザー数とか複雑さとかデータ量とか、全部コミコミで話をしてるの? 多分、FWを使う使わないというより他に大事なことがたくさんあって、 それ抜きに結論は出ないと思う。
>>225 >トラフィックとかユーザー数とか複雑さとかデータ量とか、全部コミコミで話をしてるの?
はいそうです
>多分、FWを使う使わないというより他に大事なことがたくさんあって
デザイナーとかプログラマーとの兼ね合いとかそういう事でしょうか?
ZFはライブラリ的な一面もあるので他のFWよりは(他のFWは使触ったことはないのですが)柔軟性があるのではないかと勝手に思っているのですが、
例えばPHPじゃなくてJAVAでしっかりしたサーバサイドを作ろうとか、今のこのシステムではパフォーマンスの面や発展性の問題できついものがあるのでもうちょっと改良したい、
といった場合が出たときにやはりFWで構築していると変更に手間取ることがあるのかな、と思いまして
ショッピングサイトとか企業サイトとかはFWで構築しても特に問題はないかかと思いますが、(表現が悪いかもしれませんが)ユーザー志向の動的なコンテンツを提供する場合どうなのかなと思いまして
例えば掲示板とかblogとかを提供したり、フォトサイトとかのようにユーザーがファイルやテキストをアップロードしたりといったサイトの場合です
最初のうちはFWを使用しててもいいと思うのですが、拡張性を考えると自分たちで大変でしょうが最初からPHPを打ち込んでいく方がいいのかなと思いまして
説明が下手ですみません
コミコミでは結論は出ないと思います。 手書きかFWかというレイヤーの話とは違いますよ。
どの程度に成長するかの計画が無ければ判断出来ないしな。 基本作り直し覚悟で模索するしかないよ。経験無いみたいだし。 もしくは成長しなくて金が無駄に成っても最初から、javaで作っておくか。 自分たちでphp素でzfクラスのフレームワーク作れるほうが稀だと思う。
大規模になるならFW使ったほうがいいんじゃない?
230 :
nobodyさん :2010/03/26(金) 01:07:35 ID:0qaztAUz
Zend FrameworkってCGIモードでも動く?
zend server は apache + fcgi
mod_php使わないのか。遅そうだ。
233 :
nobodyさん :2010/03/26(金) 04:07:42 ID:O2gk3ied
この手の話の大規模って、機能規模なのかアクセス規模なのかがまず明確じゃないな 機能規模のことを言ってるなら、間違いなくコーディング規約なりFWなりで縛るのが吉 アクセス規模の事を言ってるなら、単純なRESTのレスポンスにまでFW使うのはどうかな〜と思い始めてる。 rubyでRoRとかpythonで mod_wsgi + 好みのFW とかなら話は別なんだろうけど
rorで大規模とかzfより面倒だよ。
ZendFuckってJavaでいうStrutsみたいなもんだよな。 それだけじゃ使い物にならないところが。
かといってjsp+jdbcでごりごり描いてるのも大変でしょ。 フレームワーク使って、htmlとpearごりごり描くの狩らぬけ出すだけでも導入効果有るよ。
Zend_Config_Iniの話ですが、数値でクオート無しの値を読み込んだ後に Zend_config_Writer_Iniするとクオート付きになってしまいます。 foo = 1234を読み込んで書き込むと foo = "1234"となる 対策法はありませんか?
文字列で統一の方がよくね?
zendを使って作成されたそれなりの規模のソースを配布しているところってありますでしょうか? zendについているソースはすべて見ました。 daoやキャッシュなどをフルに利用した参考になるソースありましたら教えて欲しいです。 ディレクトリの構成やDBコネクション、エラー定義などを参考にしたいです。
243 :
nobodyさん :2010/04/08(木) 18:48:06 ID:hISebTnv
$query->where("column1 = ? and column2 = ?", array('abc', 'def')); こんな感じでzend_db のwhere 関数で?(プレースホルダ)を複数使いたいんですが、うまくいきません。 プレースホルダを複数使うのってできないのでしょうか?
245 :
nobodyさん :2010/04/08(木) 20:21:47 ID:hISebTnv
ソース読んでもわからんかった 教えてクレヨン
$query->where('column1 = ?', 'abc') ->where('column2 = ?', 'def');
247 :
nobodyさん :2010/04/09(金) 10:10:00 ID:TIvOx/xs
あすいません column = 1 and (column2 = 2 or column3 = 3) みたいな場合についてでした。 この場合orWhereを数珠つなぎすると思った通りにならんのです・・ プレースホルダ使わなければなんとかなるのですが。
orWhereとかあるけど、それでも無理?
あぁ、すまん、orWhereって書いてたね > column = 1 and (column2 = 2 or column3 = 3) これ、評価順を考えてみれば、フラットにできるから。 column2 = 2 or column3 = 3 and column = 1 でどうよ。
SQLでは優先順位が AND > OR と定められているはずでは?
最適化エンジン次第じゃない?
その最適化エンジンやばくないか
このスレではよくあること
>>243 実行時は名前付きパラメータで処理されるから、:paramnameとbindを使ってみて
255 :
nobodyさん :2010/04/12(月) 01:13:05 ID:b5cG05fs
Zend_Db_Tableを使用してinsertやupdateをする際に、 $dataで追加するデータを連想配列で指定すると思いますが、 できれば、のちのちの変更も考えて、addParam()などでデータを追加したいのですが、 それようのクラスってあるのでしょうか? 探したのですが見つからずでした。 DbTable_UsersなどとZend_Db_Tableの間に一つ自作のクラスを追加してやるしかないのでしょうか? liveCommerceは連想配列のままでした。 うまいやりかたありましたら教えて欲しいです。
> できれば、のちのちの変更も考えて、addParam()などでデータを追加したいのですが、 そこをもう少し詳しく・・・ それだけじゃ何がしたいのかわからない。
257 :
nobodyさん :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(現在はカラ) 続きます
258 :
257 :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 という形で良いんでしょうか? よろしくお願いします。
259 :
257 :2010/04/12(月) 21:26:30 ID:???
どうにか自己解決できました スレ汚しすみませんでした
secureだから
https:// .example.comだから*.example.com
/somedirだから/somedir*
262 :
nobodyさん :2010/04/17(土) 20:24:51 ID:T3UCpDKa
263 :
nobodyさん :2010/04/21(水) 18:21:04 ID:mfVJoQpI
quickstartとほぼ同じ構成なんですけど、 アクセスURLが /mだったらレイアウトをmobile.phtmlにするって application.iniでは記述できませんよね?ディスパッチャを拡張するとか? しょうがないので今はコントローラの中で $this->view->layout()->setLayout('mobile'); とやってるんですが、そんなもんでしょうか?
264 :
263 :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; }
265 :
nobodyさん :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()の使い方は間違ってますか?
新しいバージョン使いなさい 1.10とか
267 :
nobodyさん :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スレに移動します。
ありがとうございました
>>268 どうもです。
しかし、そこに書いてあることやったんですけどエラー解消しないんですよね
php質問スレに詳細書いたので、気が向いたらお願いします。ありがとうございました
270 :
nobodyさん :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'); でなら目当ての商品情報を取得できるので コンポーネントの設定や動作条件は満たしてるのではと思うんですが…
271 :
nobodyさん :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を使えということなのでしょうか?
それともそもそもマスタファイルへのフルパスを指定することがいけないということで非推奨なのでしょうか?
となるとファイルが更新されたタイミングでキャッシュがリフレッシュされるという事が無くなり、そもそもこのフロントエンドの意味が無くなり、このフロントエンド自体が非推奨になってしまうと思うのですが・・・
>>271 質問なげえよ。master_files使えって意味だよ。
同じ役割だから、小さい方は廃止予定なんだよ。よくあること
273 :
nobodyさん :2010/04/24(土) 04:32:30 ID:6V3fZIph
すみません、誰か
>>270 の質問に意見お願いします。
いまだに原因わからずで… 勝手言ってすみません、気が向いたらお願いします
275 :
273 :2010/04/24(土) 16:15:43 ID:???
>>274 ありがとうございます!
そのページも見てたんですけど、var_dumpで確認すれば万能って思ってました
イテレータって物自体知らなかった… 本当にありがとう!
フレームワーク初挑戦とおもってクイックスタート読もうとしたら英語か・・・目次だけ日本語とかパケ詐欺からよ;; 低学歴は本買えってことか・・・
低学歴はPGやるな
278 :
sage :2010/05/02(日) 10:44:31 ID:KVSpskbJ
>>276 「誰かが翻訳しておいてくれる」のが当たり前のことだと思っているのですね。
去年の「Zend_Application まだ翻訳されていない、どうなっているんだ」や
「公式運営者はもっと頑張るべきだ」発言者のように
そういう考えの人もいるし、考え方は人それぞれ。 翻訳してやってますよ感を出す意味が分からない。
てか去年の話を蒸し返すとかどんだけ
281 :
sage :2010/05/02(日) 12:19:45 ID:Y8fRDT50
同意を得ようと意見を放つも、否定されると「人それぞれだろ」と逆ギレするのはゆとり低学歴の特徴。 自分に理解出来ないことは、理解しようという姿勢すら示さないのも低学歴の特徴。
なんというブーメラン
>>279 お前、海賊版のソフトを平気な顔して使って
「ボッタクリ価格なのが悪い!」
「もともと買う気は無いからメーカーに損は無い!」
「むしろ俺が使う事で知名度が上がるだろ!」
とか言うタイプだろw
翻訳してやってますよとは思わないが、対価も支払う気が無い輩の言うことでは無いわなw
人それぞれで結論づけるならチラシの裏にでも書いてろよw
草の生えた文章は読む気にならん
>>285 お前、海賊版のソフトを平気な顔して使って
「ボッタクリ価格なのが悪い!」
「もともと買う気は無いからメーカーに損は無い!」
「むしろ俺が使う事で知名度が上がるだろ!」
とか言うタイプだろ
翻訳してやってますよとは思わないが、対価も支払う気が無い輩の言うことでは無いわな
人それぞれで結論づけるならチラシの裏にでも書いてろよ
痛い
>>276 >>279 がいると聞いてやってきました。
API Docの英語くらい理解できる程度に勉強しておけば良かったな
目次以外にも訳されてるところけっこうあるよね。 別に英語だけでも困らないけど、やっぱり日本語の方がありがたい。
289 :
nobodyさん :2010/05/03(月) 18:41:49 ID:7alvR5zV
質問なんだけど、みんなサーバのメールソフト,MTAは何使ってる? sendmail?postfix?qmail? zendFWのサービスていうかzend_mailを使うにあたって、3つのうちで特に相性がいいものってあるのかな? zend_mailの利用に関して注意点とかトラブルとかあった? あったら教えてください。お願いします。
互換性気にするなら、sendmailしかないでしょ。
291 :
sage :2010/05/05(水) 00:26:42 ID:/pDwsnJ7
>>289 , 290
290を補足すると、 Zend_Mail_Transport_Smtp 及び Zend_Mail_Transport_Sendmail が
sendmail を前提にしており、他のMTAをカバーするためのクラスは、まだ用意できていなかったはずです
292 :
nobodyさん :2010/05/06(木) 00:26:10 ID:j7c7uMQS
>>290 ,291
ありがとうございます
っていうか、マジで?sendmailしか対応できないの?
Sendmailってセキュリティ設定が難しくて敬遠されがちらしいし、
扱いやすいpostfixにMTAを切り替えてたんだけど、無駄なことしたのかな…orz
やっとインスコ成功したのに…
調べてみます、ありがとう
293 :
292 :2010/05/06(木) 00:45:43 ID:j7c7uMQS
一人で何度も聞いて申し訳ないのですが、zend_mailについてもう一つ質問です。
zend以前の問題かもしれないですが、
ttp://blog.enjoitech.jp/article/201 を見ると、
自前のサーバ上のMTAを使わず、gmailを使ってメール送信できるそうですが、
・自前でMTAを利用する
・gmailで送信する
この二つのメリット/デメリットは何でしょうか?
思いつくのはgmailのダウン時の巻き添えくらいしかないのですがほかに何かありますか?
>>292 >>っていうか、マジで?sendmailしか対応できないの?
SMTP経由すればMTA関係無いんじゃないか?
>>293 ・自前でMTAを利用する
自由に弄れる反面、コストもかかるし維持も面倒。
・gmailで送信する
制限はあるが、コストはかからない。
作るサービス次第だと思うよ。
>>290-292 sendmailつっても、この場合sendmailコマンドじゃなかったけ。
うちはpostfix使っているけど特に問題なく使えているよ。
qmail も sendmail ラッパーあるみたいだし大丈夫だろ
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は日本語では動かない等あきらめたほうが良い等
アドバイスをいただけないでしょうか?
Zend_Controller_Router_Route_Interfaceを実装して オリジナルのRoute作ってるんだけど assemble()ってどういうときに呼ばれるんだろうか? 今のところ何も実装しなくても希望の動作になってるから良いのだが。。 ちょっと調べた感じ、Redirectのときに使われるっぽい? RouterでRedirect?よくわからん。。。
Apache1.3で%7Fが使えなくて困ったときに使ったことあるな。 配列→パス が assemble() で パス→配列 が match() 心臓部分なので実装しなければ(空実装?)使いもにならんはずだが。
grep -r '>assemble' Zend/Controller/ 個人的によく使うのはurlヘルパーかな
>>299 >>300 なるほどthx
Router_Route_Hostnameの正規表現版みたいなのを
作ってルーティングしてるんだけど、今のところ
assemble(){ exit('hoge');}
って書いてても全然呼ばれないのだが。。。
urlヘルパーを使ってないから?
もともとJava-Spring使ってて最近PHP-Zendに移ってきたんだけど
Route_AbstractのgetVersion()をオーバーライドすると
match()のパラメータ型が変わったりするし、なんだかややこしいな。
ていうかRoute_Interfaceの全メソッドにコメントがないし…
インタフェースにコメントないAPIとか初めて見たよ。。
でも逆に勉強になるな。
結局のところ、Zend_mailの文字化け対策はQdmailと併用するのがベストなの? あと、Zend_mailで送信サーバをGoogleにして使うとき、送信者アドレスが Gmailのアドレスになるのはどうしようもない?
303 :
nobodyさん :2010/05/15(土) 16:47:51 ID:9enG3To7
あ、さげちゃった。 age
304 :
nobodyさん :2010/05/15(土) 16:51:16 ID:9enG3To7
× Zend_mailで送信サーバをGoogleにして使うとき ○ Zend_mailで送信サーバをGmailサーバ指定して使うとき の間違いでした、ごめん
みんなの意見が聞きたいです。
私が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を呼び出すようにしています。
ただ、このやり方がどうしてもしっくりこないので、もう少しスマートなやり方を模索しているのですが、なかなかいい案が浮かびません。
みなさんは管理画面とフロント画面があるようなシステムを構築するときは、どんなやり方でやっていますか?
306 :
nobodyさん :2010/05/16(日) 00:33:05 ID:9d3ZuTyk
>>305 ズバリそのやり方してる、俺もなんだかなぁって感じ。
違和感拭えないよね
307 :
nobodyさん :2010/05/16(日) 00:41:06 ID:/nPzlLMd
>>305 application の直下(modules と同階層)に models を置いている。
共通のはそこに置く感じ。
Zend_Application 使ってれば application/models は autoload 対象になるしね。
308 :
305 :2010/05/16(日) 12:51:20 ID:???
>>306 >>307 ありがとうございました。
参考になりました。
Zend_Applicationは確かモジュール毎のiniファイルの記述方法がよくわからなくて、挫折した記憶があります。
もっとよく見てみようと思います。
309 :
nobodyさん :2010/05/18(火) 10:33:48 ID:f5A4YuVy
>>308 307じゃないけど、Zend_Applicationに関係なく、
アプリケーション全体で共有する可能性のあるものは、
applicationの下に置くよ。
静的なリソースは別ね。
ZendFrameworkってセキュリティはどうですか? 例えばgrep()でeval()やpreg_replace(eを使用)してユーザリクエストが混ざっているとか、$_FILESを組み込んだアップロード時に脆弱性が無いかとか、ヌルバイト&Dir遡り攻撃に対処しているかとかです 基本的なXSS、ScriptInsersion、SQLインジェクション、セッションハイジャック対策が全体的なコード中に施行されているのか知りたいです ZFで構築後、また一から各セキュリティホールの確認とか大変だなぁ、と思いまして FWの作者がZendなので最新バージョンはそういうのにほぼ対策をしているとは思うのですが、こういう攻撃には弱いというのがあったら教えていただきたいです
FWレイヤーで対処すべきコードは基本的に対処されてる。 でも、個々のアプリケーションでもケアは必要。 ユーザリクエストにコマンドが混ざるとかはアプリケーションの仕様であってFWは感知すべきじゃない、 セッションハイジャックを防ぐための支援機能はあってもそれを使うかどうかはプロジェクト次第 セキュリティホールってのは開発者が責任を持って対処するべきなんじゃないの? 「大変だなぁ」って思うんなら、FWじゃなくて既存のプロダクトをカスタマイズして使う方がいいよ FWに任せて自分は対処しないって風になると、いくらでも穴は開くからね
セキュリティ対策をframeworkに頼ってる奴とか最悪すぎる
ASP使いには多いけどなw
>>312 セキュリティ対策をFWに頼っているわけではないんだが、例えば(まぁないとは思うが)どこかのコンポーネント内でhtmlspecialcharsとかが入っていない為セキュリティホールになったりしないかということ
そういう場合わざわざソース見て自分で書き直しとかめんどくさいんで
最低限のクォート処理とかそういう事です
>>314 DB系であれば必要な箇所では適切にエスケープされるし、エスケープ方式も設定出来る。
htmlspecialcharsのように場合によっては不要なエスケープは強制されないので、
自分で適切に処理する必要がある。
>>314 まぁ、言いたいことはわからないでもない。
残念ながら、"現段階では"ソースのチェックが必要な気がする。
HTML関連のViewヘルパーでのエスケープはされてるけど、
たとえば、文字コードの指定はロケールを見てるかどうかとか
Viewでエスケーパを指定できるようだけどオプションは?とか。
タグを自動育成するタイプのコンポーネントで穴がないかとか
その辺はやっぱり使うときにソースを確認した方がいいと思う。
perlなんかだと、プログラマーが気を使っても プレースフォルダ使っててもDBI/DBDに問題があったら… 今のとこであったことないけどHTML::FillInFormに問題があったら… DBI,DBDの仕組みも大儀でいえばFWなのでそういった面では FWにセキュリティホール対策は任せたい/任せてる部分てあるよね? とここのところの流れを見てておもいました。
へたれプログラマだと ソースを確認しても信頼性の評価なんてできないから 自分が作るよりはましと考えて信じて使うしかない
319 :
nobodyさん :2010/05/31(月) 13:36:10 ID:iVMHao47
>>299 >Apache1.3で%7Fが使えなくて困った
ZFと無関係な話ですが、どういう意味ですか?
昔作ったシステムが今もApache1.3で動いてるんで非常に心配です。
とりあえずurlencodeは使ってますが、それでも問題が起きることがあるんでしょうか?
知ってる人、教えてもらえないでしょうか?
試せばいいのでは
AllowEncodedSlashesでググレ
322 :
319 :2010/06/02(水) 13:22:49 ID:NqHn07VJ
>>321 ありがとうございました。
調べたところ問題なさそうでした。
/index = IntexController->indexAction(); /hoge = IndexController->hogeAction(); とルートしたい場合、独自Routerを書かないと駄目でしょうか? 設定で対応出来るものでしょうか?
staticでもregexでもrouteでもいける
325 :
sage :2010/06/06(日) 10:36:36 ID:???
奈良県人と高野豆腐が大嫌い
326 :
nobodyさん :2010/06/09(水) 16:15:06 ID:zdg5Ro52
お世話になります。 Zend_Session::rememberMe() をログイン画面でログイン成功時に使用しています。 引数には1800秒を指定しているのですが、 この場合、ログイン成功してから1800秒間 セッションが有効になるのでしょうか? ログイン後の次の画面で Zend_Session::start(); を呼んで、ログインに成功しているかどうかを判断しているのですが、 Zend_Session::start();をコールしただけでは セッションの生存期間はリセットされないのでしょうか?
327 :
nobodyさん :2010/06/11(金) 12:51:52 ID:1eqyNkqt
過疎ってる?
zfコマンドて皆使ってる?
一番最初にディレクトリ構造作るときしか使ったことない。
delete がないから使いづらい
自分も最初にディレクトリ構造作っったものをコピペで済ましてるわ。 ローカル環境にPHPいれてZF最新版いれて・・・ってやる程恩恵あるのかなと疑問に思ったんだけど、 覚えなくてもいい感じかね。
332 :
nobodyさん :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) をどう解釈したら良いのかわからない… 誰かアドバイス頼みます
333 :
nobodyさん :2010/06/14(月) 22:17:48 ID:+e+bNGnA
>>332 $results を foreach で回す。
foreach ($result as $k => $v) {
var_dump($v);
}
>>333 どうもありがとう、自己解決したよ
searchのオプションで'ResponseGroup' => 'Medium',指定しないと必要な情報が
そもそも取れないのを気づかなかった
アドバイスもサンキュー
335 :
nobodyさん :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です。
336 :
326 :2010/06/16(水) 16:42:17 ID:XZSSnjmG
前回の質問で回答をいただけなかったのですが、 どなたかご存知の方はいらっしゃらないでしょうか。
まさかこの一週間ずっと待ってたのか
338 :
326 :2010/06/17(木) 11:07:21 ID:???
>>337 色々と試行錯誤しながらも
皆様からのご意見をお待ちしておりました。
現状まだ解決しておりませんので
ご意見いただけると幸いです。
ワロタww
>>338 セッションの生存期間を延長したければ、もういちどrememberMeをコールしたほうがいいよ。
341 :
326 :2010/06/18(金) 00:18:45 ID:???
>>340 ご回答ありがとうございます。
できれば、一度ログインして
タイムアウトもしくはログアウトをするまでは
同じセッションIDを使用したいと考えています。
rememberMeを呼ぶとセッションIDが書き換わるようなので
ちょっと困っています。
同じセッション間でユーザがどのように
ページを遷移していったかログをとりたいのですが、
その時に識別するキーにセッションIDを使用しています。
セッションIDを使うのではなく、別の一意のIDを用意するべきでしょうか?
なんで小出しにしたの
>>341 > セッションIDを使うのではなく、別の一意のIDを用意するべきでしょうか?
はい
セッションハイジャックも考えて内部で別の値で保持せよ という神の啓示セヨ
345 :
326 :2010/06/19(土) 12:24:02 ID:???
>>343 344
ありがとうございます。
それではセッションID以外の一意のキーを用意するようにします。
rememberMeもあまり多用すると、パフォーマンスに影響するという
情報もありましたので、要所要所で使用していきたいと思います。
rememberMe()ってクッキーの有効期限を操作するものだと思ってた。
347 :
nobodyさん :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()とかのメソッドを利用してクエリ結果を簡単に確認出来るけど トランザクション時の方はわからない。 どなたかアドバイスお願いします。
>>347 トランザクションの時も同じだよ。
commit()はあくまで処理を確定する為のメソッド、
実際に処理が行われるのはquery()メソッドなので、
その戻り値(Zend_Db_Statement_Mysqli)で処理結果を取得すればいい。
>>348 おお、レスありがとう。じゃあ、トランザクション処理としてfor文で
クエリ($rs=$db->query($hoge))を10回繰り返すとしたら、
$n = $rs->rowCount(); とか $rs->errorCode();とかの処理も
10回for文の中で繰り返さなきゃいけないわけだよね
しょうがないけど、効率悪いような… ともかくありがとう
>>349 それはZendじゃなくてSQLの仕様だよ
10回クエリを投げるなら、10回期待した結果が得られたかどうかキチンと判定しないと、
commitもしくはrollbackが出来ないだろうさ
commitしたってことは各回のクエリに失敗は無かったってことでしょ? たとえば5回目でinsertするカラムの数と値の数があわなかったらエラーで rollbackされるわけだよね? 逆に言えば複数回のクエリ(トランザクション利用)の「全体としての成功/失敗」程度しか 確認が必要じゃない時は commitできたときはtrueをreturn、rollbackのときはfalseなりエラーメッセージをreturnで 検証完了と割り切っちゃって良いのかな
>>351 >commitしたってことは各回のクエリに失敗は無かったってことでしょ?
>たとえば5回目でinsertするカラムの数と値の数があわなかったらエラーで
>rollbackされるわけだよね?
これは逆じゃない?
commitする前にクエリが正常に完了したかどうかを自前で判断して、
OKであればcommit、NGであればrollbackを行うべきかと・・・
SQLクエリ自体が通ってしまえば、commitは出来てしまうので、
commitが出来た=全体として成功って判断は危険だと思うよ。
>>353 そのサイトの超絶簡単サンプル1だね。
サンプルでは「SQLクエリにエラーがなかった場合、処理は成功」としているけど、
例えば「行を削除するが、テーブルの行が5件未満になってはいけない」みたいな条件がある場合、
単にSQLクエリが成功したかどうかで判断するのは難しいよね。
例)DELETE句自体に問題は無いのでcommit()出来てしまう。
$db->beginTransaction();
try {
$db->query("DELETE FROM tableName");
$db->commit();
} catch (Exception $e) {
$db->rollBack();
}
これではマズイのでcommit()を行う前に、
自前でDELETE後の行数を確認する必要があるわけだ。
>>351 空港でチケット止めたり、ICカードシステムが止まるような仕様だよそれ。
普段はうまく行ってるけど、実はバグってて見えないだけ、を隠蔽してる。
356 :
351 :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件以下になってはいけない云々みたいな条件が無い時でもこういう処理が必要なら
トランザクションの説明全部にそう書いてて欲しかったなぁ… ずっと誤解してたよ
>356 途中でエラーが出た場合、ループを抜けないと無駄なクエリを発行する事になってしまうので、 ループ部分はこんな感じでもいいと思う。 for($i=0;$i<$loop;$i++){ if($db->query(insert 〜)->rowCount() != 1) throw new Exception('クエリの結果がおかしいです><'); } >トランザクション 簡易カートシステムを設計してみると理解し易いかもよ。 1回の処理で、在庫確認、発注処理、決済処理が発生して、 1つでも失敗した場合はrollbackを行う。みたいな。
複数のクエリを不可分に実行しないと全体としての整合性が保てないときに、 その不可分なクエリをまとめるのがトランザクションで、 含まれるクエリ全部が成功するか、あるいは何もしなかったことにするか、 どっちかの結果しかない。(中途半端な成功はデータの不整合になる) 特に指定しなければ、1つのクエリが1つのトランザクションという扱いになってる。 というのがオイラの理解。
359 :
351 :2010/06/21(月) 00:14:59 ID:???
>>357 おお、素早いレスありがとう。
その例だとわかりやすいし、よく銀行の出金〜入金を例にしてるけど
そういうサンプルでも出勤処理と入金処理それぞれのクエリ文2つ並べてるだけで、
それぞれの結果をチェックしてるのみたことないよ
だからcommit処理ってエラーチェック自体したうえでcommitしてるものだと思ってた
まあZendFWと関係ないレベルで申し訳ないです。
勉強になりました。ありがとう。
360 :
351 :2010/06/21(月) 00:16:48 ID:???
>>358 こちらもありがとう。
もう少しトランザクション調べるよ。ほんとにありがとう。
>>359 いや、つーか惜しかったんだよ。
commitが成功するか、否かじゃなくて例えば100件個別にインサートするのに
100回実行した後で、インサート件数が100件じゃなかったらrollbackする、
つうまとめてチェックなら一般的に用いられてる。それでも失敗した件数
(出来ればとれが失敗したか)をユーザに知らせる親切設計にするんだけどね。
まぁTwo phase commit とかsave point経験すると、この辺は呼吸するみたいに
当然の仕様になるんだが、、、金融系だと1円のミスでも塵積で賠償問題に
なっちゃうからね。
なんだこいつw
最近PostgreSQLの新機能覚えて言いたくて仕方ないんだろ
は? ツーフェーズなんて10年の昔からあるだろ。 お前ら程度だとまっさきにバグるだろうがな。
ここPHPのWebフレームワークのスレだよね?
>金融系だと1円のミスでも塵積で もうこの一言で程度が知れるなあ 気の毒に
じゃあDB抽象化すんなよ
PostgreSQLじゃなきゃ最近基本情報の勉強でもしたんだろたぶん じゃないとこの流れでいきなり2相コミットの話なんて出ようがない
SAVE POINT使おうが使うまいが全然関係ない話じゃん rollbackもしくはcommitしたあとの結果の話なんだから 2PhaseCommitに至っては全く持って話と関係ないし
出来ないPGの特徴 議題が読み取れないのに、聞いてもいない自分論を喜々として語る。 その内容も大抵は誰の得にもならない、意図不明な物が多い。
今や銀行やクレジットのシステムもZend_DBが使われてるんですね!
1.10.6
373 :
nobodyさん :2010/06/24(木) 08:49:30 ID:j4+/2c3l
zendで日次batch処理をしたいのですが、検索に出てきませんでした。 bootstrupに登録したdbの情報も使うので、単純にapplication/batchを作ってスクリプトを再生して起動しても、 bootstrupを通らないので、うまくDBなども使えません。 コントローラーを使うかのようにバッチを使いたいです。 やり方が記載されているページなど有りましたらおしえてほしいです。
>>373 バッチ用のBootstrap&Dispatcherを作ればいいと思うよ。
面倒なのであればバッチからWEB呼び出しちゃえば?
file_get_contents("
http://xxxxx/xxx ");
375 :
nobodyさん :2010/06/25(金) 01:30:49 ID:AQc08b3W
ZFPlanetとWebf_Controller_Router_Cli
Saasesみたいな安くて使い勝手がいいVPSが出てきた今、 無理してPHP使う理由なくなってきたなぁ
えっ
えっ
無理してPHP使うってどういう場面だよw PHPしか動かないレンタルサーバなんてまず滅多にないだろ
俺はZend Frameworkを使いたいからPHPを使ってるけど、PHP自体にはあんまり興味ない。
何でZendFramework使いたいの? PHPの中では便利だけど、PHP以外でなら選択肢は山ほどあるだろうに。
どんな便利な選択肢があるんだ例えば Railsとか死ぬほどクソだったわ
1.Kohana 2.SAStruts 3.Zend 4.Catalyst 5.Click って感じだな俺の評価は RubyやPythonはそもそも言語的に微妙 やっぱPerl、PHP、Javaでまとまっちゃうわ
>>383 PHPしかつかったことないWebプログラマなんだけど
RubyやPythonの方が言語的に微妙って
どの辺からそう感じるんだろうか
自分がPHP使ってて苛々することが多い上に
RubyやPythonの評価見てると逆だと思ってた
商売として微妙という意味じゃないかな OOP流行りだからPHPは言わずもがな使い辛いとなる ただ言語仕様守らない人にとっては何使っても一緒
RubyはPythonってのはマイナーだけにそれが好きで使ってる人しかいないから評価が高いだけ 好みに合わなくても無理矢理使わされる人が殆どいないからいい評判ばかり聞こえてくる
前は Java(Servlet)+SpringMVC+Velocity+Jakartaいろいろ を組み合わせてやってたけど、ちょっとしたサイトつくるときに レンタルサーバで動かせないから PHP+ZendFrameworkに移行したんだけど 上記の組み合わせとほぼ同じ感じで出来てるから満足してる。
あ、でもパフォーマンスはやっぱりJavaServletのほうがいいかな。 コンテナ起動中はApplicationスコープに変数保持してられるし、 PHPでもmemcachedとか使えばいいんだろうけど、手軽さが全然ちがう。
というわけで、常に専鯖使える環境だったらJava使うかなあ。 Apacheプロジェクトで良質なFW・ライブラリが選り取り見取りだし。
>>386 勘違い乙。
だいたいRubyやPython使ってる連中は他言語を使ってる。
ちゃんとつかって
>>383 みたいな評価するのは超少数派。
というか使ってるかどうかすら怪しい。
え?
個人的な使い心地で言えば、 手軽さと利便性はPHP、言語仕様としてはRubyを評価するかな。 PHPの気持ち悪い点 ・namespaceの区切りがバックスラッシュ ・無理矢理っぽい無名関数 ・try catchにfinalyが無い ・goto文 ・引数の型チェックが中途半端(stringとか指定出来ない)
Pythonには勝てん。
気持ち悪さで言うと一番気持ち悪いのはRubyだろ。
Perlの事も(ry
RubyはDelphiっぽいだけで気持ち悪くはない 気持ち悪いけど
Javaは気持ち悪さはないけど面倒くさい ていうかここZFスレね
399 :
sage :2010/07/03(土) 00:16:16 ID:???
1回だけPHP全般的なコト書いちゃうけれど try catch の finaly は確かに欲しいね。 Ruby の入門書を見て便利だなと思ったのは、各文字列オブジェクトごとに文字エンコードをプロパティーとして指定できるところ。
PHPのtry catchってpythonみたいに既存のどんなerrorでも捕まえられるわけじゃないのね
errorを捕まえるためのものじゃないからね
てか、ZFと関係ないしw PHPの初心者スレか、自分のブログに書いたらいいよ
ZF使って1つのサーバーでそれぞれ独立したサイトを 2つ以上立てようとするとキモくなる、なんで?
ZFは君を映す鏡
俺がZFで作ったサイトになら抱かれてもいいと思えるのはそういう事だったか
>>404 うちはVirtualHost別にmodule振り分けるRouter自作してやってるよ。
いい感じに疎結合になるし、管理も楽。
host名で振り分けるルートはもともとあるけど、Routerを自作する理由はなに?
>>408 Zend_Controller_Router_Route_Hostnameだと、
:hoge.fuga.com
とかやると:hogeが省略出来ないとか、
あと他にも理由あったような気がするけど
正規表現でHostnameマッチできるRouter自作した。
あ、あとmuduleにRouteされたときだけ module用のPluginが登録されるようにした。
>>409 どのくらい複雑なHOST名にしてるのか知らないけど、
Hostnameでも複数ルートを登録できるから、その程度の理由なら自作しなくてもいいな。
他にも理由があったと言う他を思い出したら教えて
>>410 はプラグインとZend_Applicationで処理するのが常道だけど、
Routerに書いてんの?Routerでプラグイン登録?まぁ、いいけど。
>>411 あ、RouterでPlugin登録してるわけじゃないよ。
Module別Bootstrapはあるけど、
Module別Pluginが欲しかったから
Routeされた段階で遅延登録されるようにした。
Host数=Module数は30個くらい?で、
その中でもさらにサブドメイン(?)をパラメータにして
いろいろやってた。
ちなみに今のバージョンでどうなのかは知らない。。
あとroutesの設定ファイルがXMLで route要素もextendsとか多用してて複雑になってたから 標準のRoute_Hostnameだと 対応できなかったから自作したんだっけかな?
そうだ思い出してきた。 まず正規表現でHostnameからパラメータ取得したかったのと、 その際にPunycodeをデコードしたかったんだった。
なるほどねー おれだったら、正規表現はmod_rewriteで済ませて、 デコードはルーティングに入る前にプラグイン処理だな。 もしくは、RouterじゃなくてRouteで。 まぁ、Routerでもいけるだろうけど。
ぷに〜コードのデコードめんどくさくてフレームワーク放棄した俺とは大違いだ(笑)
よくPlugin作ってdispatchLoopStartupに認証や共通処理をうんぬんって見るけどさ、 画像のリンクが切れてるだけでdispatchLoopStartup何回も走るとかうぜぇ・・
「画像のリンクが切れてるだけ」と事前に判別出来るなら、 dispatchする前に別処理へ移行すればいいだけの話だ
>>417 mod_rewriteで対処でしょ jk
Zend_FormでsymfonyにあたるsfFormのsetNameFormatってどうやったらいいの?
421 :
nobodyさん :2010/07/22(木) 09:02:40 ID:8xnHx2ro
初心者です。 ネットとかみてZend_Fromを勉強中ですが、デコレーターとかのファイルを どこに置いていますか? Contoroller内?????
フィルタじゃね
なぜか1.10.7がダウンロードできた
1.1から2.0は簡単に移行できるの?
2.0ってnamespaceとか使うから 簡単にはいかないんじゃない? 使わないの?
どうも。 MySQLを使用してるのですが、単純なサブクエリを実装して、 ZendFrameWork経由でデータを取得しようとしたのですが、 取得できませんでした。 発行しているSQLをコマンドラインで実行すると ちゃんとデータを取得できました。 ZendFrameWorkってサブクエリが使用できないなどといった 制限があったりするのでしょうか?
427 :
426 :2010/09/01(水) 17:14:57 ID:1WzgUIV/
すみません。 バインドも使っています。
「できませんでした」の詳細を書かないとわからんわ
バインドされている値が間違ってるとかじゃね?
430 :
426 :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変数を複数個使っているのが原因でしょうか?
無知な私に救いを。
よろしくお願いします。
431 :
nobodyさん :2010/09/02(木) 22:02:42 ID:VdyJTTz3
>>430 実際の呼んでる所のコードも書かないと分からんよ。
>>430 SQLエラーやPHPエラーは出ていない?
Zend_Db_Profilerやらで、Zend_Dbから発行されているSQL文を検証してごらん。
あ、自己解決しました。
434 :
426 :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で出力される情報を
バインド変数で指定している箇所に埋め込むと
しっかりとレコードが取得できました。
ホントにちんぷんかんぷんチンプイワン太夫です。
どうぞよろしくお願いいたします。
>colB5=bind2 普通にここ、コロンがないよね
436 :
nobodyさん :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()); } つづきます
437 :
436 :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の知識以前の話になっているかもしれませんが、すみませんが ご意見よろしくお願いします
438 :
nobodyさん :2010/09/07(火) 10:34:39 ID:an1mTvTq
Zend FrameworkのMVCモデルを使ってます。 エラーになった場合、ほとんどのケースで 'Invalid controller specified (error)' のエラーメッセージしかでなくてどのが悪いのか みつけるのにすごく時間がかかるのですが、 これが普通なのでしょうか?
設計が悪いとしか。ソフトの勉強した事無いでしょ?
440 :
nobodyさん :2010/09/07(火) 12:48:16 ID:an1mTvTq
>>439 工夫しないとそうなるということですね?
それについての資料などありませんか?
441 :
426 :2010/09/07(火) 12:56:14 ID:???
>>435 すみません。その箇所は転載時の発生した誤りになります。
実際はしっかりと「:」を入れているので、
SQLの構築でのエラーも出ていない状況なんです。
なんとも不可思議な感じです。
442 :
nobodyさん :2010/09/07(火) 13:40:25 ID:jaTKXsd6
443 :
nobodyさん :2010/09/07(火) 13:41:23 ID:QU8+yQCW
>>441 DB側でログ取って、どんなSQLになっているか見てみて
>>438 エラーコントローラーを無効にして、エラーを表示したらいいよ。
444 :
nobodyさん :2010/09/07(火) 15:07:59 ID:an1mTvTq
>>442 ,443
ありがとうございます。調べてみます。
>>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();
446 :
426 :2010/09/11(土) 16:05:36 ID:???
>>443 SQLにも問題なさそうでした。
副問い合わせのバインド変数の名称に
別のものを指定すると、こちらの期待通りの動きになりました。
釈然としませんが、とりあえず、プレースホルダの名称を別のものにして
やっていってみたいと思います。
447 :
nobodyさん :2010/09/15(水) 06:29:22 ID:c+gNv7dN
>>446 DB側でログとってないでしょ。
うまくいったときと、いかないときと同じSQLが発行されているわけがない。
スペルミスでした、って正直に書けないのかな
いちいち余計なこと言わないと気がすまないのも面倒な性格だな。俺とかw
ZFをやるならdwooも覚えたほうがいいよ zendは公式サイトで解説してるほどdwooを押してるからね
dwooってなんて発音するの?
ドゥヲゥ!!
452 :
449 :2010/09/17(金) 12:21:09 ID:???
公式と言っても、そのサイトはPHP関連の技術全般を紹介するブログみたいなもので ZendがDwooを特別にプッシュしてるわけではないのでは?
Vikram Vaswaniさんがこういう使い方もできますよって紹介記事書いてるだけだな SoftwareDesignとかWeb+DB Pressの記事みたいなもんだ
>>449 それ言ったらsymfonyだって解説してたわけだが
>>449 それ言ったら公式ドキュメントにはSmatryViewの作り方まで載ってるぜ
457 :
nobodyさん :2010/09/18(土) 03:15:59 ID:HoVONag+
質問なんだけど、リクエストオブジェクトで $_FILESに当たるものを取得するにはどうしたらいいの? 無理なのかな。無理だとしたらどうやって取得すべき? getParam('picture')とかやったんだけど無理だった。すみませんが教えてください
Zend_Form_Element_File を調べて、関連記事から他人がどうやってるか見るよろし
459 :
nobodyさん :2010/09/19(日) 00:06:18 ID:uSiTgTXw
>>458 ありがとうございます
しかしzend_formって扱いにくいんで使ってないんだけど、$_FILESの制御のために導入するなんて…
みんなzend_form使ってるの? そんなに便利?
460 :
nobodyさん :2010/09/19(日) 00:27:48 ID:iCptYkYB
馬鹿にはzendは無理。
>>457 -
>無理なのかな。無理だとしたらどうやって取得すべき?
Zend_Formを使っていないのであれば、
リクエストオブジェクトを継承した$_FILESも取得出来る子クラスを作るのが良いかと・・・
(もし必要であれば、その子クラス中でZend_Formを使えばいいし)
Zend_OpenIdの TODO: OpenID 2.0 (7.3) XRI and Yadis discovery がなくなってたから、 yahoo.co.jpやmixi.jpでログインテストしてみたんだけど、 エラーになっちゃう・・・ まだ対応してないのかな?
ところでさ、Zend Framework とその後ってぶっちゃけどうよ おれもそこそこ使ってきたけど、新規案件で使うべきか迷ってる 使うなら、2.0を試すべき?
>>464 今まで使っていて新規案件で使わない理由は?
オートロード楽チン ブートストラップ書けば大抵どうにかなる ビューが無駄に適当でPHPそのまま 中のクラスが単体でも呼べる 外部モジュールのラッパークラスが多い 粗結合いいとこ取りだけどなんかperlぽい気がするんだよね
>>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>
468 :
nobodyさん :2010/09/23(木) 02:52:30 ID:az/C8i5M
>>467 View Helper 使えばいいんじゃね?
えっフォームの部分だけSymfony使うの?
ZendFormはオブジェクト組み立ててバリデータだけ使ってる
>>470 symfony使わなくてもフォームだけ抜き出して使える
>>465 リリースタイミング的にphp5.3もしくは6でメンテ&追加開発していくので、
そのメリットを生かせるFWにしようかと。
え?PHP6て白紙になったやつだけど?
そうだったね。ってことでphp5.3なんだけど
476 :
459 :2010/09/23(木) 16:26:48 ID:???
>>467 smartyと組み合わせてる。
zendformとsmartyが共存出来るかわからないけど、
smartyで自前の関数用意して
<select name="prefecture">
{$val|selecterChk:"prefecture"}
</select>
とかなんとかやって呼び出して解決する方法になれすぎちゃってzendFormに
入れなくなっちゃった。
477 :
nobodyさん :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です。
とりあえず、quoteIntoの返り値を見てみたら? で、9行目ってのはSQL文の9行目じゃね?
479 :
477 :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行目じゃね?
納得です。
生成されたクエリ文を表示する方法はないんでしょうか?
480 :
477 :2010/09/23(木) 18:55:24 ID:???
すみません、解決しました。 詳細は下らな過ぎて書きませんが自分の凡ミスでした。 一つだけ気になってるんですが、Zend_dbクラスでの deleteメソッドで生成されるクエリ文を 確認する方法はないんでしょうか? Zend_db_tableのselectメソッドだと __toStringを使って出来ますよね? それに似たものはないのかなと…
>>476 なるほど、既存のリソース(pluginだっけ?)を生かせるし、そういうのはありですね。
偏見かもしれないけど、ZendのFormはせっかくPHPが柔軟な言語なのに、
なんか無理矢理オブジェクト指向にしてる気がする。
まあ確かに利点もあるとは思うけど、場合によってはデメリットも目立つよね。
べた書きなら数行で済むような簡単なフォームでもZendFormだと数十行になっちゃう事とかあるし。
特にSmartyと組み合わせる前提なら、ZendFormとは相性が悪いし、デメリットばっかりになりそう。
>>480 実行後でいいなら、profilerでできる気がする
$profiler = $dbAdapter->getProfiler();
var_dump($profiler->getQueryProfiles());
俺はdbAdapter直接触るような場合はいつも直接SQL作成して
$dbAdapter->query($sql);
でやってる。
これなら実行前にdumpなりなんなり出来るし。
adapterって実行したクエリを全部保存してるの? 状況によっては、すごいメモリ食いそうだけど
>>483 あ、factoryメソッドのオプションでprofile = trueみたいに指定する必要はあるね。
いつも開発環境では常にtrueにしてるから気づかなかった。
485 :
nobodyさん :2010/10/09(土) 15:33:32 ID:1KEL8kwG
質問です zendDBでinsertなりupdateなりdeleteなりが正常に処理できたか確認したいんだけど みんなどんな方法でやってますか? しらべたらrowCountを見つけたけど、他に方法ないですか?
何を持って正常と判断するかは、ロジック次第なので何とも・・・
487 :
nobodyさん :2010/10/09(土) 17:37:49 ID:c5ynP6XY
過去レス読めばいいのかもしれんけど、ちょっと知りたい事があります。 今までフレームワーク無しでPHP使ってきたんだけど、最近ZendFrameworkを使ってみようかと思っています。でも、いまいち踏み切れません。(CakePHPのほうがいいのかな? と思ったり) ZendFrameworkのメリット/デメリットを教えてもらえませんか?
>>487 CakePHPにZendFramework組み合わせて使うのは?
489 :
nobodyさん :2010/10/09(土) 18:53:54 ID:1KEL8kwG
>>486 単純に、insertならちゃんとデータが登録されたか、updateなら変更されたか
そういうことを確認したいんです
それが確認出来るメソッドというか機能は備わってないんでしょうか?
>>487 かなり偏見かもしれないが、良くも悪くも
・CakePHPはウェブアプリケーション開発のためのFW
・ZendはPHPプログラムのためのFWって感じで、PEARの集まりみたいな感じ
web開発するにあたって、cakeならすんなりできる部分も、
Zendなら色々classを呼び出すなり、子クラス実装するなりしなきゃいけなかったりする。
Zendの方がハードルが高いのはまあ間違いない。
とりあえずcakeはormがしょぼい。
493 :
nobodyさん :2010/10/09(土) 22:27:33 ID:v6/8xFVg
>>488 ,
>>491 ありがとうございます。
CakePHPとZendFrameworkは思想そのものが違う感じなんですね。
使いやすさを除いた、たとえばWebサービスや通常のサイトを作ったときの速度はどうでしょうか?
もちろん、それぞれの規模やプログラマ/エンジニアの腕によって大きくばらつくのはわかりきってるのですが・・・
どうしても「フレームワーク=ソースコードが太る」というイメージがあるので、実際に使って開発した感想も聞きたいです。
PHPプログラムはZendFrameworkの方が向いているということなので、一旦はZendFramweorkに挑戦してみたいとは思いました。
繰り返しの質問になりますが、よろしくおねがいします。
場合に寄るから自分で試せよ
>>494 数年前と比べて、最近はハードウェアが高性能化してるからな・・・
「フレームワーク有りと、無しでは実行速度が2倍違う」と仮定しても、
0.01秒が0.02秒になるようなレベルで、体感速度は変わらない。
開発チームがフレームワークに慣れれば開発効率は数倍跳ね上がる。
コード肥大化による動作速度の低下を下げたいなら、
その人件費をハードウェアにつぎ込む方が低コストかつ、運用も楽。
そんな感じ。
CPUの高性能化は頭落ちしてる。
ごめん。頭打ちだった。
>>494 人にもよるだろうけど、開発が早いのはcakeだと思うよ。
簡単なプログラムつくるならFW使うとソースは増える。
>>497 VPS十台借りても1万くらいだし
最初は一台で作って
重くなってきたら役割ごとに分割
それでも重いなら並列化
って感じで増やしてけば対した問題じゃない
もちろん、負荷、売上がちゃんと整合性取れる範囲の話だがフレームの問題じゃなくなる
ケースに因るんだ。本当に負荷の高いサイト、FacebookなんかはPHPをHipHopでバイナリにしちゃうし、Yahooはロジックをエクステンションに追いやってる。 ZendとかCakeとか、この手のPHPのフレームワークは負担が大きいので使わない。
>>502 ケースに困る?
YahooとかFacebookとか・・・君の請ける案件はそんなに大規模な案件ばかりなのかい?
多分、ここにいる人の大半は数人〜数十人規模の中規模開発者だと思うよ。
困ったなw
どこまで釣りかわからなくなってきたorz
うち5人で作ってるEC+アフィリのサイトだけどWebサーバ10台クラスですげー高負荷だよ キャッシュサーバとか検討してるレベルだし
因みに、Yahooでも5〜10人程度の開発チームが1サービスを担当する。 それぞれのチームが働きやすいようにもろもろ準備してるだけ。 しかも高付加なのはトピックとかの上位10%ほどのサービスを除けば、 中の下のエンジニアでハードウエアで済ますっていう世界だよ。 ま、おれはその中の下より下なわけだがw
>>496 >>499 >>502 >>503 いろんな意見ありがとうございます。
エクステンションの書き換えとか追加はまあ出来るんですけど、PHP全体の挙動を詳細に解析したことがあるわけじゃないので、思わぬ穴ができそうでやりたくないんですよね。
ハードの性能がある程度あれば、通常の開発規模では気にしなくていいことがわかりました。
実際にサービスをリリースして運用を開始してから、もし問題があればフレームワークの排除等も検討してみます。
ありがとうございました。
509 :
nobodyさん :2010/10/13(水) 17:49:35 ID:9/s0PB03
>>506 zend全く関係なくて申し訳ないんだけどアクセス数とCPUとメモリ教えてくれない?
>>509 アクセス数についてだけど、トピックに上がった記事で人気があると、
だいたい秒間200アクセスを超えてく。
CPU、メモリについては聞いてどうするな世界だな。
サーバーはごく普通のレベル。
自前のDCにDELLとかの平均的なサーバーを入れてるだけ。
サーバ1台当たり20アクセス/sでアップアップなのかよw
どんなサイトかしらんけど適切なハードで、ちゃんと設定したら半分も要らなそうだな(笑)
>>511 > サーバ1台当たり20アクセス/s
そんなこと、どこに書いてあるの?
あぁ、わかった。ポインタミスだw
>>510 なんでお前が俺の書き込みに答えてるんだよw
具体的な数字は言えないけどやってくるのが殆どアフィリタグ踏んでくるアクセスだから
DB書き込みやらんとならんし結構重いんだよね
むしろWebサーバってよりロードバランサやSSL処理の方が厳しい感じなのでサーバのCPUなんかは持てあましてる
10台用意してるのはどっちかというと障害対策や不意のピークのためだから
平時はピークでもせいぜい50%くらいしかリソース使わん
MVCのサンプルがふんだんに見れるサイトないのかなぁ。。 海外とかでもいいから知ってる人いたら教えて
_______ __ // ̄~`i ゝ `l | / / ,______ ,_____ ________ | | ____ TM | | ___ // ̄ヽヽ // ̄ヽヽ (( ̄)) | | // ̄_>> \ヽ、 |l | | | | | | | | ``( (. .| | | | ~~ `、二===-' ` ===' ' ` ===' ' // ̄ヽヽ |__ゝ ヽ二='' ヽヽ___// 日本 _____ _____ ______ _______ | ウェブ | | イメージ | | グループ | | ディレクトリ |  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ._________________ |MVC sample │・検索オプション └────────────────┘・表示設定 | Google検索 | I'm Feeling Lucky | ・言語ツール  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ◎ウェブ全体から検索 ○日本語のページを検索
MVCの切り分けってサンプル必要なくらい難しいか?
>>515 それって結局はZendFWがボトルネックにはなってるわけでは無い、って事だよな?w
520 :
516 :2010/10/19(火) 09:19:22 ID:???
いや実はMVCの切り分けを学びたいとかじゃなくて、 うまい人がどんな書き方(わかりやすさ・メンテナンスのしやすさなど)してるかを いろいろと知って取り入れられるものはないかという探究心から聞いてみただけなのでないならないでいいんです。
皆、デフォルトコントローラー群にprefixってつけてる? IndexController と書くところを ModuleName_IndexController ProjectName_IndexController のように冗長に。 PDTで複数プロジェクト編集する時にクラス名が被るとコード補完が厄介なんだ・・・ 何か上手い方法ないかね
>>521 Controllerをコード補完で呼び出すことなんてあるか?
>>523 コントローラ内でメソッド呼び出すとき、
$this->hogeXXXで保管しようとしたら、
他のプロジェクトの同名コントローラのメソッドがでてきちゃうんじゃね?
>>524 ControllerにAction以外のメソッド書くってこと?
private でも他のメソッド出てきちゃうんだっけ?
526 :
nobodyさん :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だめだった。
2.0から対応するんだと思う
>>525 コントローラ固有だったり、サイト全体で使うようなショートカットメソッドを登録する事があるんよ。
$this->log(); とか $this->getXxx() みたいなのを・・・
privateにしててもクラス名が同じだと補完対象にされてしまう。
コントローラにアクション以外書くのってまずい?
別に君がそう書きたければそれでいいと思う
$this->log()はログの発行元が追跡しやすくて良い
アクションコントローラーにActionメソッド以外のメソッドって 結構いろんなサンプルとかでやられてるよな
privateメソッド限定なら補完の必要性もあんまりないから 放置したほうがいいと思う。 $thisで同名他クラスのメソッド出てきちゃうのは そのうちPDTのほうで対応されそう。 heliosで親クラスの補完が変だったのもSR1で改善されたし。
533 :
509 :2010/10/20(水) 17:08:16 ID:goNec+dl
>>515 質問したの俺だよ、答えてくれてありがとう
サイトの運営ってプログラム書ければ良いワケじゃないんだね、
わかってたけどトラブル発生時の対応とか考えると大変だわ
みんなはプログラム書く以外にシステム設計とかもやってるの?
>アフィリタグ踏んでくるアクセスだからDB書き込みやらんとならん
これってアクセス解析のためだよね?
うーむ、勉強になったよ
>>531 >>532 Zend_Controller_Actionのコード見る限り、
普遍的なメソッドはController自体に登録してあるしね。
>>535 _fowerdとか_redirectとか他にも色々、てかコード読めよw
Actinは xxxAction って命名規則があるんだし、
ActionCtonroller = Actionのみを記述するものでは無いってこった
>>536 それがなかったらコントローラじゃないだろ?何言ってんだ
>>537 別に?無くてもコントローラとしては機能するよ。
俺がいいたいのは、コントローラにはアクション以外定義するのはおかしいなんて事は無い。
それだけだ。
ああ、MVCのコントローラとZend_Controllerの実装の話が噛み合ってないわけね
ついでに言うとそれらはルーティングを行うための基底コントローラに実装されているメソッドであって 自分がそれを継承して作るコントローラに、アクション以外の(コントローラから逸脱する)ロジックなり処理なりを実装するのは MVCの考えに反するよ。 てかZend_Controllerを見たらAction以外のメソッドがあるから定義しておかしくないなんてのは余りにも短絡すぎ 無かったらユーザがActionだけ書いて動くわけないでしょ
きっちりしたのはzendに任せるとして ユーザは好きなように使えばいいのさ
>>539 MVCの思想としても_fowardをアクションコントローラに実装する必要は無い。
例えばZFで言えばヘルパでもいい。
>>540 最初から全てを書くとは誰もいってなくね?
Action間で共有するメソッドやログ出力ショートカット程度しか言われてない気が。
>>536 各ControllerでActin以外に独自メソッドいろいろ書いてたら、
将来的なZFのバージョンアップで拡張されたときに
不意なオーバーライドしちゃって動かなくなりそうで怖い。
間に1サブクラスかませてそこでやるならまだしも。
>>543 Zenc_Controller_Actionを継承した基底コントローラは最低限用意しておく
各コントローラは基底コントローラを継承しておく
全体で必要なら基底コントローラ、
コントローラ固有ならそのコントローラに書く
という感じかな。
オーバーライドしてしまって動作しなくなるケースって相当希だと思う。
PHPにもJavaみたいにアノテーションで@Overrideとか指定出来れば良いのにね。
そこまで厳密にやるならもうJavaか.NETやれよみたいな話になるんじゃないの?
>>545 アノテーション自体は定義出来るし
ランタイム時にReflectionクラスで取得する事も出来るので
必要だと思うなら自分で作ればいい
作ってるうちに
>>546 と同じ答えにたどり着くと思うがw
いやいや、そこまでの話じゃないよ。 単に @deprecated とかPDTでも対応してて便利だし、 そのレベルであれば良いなあって。
549 :
nobodyさん :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" 回答お願いしますー
550 :
549 :2010/10/22(金) 15:13:38 ID:qwjMjkx8
あ、すみません。情報がたりませんでした どうせ画面の表示はないのだから/schedule/delete.tplを用意していないのです。
>>540 >無かったらユーザがActionだけ書いて動くわけないでしょ
動く。ルーティングを行う為の基底コントローラ(ZFではDispatcher)側の実装の問題だ。
MVCの考え方とやらに従うのであれば、Action以外にもCに実装するべきロジックは多々ある。
それを基底クラスに書くのか、別クラスに書くのか、その実装方法自体はMVCの思想には含まれていない。
555 :
549 :2010/10/23(土) 02:37:46 ID:???
>>551 ,552
お恥ずかしい。ありがとうございました
継承ってすればするほど重くなるのかな? ある程度はキャッシュされるとしても体感しない程度に重くなってる?
>>554 Dispatcherはコントローラだろ 何言ってんだ
>>557 だからCに関するロジックであれば、Zend_Controller_Actionに実装しようが、Dispatcherに実装しようが、他のクラスに実装しようが、
MVC思想とは関係無いんで
>>540 の発言の意味がわからねーんだわ。
>>558 >>無かったらユーザがActionだけ書いて動くわけないでしょ
>動く。ルーティングを行う為の基底コントローラ(ZFではDispatcher)側の実装の問題だ。
Cに関するロジックが無くても動くってどういうこと?
>>559 Zend_Ctonroller_ActionにAction以外のメソッドが無くても、
Dispatcherなり、どこかしらに実装しておけば動くって事。
>>540 ではAction以外を定義するのはMVCに反すると、
意味不明な書き込みがあったが、Cに関するロジックであれば何処に書こうが何ら問題は無い。
むしろ共有ロジックはActionクラスに書くことをZFは推奨(
>>553 )している。
>>560 >Zend_Ctonroller_ActionにAction以外のメソッドが無くても、
Zend_Controller_Actionには_forwardや_getParamや_redirectなど
たくさんAction以外のメソッドがあるように見えるが・・・?
>>556 バイトコードキャッシュとか使ってない環境だと
どのくらい影響あるんだろうね。
PHPでもJavaみたいにInterface多用して設計したいけど、
実行時の無駄な処理が気になる。
本番環境ではInterfaceのチェック処理を
無視する設定とかあるのかね?
ZFでも結構多用されてるってことは、ほとんど影響ないのかな?
>>562 >>564 君たち話がかみ合ってない。
要はZend_Ctonroller_Action継承した基底Controller作って、
共通の処理はそこに実装。
※出来ればinit()やらpreDispatch()の中だけで済ませる
それを継承した各Controllerで個別に呼び出したい処理は
ActionHelper作る。
でいいんじゃない?
オーバーライド用に容易されてるメソッド以外に、
各ControllerでAction以外のメソッド書かないといけない必要性って
ほとんどないような。手っ取り早いけど。
>>565 ヘルパーブローカを使うとPDTでコード補完出来ないのが不便なんだよなぁ、
どこかしらに @return アノテーション付でgetter定義しておかないとならんし・・・
自分の場合、
プロジェクト基底コントローラ
→ アプリケーション基底コントローラ
→ モジュール基底コントローラ
をそれぞれ継承して作っておいて、
Controllerに共通プロパティやショートカットメソッド定義してるわ。
>>565 >各ControllerでAction以外のメソッド書かないといけない必要性って
>ほとんどないような。手っ取り早いけど。
Controller固有のロジックやプロパティを外部化する必要性もほとんど無いからね
臨機応変に最適な手法を取ればいいと思うよ
無闇に肥大化させるのは好ましくないけれど
将来Zend_Controller_Actionと競合するかもしれないという理由で
実装コストを上げてしまうのは同意し辛いな
プラグインからアクションヘルパーを呼ぶ方法ってありますか? アクションコントローラを作るたびに同じアクションヘルパーを呼ぶ記述書くより プラグインに共通で書きたいと思ったのでやり方を探しているんですが見つけられません。
570 :
nobodyさん :2010/10/30(土) 15:35:08 ID:CCVX4Qsq
各クラス(コントローラ)の中のアクションがありますが、 これを再利用する方法ってないんでしょうか? というのは、たとえば入力フォームのアクションだったらバリデート処理が書いてるけど 同じようなフォームの時、ほとんど中身変わらないのに同じようなのをもう一つ書くのが面倒なんです 具体的に言うと nikki_addアクションとnikki_rewriteアクションとか。。 新規登録時でも書き換え時でもバリデータは同じだけど、アクションを2つに分けると 中身同じなのにもう一つ書くことになって面倒くさいと… 何か良い方法ないですか?
バリデート込みのフォーム定義をアクション外に括り出せばいい
>>570 難しく考えなくていいよ。
コントローラにnikkiValidateメソッドを作って、
nikki_addとnikki_rewriteから呼び出せばいい。
もしそれが気持ち悪いのであれば、Nikkiクラスでも作るなりして、共通処理をまとめればいい。
アクションにバリデート書くとかMVCの意味なくね?
MVCの概要を説明する文書がどれもわかりづらいっつーか、 不明瞭な書き方するからいけないんだよね。 モデルに書けそうなロジックは全部モデルに記述するように試みればまず間違いない。
コントローラ内で局所的にしか使わないようなロジックであれば、まぁいいんでない。 汎用性とか徹底したMVCとか考えるとキリが無い。 要はケースバイケース。 コストに見合った実装すればいいよ。 RDBだからとテーブルを無闇に極限まで正規化しないだろう?
>>575 いやまあ、そうなんだけど、そういうと馬鹿はコントローラに全部書いちゃうから。
コントローラに書くことなんてほぼ無いのに。
577 :
nobodyさん :2010/10/30(土) 18:44:20 ID:CCVX4Qsq
>>571-576 おおー、ありがとうございます。
そうですね!共通利用するんだから両アクションから呼び出せばいいんだ
なんで思いつかなかったかなー
ありがとうございました
コントローラって名称に毒され過ぎだよね。 極端な例だけど、以下のようにロジックがきっちり分別されていれば、 同クラスだろうが、同ファイルだろうがMVC実装は可能。 class Application { public function controller() {} public function model() {} public function view() {} }
えっ
デザインパターンに実装方法は定義されてないからね ファイル、クラス、メソッド、好きな方法で区切ればいい
お前は何を言ってるんだ
いやそもそも同じクラスに違う目的のものを突っ込むのが オブジェクト指向的に間違いなわけで
ああクラス名を MVCにした方が解りやすかったかな。 OOP的にも、MVC的にも問題無いと思うよ。 絶対やらんけど。 class MVC { public function controller() {} public function model() {} public function view() {} }
クラス名がMVCってその時点でもう破綻してるだろw 自動車をオブジェクト指向で表す場合に EngineWheelStealingってクラス作るようなもんだぞw
ワロス
普通は複数の機能が乗るわけでそうなったらどうすんだ? AMVCとかBMVCってクラスができるのか? それじゃmodelとcontrollerまで対じゃないと破綻するよな それともa_controller() b_controller()って増やしていくのか?
えっ
例えの話に何ムキになってるの・・・怖い・・・
>>585 Car extends EngineWheelStealing
・・・はい?w
>>578 ってオブジェクト指向もMVCもZendの使い方も一つも解ってないんだろうな
理解の範疇を超えると煽る事しか出来ないです><
自分はあんまりオブジェクト指向原理主義者じゃないけど、 is-aとかhas-aとかなんかそういう基本的なところのセンスがとても悪いと思う。
これはひどい初心者
class DqnCar extends Car implements AeroParts
発想は面白いがそれは英語的にもOOP的にも違うなw
このスレは独創的なオブジェクターが多いなw
オブジェクト指向っつっても、主観次第で変わるからなぁ・・・
600 :
nobodyさん :2010/11/01(月) 23:04:15 ID:EIHh7aSp
zendframeworkで、携帯とPCでviewを分けたい場合 どの部分で、振り分け処理を記載してらいいですかね?
基底コントローラやinitメソッドからの呼出でいいんじゃない?
602 :
nobodyさん :2010/11/02(火) 00:02:44 ID:yTnsmEW2
>601 ipで、振り分けようかと思ってるんですが PEAR::Net_IPv4を使って、Bootstrap.phpで使用していいか悩んでます。 その後の、viewの振り分けもわからないですけ。。。
俺は邪道だと言われるかもしれないけど、拡張子を変えてる。 パソコンはphtml野間まで、携帯はhtmlに設定。 同一アドレスで同一サービスが提供可能に。
>>602 Bootstrapで携帯かPCかを判別して、
何らかの方法(FrontController、Request、Registry、etc)でControllerに渡せばいい。
振り分け方法はケースバイケースだが、面倒でなければ携帯用のViewクラスを用意するのが望ましい。
>>603 何故に拡張子?
テンプレートディレクトリで切り分けた方が良いんじゃね?
bootstrapなんでもありだな
本来Bootstrapはアプリケーションを初期化したり、 状況に応じて設定を変更したりする為のものだからな・・・ 可能なら MobileBootstrap.php を作って、 リクエストを受け取る index.php でip判別して、Bootstrap自体を振り分ける方法もありかと。
俺は同じコントローラなのがかなり不便だからコントローラから分けてる。
表示内容とか含めてPCとモバイルでコントローラが同一でいいなら
>>603 の方法を使うと思う。
controllerの親クラス作ってそこでやってるわ俺
俺もそれだわ、だってPCと携帯で同じアクション使ったりしてるもん。 今見たらinit()でこんな事してた $this->_helper->layout->setLayout('mobile'); $this->view->setScriptPath(APPLICATION_PATH.'/views/scripts-mobile');
>>609 それが一番美しいやりかたかと思う。
ただしinitは複数回呼ばれる可能性があるので、気になる人は初期化済か否かのチェックをいれるなりした方が良い。
611 :
609 :2010/11/02(火) 15:59:56 ID:???
よく似たのがあると思ったら、なんと以前このスレに俺が自分で質問してるじゃあないか
誰も返事してくれてないしw なんかちょっと恥ずかしいぞ。
>>264 bootstrapでレイアウトを手動初期化する方法も書いてある
Zend_Http_UserAgentってIPアドレス判別とか出来るのかね・・・ クラス名も微妙に輪っか利辛いなぁ・・ Zend_Mobile_Deviceとかで良かったんじゃね?
IPで判別とか日本ローカルなんだからお前らが作れ
Java屋です。次案件でzend frameworkを使った開発をするのですが hibernateやiBatis, S2Daoのような標準的なORMはいくつかあるのでしょうか?
なんでぐぐらんの?
617 :
615 :2010/11/03(水) 11:35:27 ID:???
>>616 ぐぐってから聞いてる?
自分はぐぐってから書いてるよ。
じゃそれで分かるじゃん
ググってわかったら書かないでしょ
そうかすまんかった。まぁ頑張ってくれ。
おお。応援ありがとう。頑張るわ
ORMは山ほどある。 標準的が何を示すのか不明だがZFならZend_Db_Tableあたりだ。
そもそもhibernateやiBatis, S2Daoは標準的なORMじゃないので
624 :
nobodyさん :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) どうしたらいいんでしょうか? 検証処理は外部化しつつ検証エラーの時のリダイレクトまで実装したいです。 意見よろしくお願いします
エラーの時返り値返せばいいのでは
>>624 ・editAction側でリダイレクトさせる方法
if (!paramChk($checkAry)) $this->_redirect('/error/pt/paramerr');
・paramChk側でリダイレクトさせる方法1
paramChk($checkAry, $this); // $this(コントローラを引数で渡す)
function paramChk($ary, $controller){};
多分、前者の方が好ましい。
(paramChkもグローバル関数では無く、何らかのクラスに隠蔽すると尚良い)
コントローラを外部関数に渡すとか初めてみたw
redirect処理含めて外部関数に隠蔽したいなら、なんらかの方法で渡すしか無いだろうw
629 :
624 :2010/11/04(木) 11:44:09 ID:???
>>625-626 ありがとうございます。
なるほど、確かにエラーの時にfalse返してコントローラでリダイレクトの方が
あとあと便利そうですね!
「if (!paramChk($checkAry)) 」こういうの思いつかないのでホント聞いて良かったです
>paramChkもグローバル関数では無く、何らかのクラスに隠蔽すると尚良い
これはなぜですか?
>>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;
}
}
俺はパラメータチェックはアプリケーションではなくアクションの仕事だと考えて アクション内で $this->reqParams('y', 'm', 'd'); 基底コントローラ内で public function reqParam() { foreach (func_get_args() as $arg) { if (!$this->hasParam($arg)) { throws Hogehoge_Parameter_Exception(); } } みたいなことやってたよ
Javaやってた自分からすると、メソッドの中で func_get_argsとか、array渡してextractとかやって 可変引数を扱うのにいまだに馴染めないんだけど これらってバッドノウハウじゃないのかな?
>>632 可変引数はPHPにおいてはバッドノウハウでは無く、割と一般的なテクニックかと。
個人的にはfung_get_args()よりarray渡しを使うけど。
#extractは使う場面は思い浮かばない。
extractとfunc_get_argsを同列に語るのは さすがにPHPの経験不足が露呈しすぎだぞ
>>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では無茶なやり方ではないのかな?
まあ、フレームワークでやってるってことは一般的なのか・・・
その例では$name, $value, $attribsを元に戻してるだけ 引数が限られているなら危険性もないし、逐一コード書くより統一性が取れて開発効率も上がるから使ってるんだろう
637 :
624 :2010/11/05(金) 01:38:03 ID:FPhbRDb9
>>630 >他にparamChkという関数が存在していると不具合が出ちゃうから
なるほど、納得出来ました。paramChkクラスを作ってみます。
>if ($diary->isValid()) $this->_redirect('/error/pt/paramerr');
これは、ifの()の中ってこれで良いんですか?
trueを返す条件でエラーのリダイレクトにならないですか?
自分凄い勘違いしてるのかな
他の人の意見も勉強してみます
ありがとうございました
>>637 >>if ($diary->isValid()) $this->_redirect('/error/pt/paramerr');
>これは、ifの()の中ってこれで良いんですか?
ごめん。 if (!$diary->isValid()) だね。
639 :
624 :2010/11/05(金) 02:50:10 ID:???
>>638 おお、良かったです
こんな時間にありがとうございました
array渡しはJavaScriptでもよくあるし JSONやXMLとの親和性もいいんじゃないか?
オーバーロードが出来ない言語ではよくある手段だね。
>>641 単に引数の個数が可変の時に使ってるだけじゃね?
>>643 普通は無尽蔵に可変なら配列で渡すし、
引数の数や型よって処理が変えたいのであればオーバーロードする。
PHPはオーバーロードが無いから仕方無い。
>>644 extractとfunc_get_argsのどっちの話?
>>645 func_get_argsの話。
単に不特定多数の値を渡すだけなら配列渡しの方が見通しが良い。
func_get_argsは、引数の数をチェックして振る舞いを変える為にあるイメージ。(疑似オーバーロード)
まぁ好みの問題だろうけど。
いや不特定多数の引数を渡す時のための関数だともうよ
不具合の温床になるから、 配列渡しの書き方を省略したいだけなら array() でくくった方が良いと思う。 IDEとの相性も悪いし。
不具合ってどんな不具合?
何故オーバーロードという概念があるか考えれば解るよ。 逆にarrayで囲わない理由は何だろうか?面倒だから?
なんだよ例出せないんじゃん
>>651 うーん。そもそもオーバーロードの概念が無い人には説明し辛いんだが
function hoge($array) {}
function hoge($string, $string) {}
function hoge($string, $array) {}
という感じで、同名関数だけど引数によって処理が変わる場合に使うのが望ましいだよ。
ここまでは解る?
fung_get_args()で配列を受け取りたいだけならarrayを受け取る関数一つでもいいよね?
function hoge($array) {}
ここでまでは解る?
オーバーロードは本来、
受け取った引数の型や個数によって処理を振り分ける場合に有用なんだよ。
PHPじゃなくてプログラミング言語自体の基礎がついていれば普通は理解出来ると思うが。
オーバーロードの例出してどうするw func_get_argsがオーバーロードを実現するための関数だという根拠は何か そしてそれを使うとどういう不具合が発生するのか を聞いてるんだけど
どっちかっていうと、Cでいうところのstdarg的な使い方を目指してるんじゃね?
引数の型や個数を見て処理を振り分けるのはオーバーロードとは違うと思う。 オーバーロードは、引数の型や個数を関数を区別する情報の一部として扱うことで、 それぞれ別個の関数を定義する仕組み。 実行時に引数を見てシミュレートすることはできるだろうけど。
「ここまでは解る?」とか痛すぎる
どっちが良いかなんて、ケースバイケースじゃね? 引数を実行時に組み立てたいなら配列しかないだろうし、 printf的な使い方なら、いわゆる可変引数の方が直感的だろうし。
>>658 え?
>>653 の上下どっちに対する回答?
オーバーロードの話も不具合の話も書いてないけど
>>660 マニュアルのコメント欄まで嫁。
配列渡しを拒む理由も書け。
>>661 User Contributed Notesはユーザが勝手に追加するコメントだよ?
逆にいうとそこ載っているという事こそ、標準の使い方でないことの証明。
しかも数十件ある中で1件しかそんなこと書いてないからPHPユーザの中でもそんなことしてるのはマイナーと思われる。
>>662 >逆にいうとそこ載っているという事こそ、標準の使い方でないことの証明。
なんねーよw
func_get_argsが直接バグを生み出す訳では無い
・関数の内部処理を見ないとパラメータの扱いが解らない
・タイプヒンティングが使えない
・IDEによる補完機能が使えない
・バージョンによる挙動の違い
という制約が結果的に潜在的なバグを生み出しやすいって事だよ。
それらを踏まえて、単に複数パラメータを渡すだけならarrayを使い、
オーバーロード的な振る舞いを行いたい時にfunc_get_argsを使えば良い。
で、頑なに配列渡しを拒む理由は何なの?
func_get_args()、検索したらZFの中では60箇所使われてた。
いくつか見た感じ、ZFではオーバーロード的な振る舞いを狙った使い方はしてないかも?
ただ
>>663 の
>単に複数パラメータを渡すだけならarrayを使い、
>オーバーロード的な振る舞いを行いたい時にfunc_get_argsを使えば良い
はわりと同意。
>>664 ありがとう。
検索してみたけど、確かにオーバーロード的な使い方はしてないね・・・(sprintf系が多い?)
個人的にIDEに洗脳されつつあるので、可変引数は毛嫌いしてたけど、
ちょっと引き出しが増えた気分だよ。ありがとう。
666 :
nobodyさん :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); } もっと効率的なやり方ないですか? またそもそもこの方法に穴はないでしょうか。 発生したエラーをログに残すのに効率的な方法を探してます。
トランザクション失敗Bでロールバックしなくていいの? あと何のDB使ってるか知らんけどidに0入れてauto incrementになるのかい 効率的といってもコード量なのかメモリ量なのか実行速度なのか可読性なのか開発効率なのか保守性なのか 何を重視するのかによる
>>663 > ・関数の内部処理を見ないとパラメータの扱いが解らない
> ・タイプヒンティングが使えない
> ・IDEによる補完機能が使えない
それって全部arrayでも同じじゃないの?
>>670 なんでと言われても・・・同じじゃない。
なんじゃそりゃ
>>672 >・関数の内部処理を見ないとパラメータの扱いが解らない
これは少々語弊があるね・・・
パラメータの扱いではなく、必要なパラメータが関数の宣言を見るだけで解る。
(func_get_argsにすると内部処理を見ないとわからない)
(PHPDocに書けば別だが、IDEは認識出来ない)
>・タイプヒンティングが使えない
arrayは使える
>・IDEによる補完機能が使えない
引数定義しておけばパラメータ補完機能が働く
以下コード例
function hoge(array $array) {}
function hoge() { $array = func_get_args(); }
674 :
nobodyさん :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以前の問題かも知れないけどアドバイスお願いします
メソッドオーバーロードを標準でサポートしてるメジャーなスクリプト言語ってないよな。Perl6がサポートするみたいだけど。 引数が多くなってきたらハッシュで渡すのが、メソッドオーバーロードのないスクリプト言語での常套手段だと思う。
そういうのはオーバーロードできる言語でもハッシュで渡すんじゃね?
Zend_Paginator でページ移動をするviewで、 ページのエレメントではないチェックボックスやテキストボックスの状態を ページ移動後も維持したいのですが、 方法が分かりません。ページ移動すると初期状態にもどります。 Zend frameworkに何か仕組みはあるのでしょうか?
移動前にサーバ側でパラメータ持ってればそのまま引き継がれるはず。 クライアント側で変更したなら当然Javascript使わなきゃだよ。
すまんちょっと訂正 viewscript内のhrefって基本は自分で書くようになってるやん。 維持するのもリセットするのもあんた次第。 維持する項目が多くてPC用ならセッション使うのが普通。
681 :
nobodyさん :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); } } のように、コントローラ側に値を渡すにはどうすれば良いのでしょうか
bootなんちゃら使ったことないから間違ってるかもだけど $this->getInvokeArg('bootstrap')->foo
なんかもうフレームワークとかワケワカメだわ いちいち必要なモジュール読み込んで 手続き書いていくだけでおなかいっぱいだよ・・
>>683 その手続きの先にある馬鹿げた繰り返しを防ぐためのものだから
もう少しだけがんばれ
上の方にも書いてあるが、引数をハッシュにするとタイプヒンティングが利かなくなって、それが問題。
686 :
nobodyさん :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ファイルで与えてやればコード書かなくても勝手に作られるようになってる。
>>685 /* @var $name ClassName */
を駆使すりゃどうにでもなるだろ
まぁ無駄なコードは増えるが
タイプヒンティングもオーバーロードもやらないで柔軟に開発するってのが元々のPHPの設計思想だろ だからハッシュだとか可変引数だとかの議論はナンセンス
思想なんて変わってんのに、もともとのPHPの設計思想なんかに縛られてる方がナンセンス。
>>687 それはタイプヒンティングでは無い。
>>688 そんな事は名言されていない。
思想時に無かった故に、継ぎ足しされてカオスなコードになっているだけ。知ったか乙。
>>689 縛られてなんかないよ。
PHPでもやろうと思えばできる、やってもいいしやらなくてもいい、
ただ元々の設計思想が違うんだからJavaと同じようにできるわけがない、だからPHPがどうとかJavaならどうとかいう議論自体が無意味。
むしろ、OOP的に書かねばならないという方が凝り固まっているよ。
>>690 明言されてたら無条件に従うのか?w
思想時って何かよく分からないけど、上述の通りスタートが違うんだから仕様が違って当然。
カオスになって付いていけない?Perl的な書き方もC的な書き方もJava的な書き方もできるようにしましょう、ってだけの簡単な話だと思うが。
別に使うか使わないかはユーザの自由だよ。
まあ
>>688 はナンセンスって言ってるだけで
議論の価値そのものを否定してるわけではないだろうし
そうしてる間にも俺はオナ禁してるわけで
694 :
nobodyさん :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
たしかブートストラップのリソースプラグインあたり
695 :
nobodyさん :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') );
>>691 PHPそのものはともかく、ZFでは基本的にOOP推奨な気がするけど。
>むしろ、OOP的に書かねばならないという方が凝り固まっているよ。 むしろ、フレームワークって凝り固めてブレを減らすためのツールじゃないの?
反応ないな(´・ω・`) リードオンリーなら2番目の return new Zend_Config($this->getOption('oreore')); 禿げしく推奨
フォーム表示用のアクションと 検証を行うアクションを別にするとどうもしっくり来ない 検証エラーがあった場合に表示させることを考えると同じメソッドにした方が楽だけどそのへんどう?
700 :
nobodyさん :2010/11/14(日) 12:36:29 ID:cYG57qWr
BootstrapでGET、POST取得する方法ないのん?
Bootstrapの_init***で $this->bootstrap('Request'); がなぜ使えないという事を聞いてるんですか? 普通に $_GET や $_POST 使えばいいのでは
>>679 >>680 返事ありがとございます。
保存したい値を追加したURLへリダイレクトするようにします。
706 :
nobodyさん :2010/11/15(月) 16:55:25 ID:5FHMT34S
Zend FrameworkでPDO_Mysqlを使っております。 最後にデータベースに格納したauto_increment_idを取得する場合、 last_insert_id()に値する関数はありますか? (ちなみにZend_Dbを使っております)
>> 706 こんなふうに DbTable でやっています。 $this->insert($data); return $this->_db->lastInsertId();
708 :
nobodyさん :2010/11/15(月) 19:35:02 ID:tul9B6Yr
Zend触り始めたけど結構活発で良かった エラーの質問ですが An error occurred Application error と出てエラー内容が出ないのですが、どこで設定できるのでしょうか 宜しくお願いします
710 :
nobodyさん :2010/11/16(火) 07:53:24 ID:Rh5mS6i1
>>709 あちがとうできました!
お陰でエラーの原因を突き止めやすくなりました
>>708 .htaccessかhttpd.confに
SetEnv APPLICATION_ENV development
>>709 そうだったんですね。orz
情報ありがとうございます。
ZFのModuleって使えそうで使えないな… 該当モジュールにルーティングされようとなかろうと、 常に全モジュール初期化されるって仕様はどうなの。 モジュール別にPlugin動かしたりしたいのにわけわからなくなるだろ・・・ 意味なくね?
逆にモジュールごとに初期化するのメンドクサってのがphperのレベル。 豪にイラズンバゴウに従え。
モジュールは構成が複雑になるだけで、使い勝手微妙だよな・・・ というかZend_Controller系全般が微妙
>>695 亀ですまんが、モデルからFrontController参照するのは筋が悪いと思う。
モデルの単体テストが難しくなる。
サービスロケータでも作ってモデルインスタンス取得を初期化し、
そこでセットしてあげるのがいいんじゃないかな。
単体テスト時はsetUpでセットしてあげれば良いし、
モックをセットするようなことも簡単になる。
おおそういう意見を待ってたのよ。でもまあ議論したいわけじゃなくて だいたいこうやっときゃ齟齬ないよってのが知りたいだけなんだけど。 たしかにモデルからFrontController参照するのは都合悪そうですな。 やっぱモデルのコンストラクタに必要なリソースを入れるのが普通ですかな。
>>700 Bootstrapでリクエストオブジェクトを使うには、自分でリソース化しなきゃだめ。
やり方はリファレンスガイドのZend_Applicationあたり参照。
リクエストオブジェクトってリソースって扱いじゃないみたい。
フロントコントローラで作られて、ルーター、ディスパッチャやコントローラーで共有してるって感じ。
その編の単体テストとか考えてプログラミングしてる香具師がphpの場合は皆無だしなあ。 htmlやjavascript並にちゃんと表示されて動けばいいジャンで終わってるし。
字面だけだと解りにくいし どっかに日本語で講義してるサイトとかあればいいなぁ
ZFってプラグインとかプラグインリソースとかコントローラーとか、 シングルトンだと思ってたらinitが何度も呼ばれてたりしてよくわからん。。
oopはinit呼ばれまくりなのは基本。ウザイならクラスを上書きすれば。
723 :
nobodyさん :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; ?> としても何も出力されません。 なぜ出力されないのでしょうか?
$this->layout()->header = $this->view->render('index/header.phtml');
725 :
nobodyさん :2010/11/27(土) 15:38:07 ID:PanI73UW
>>724 さん、ありがとうございます。
しかし、何も表示されないです・・・・。
$this->header = $this->view->render('index/header.phtml'); <?php echo $this->header; ?>
>>722 わかって端折って書いてるんだろうけど、字面どおりだとなんだかなーなかんじ。
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");
}}
リファレンスのアクションコントローラーのとこ嫁 _forwardはinitじゃなくてpreDispatchで使う仕様。 無駄を省くためわざとそうなってんのかな。
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();
すみませんちょっと説明不足でした。 既存のアプリケーションのリソースやコントローラーを利用して コマンドラインからほげほげするというものです。
>>730 いいね。
もっと試してみてレポよろしく。
733 :
728 :2010/12/03(金) 19:24:14 ID:zaEZnwnp
そうだったのですね、知りませんでした。どうもありがとうございます。
ZendFrameworkを習うのに、お勧めのチュートリあったら教えてください。
英語わかるならyoutubeに動画がある
掲示板を作ってるんだけど、ログインした人のみ投稿できるようにしようと思う。 zf固有の質問でなくて申し訳ないが、WEBアプリの一般的なロジックとして、 投稿時に投稿内容と投稿者キーをDBに挿入する為には投稿者キーはcookieで保持し続けるのだろうか?
なんで偉そうなの?
>>736 先生!CookieにはセッションID以外いれ無いと思います!
739 :
734 :2010/12/05(日) 06:34:05 ID:???
>>735 見てみました。
でも超英語ですね。
全然理解できませんでした・・・
ともあれ情報ありがとう。
よお!!みんな!! 736だぜ!! Zend_Authですべて解決した。 よい子はちゃんとドキュメントを読むように!! 以上だ
>>740 頼むからそんなんで解決とかやめてくれ…
フレームワークは楽をする為のものであって
原理知らずに出来ちゃう便利な道具じゃないんだよう
せめて、Zend_Authの挙動を理解してから使ってくれよ
>>738 最近は暗号化してCookieに全部放り込むのもありだな
ガラケー死ぬけど
741>> って言うんだったらお前がさっさと教えてやれよ
そのアンカーのつけ方流行ってんの?
743>> まあ落ち着け。
<744> そういうレスは煽りって言うんだぜ低脳
745<< (越えられない壁) <<俺
747 :
nobodyさん :2010/12/09(木) 12:13:32 ID:Z4PxvFs5
Zend_AuthはIDorPassに値ないとエラーになるから使うのやめたわ catchでエラー処理すんのもめんどくさい
>>747 最初は俺もZend_Auth継承したクラスつかったりしてたけど、
Zend_Authあんまり意味ないよね。
今は独立したクラスで実装してるわ。
Zend_AclもZend_Authも微妙だよな・・・汎用的故に、独自に拡張し辛い。 そういう箇所に限ってプロジェクト毎に処理ロジックが変わったりするし、 結局自作の認証/権限クラスを作るのがベストだと思った。
>>749 「そういうとこは自分で書いちゃいなよ!」ってのも
ZFの魅力じゃないか。
751 :
nobodyさん :2010/12/15(水) 09:01:50 ID:rTeq7LP8
Zendで作ってあるシステムのサンプルみたいなのってない? できれば小中規模のもの
本買えば付いてると思う
でも自分で作るのならzfの意味無いw
CakePHPからZFに転向した者です。 クラス設計が素直で自然であり、メソッド等の名前が判りやすく、品質の高さを 感じました。 ZFを知り、CakePHPが糞だってことに気づきました。 あ〜早めに気づいてよかった!
でもCakePHPのほうが仕事あったりするよね
無いよ
特定のブローカーがFWの仕事押さえてるから回ってこないお( ^ω^)
ZFって基盤だけ使ってあとは自分で作成するのがベストだよな
759 :
nobodyさん :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が出る原因は何が考えられますか?
よろしくお願いします。
ZFの初学におすすめの本を教えてください。 (PHPは使えますがフレームワークは初めてです) 田舎なので立ち読みできず、AmazonのZF関係の コメントなども少ないので・・・
別に好きな場所に置いてnewしてregisterPluginで登録すればおk
>>763 newを書くファイルって何が相応しいんでしょうか?
あとZend_Controller_Front::getInstanceを書く場所もわかりません。
>>764 別に好きなファイルでいいのでは?
bootstrap.phpでもいいしindex.phpでもいい
あと試してないけどController内でもできるんじゃないかな
ルールもそれほどなく、本当に自由に実装出来るのがZFの良いところ。 実装次第でパフォーマンスや効率も変わってくるだろうし。 ただ、何も考えずルールに則って作りたい場合にはどうしても不向きだね。 あと使う人によって実装が異なってくるから、ルール作らず複数人で開発してしまうとごちゃごちゃする (ZFに限った話じゃないけど)
ZFに限った話じゃないならZF関係ないじゃん
SymfonyやCakeは良くも悪くもガチガチだろ
Zend_Db_Tableってテーブルごとに作成しますよね。 (TemplateMethodに法った場合) その場合ってmodel扱いでいいんですかね class UserTable extends Zend_Db_Table { protected $_tableName = "user"; }
えっ
772 :
nobodyさん :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>'); で所用を達成できるかと思ったらうまくいきませんでした。 どうすればいいでしょうか?
>>772 $decorator->setOption('escape', false);
774 :
nobodyさん :2010/12/23(木) 16:27:38 ID:8j0z9BIK
>>773 お返事ありがとうございます。
出かけないといけなくなりました。
後ほど正しく動作するコードが書けたら報告いたします。
775 :
nobodyさん :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は絶対に指定したく無かったために加えました。
ちがうちがう そうじゃ そうじゃない
778 :
759 :2010/12/24(金) 16:59:30 ID:lpwJZIX8
今週ずっと原因を調べてたんですが、 結局わからずじまいでした。 どなたか何か思い当たる節があれば アドバイス頂けないでしょうか。
100%再現する問題なら簡単に切り分けられると思うけど
781 :
775 :2010/12/25(土) 16:06:14 ID:???
>>スリーセブン rewriteエンジンが非公開ディレクトリまで及んでいるようですが、ZFで公開するディレクトリ、そして公開しないWebコンテンツのアプリケーションディレクトリの為の httpd.confの設定はセキュリティの観点から皆様はどのように設定していますでしょうか? パーミッションは一応設定していますが、上記に書いた自分の設定ではどうも不安なのですが、セキュリティ的に大丈夫なのでしょうか?
783 :
nobodyさん :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する方法がわかりません。 どのようにすればいいでしょうか?
初心者です。 Bootstrap内に変数を宣言しておき、それを コントローラのメソッド内から参照したいのですが、方法がわかりません。 どうしたら良いのでしょうか?
がいしゅつ
がいしゅつ
ネット上のリファレンスはアフォみたいに垂れ流されてしかもサイトが重くて邪魔なのばかりだもんな 検索しても同じリファレンスマニュアルの中途半端なコピーが山のように上位ヒットするし迷惑してる人多いと思う
公式サイトだけ指定して検索すりゃいいだろ
ZFムズいにゃ。
何なら簡単なんだ
>>791 ZFのモジュール設計は素晴しいと思う。
Cakeより100倍わかりやすい。
しかしQuickStartとAPIマニュアルだけでは、俺みたいな初学者には少々敷居が高いと感じました。
そこで、TIPS集みたいな情報があれば、大助かりです。
Webサイトの情報をあちこちかき集めれば自分なりのTIPS集ができるかもしれないけど、
初学者はかき集めた情報の正誤を判断することができないし、個々のTipsのドキュメント品質
を統一できないので、やはり本家本元のHPにTips情報があればいいなぁ・・・と思った次第です。
ぜいたくかな?
リファレンスが中途半端だし なんと言っても説明が下手くそだよな、それが解りにくくしている一因になってる
>>792 何がわからないのか、どこで躓いているのか、を明確にしておくれ。
FW自体に細かいルールが無く、
良くも悪くも自由に扱えるライブラリ群って感じなので、
自分のコーディング方法が正しいのか否かを判断するのは難しい気もする。
>>793 入門者向けに1から10まで説明が乗ってるリファレンスより遙かに情報をくみ取りやすいと思うが・・・
リファレンスでクラス概要を調べて、詳細はソースを読めばいいと思うよ。
796 :
nobodyさん :2011/01/10(月) 04:20:02 ID:vXLRlMCo
画面表示を目的としないアクションに直接アクセスされた場合に 任意のエラーを返したいと思っています。 例えばウィジェットのためのアクションで、 メインアクションにてActionStackに追加-> 最終的に任意のレイアウトセグメントに表示するなどして使うといった目的のものです。 自分の場合、ほとんどは放っておいてもActionの実行時エラーとなるのですが、 preDispatchなどの段階で制御したいです。 直接アクセスとその他(ActionStackで実行された等)を判別するには どのような方法が考えられるでしょうか。
797 :
sage :2011/01/10(月) 12:43:35 ID:???
>>792 , 793
相変わらず「誰か」がやってくれるものだと思っている。
オープンソースなんだから足りないと思ったところはどんどん自分で参加して改善すればいい
Zend_Form_Element作ってViewにrenderしてるんですが、Errorをrenderすると<ul><li>で囲まれますが<p>に変更したいです。 addDecorator()はどのように書けばいいでしょうか?
799 :
792 :2011/01/10(月) 22:06:24 ID:???
>>797 オープンソースだから足りないものを要求するのではなく、
そのコミュニティに参加し貢献すべきというのは、仰るとおりです。
しかしZFを理解できず挫折する方々も多いと思う。
私は残念ながらTipsを作成するだけ習熟していないが、習熟していない
が故に、初心者向けのドキュメントの不備(?)を指摘することで
微々たる貢献をしたつもりです。
つまりTips集があれば、多くのZF初心者を救えるのではないか、と思った次第。
ZFのコミュニティは上記のようなスタンスも許されないものなのでしょうか>797
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 何かに似てると思った
これ思い出した
「薩摩の教え・男の順序」
一、何かに挑戦し、成功した人
二、何かに挑戦し、失敗した人
三、自分では挑戦していないが、挑戦する人を手助けした人
四、何もしない人
五、何もしないが、他人の批判だけをする人
>>799 >ZFのコミュニティは上記のようなスタンスも許されないものなのでしょうか
ZFに限らず、大抵の技術系コミュニティに言える事だけど、
何が解らなくて、何が足りないと思うのかを具体的に示さない限り、
学ぶ気も無い教えて君と認識されてスルーされるのがオチだよ。
単に「難しい」「理解し辛い」ってだけなら、基礎知識が足りてないだけだろうから、
PHP、プログラムの基礎、デザインパターンあたりのから学ぶべきだろうね。
余談だけど俺の周りにはそのタイプが多い、
基礎が出来てないけどFW導入すれば開発楽になるんでしょ?って人。
>>800 ちょww
コピペしただけじゃお前5番じゃないかよってゆう・・・。
まあその理屈でいったら俺も5か。
803 :
nobodyさん :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に入りませんでした。
よろしくお願いします。
アップロードが完了したら変換処理が完了してるんじゃないの? UPしてからしばらくかかるとかあんの? どちらにせよXMLの中身に出てくるんじゃないのか
805 :
797 :2011/01/11(火) 22:44:01 ID:???
>>799 もし今まで誰も気づいていなくて、君が初めて指摘したことだったらもっと価値があったと思う。
でも、いままでマニュアルについてはいろいろな「指摘」がなされてきているから、残念なことにもう目新しい話じゃないんだ。
同じ要望を持つ人がどれだけいるかという投票にはなるけどね。
今の問題点はむしろ、「何が必要か」じゃなくて「誰がそれをやるか」だと思う。
なので、問題点の指摘にとどまらず、それを形にするところもリーダーシップを取って進めたらすばらしいことだと思う。
ちなみに zendframework.vla.jp こういうことをやっている人もいるのを見つけているので、ここにみんなで肉付けしていくのでもいいんじゃないかな
アレ? いつからダウンロードするのにログイン登録しなきゃいけなくなった? マジうざいんですけど・・・
別にいらないと思うけど
Zend_Dbについて質問させてください。 皆さんはprepare()→execute()等でSQL文を書いていますか? それともZend_Db_Tableクラスによるメソッドチェーンを利用していますでしょうか? インピーダンスミスマッチの問題、動的な抽出条件、セキュアを意識しなくても良い等を考えればZend_Db_Tableクラスを利用した方がいいのかもしれませんが、 O/Rマッピングによるパフォーマンスの低下と、自分の思ったようなSQL文が書けるのか?と思うとどっちがいいのか分かりません。 確かに、一般的なSELECT文等であればZend_Db_Tableクラスの方がいいのかもしれませんが、複雑な連結とかした場合や、 また、パフォーマンスチューニングをZend_Db_Tableクラスで作った文で出来るのかな?と思うと普通にSQL文を書いた方がいいのかな、とか思ったりします。 ただ、記法の楽さやコードの変更時等は圧倒的にメソッドチェーンの方が楽そうですけど。 実際ZFで運用している方はどちらの記法で運用していますでしょうか?
他人が使ってればいいの?
>>812 いや、そういうわけではなく、使いにくそうな気がして、実運用上で使用されているのかな?よ思いまして
確かにif文やforeachから動的に入れ込み、色々と楽に出来るのは分かるのですが、SQLとしてはどうなのかなと
ま、商品管理からするとblogシステムとかではさほど難しいSQLもないので大丈夫かもしれませんが
僕はZend_Db(PDO)使ってます。 理由はSQL書くの好きだからです。
おれもZend_Db_Table使ってない quickstartのGuestbookMapper見て使いづらそうだったんで。ちょっとかっこいいとは思うんだけどw Zend_Dbを素で使うときはprepareじゃなくてqueryだったような。 条件によってSQLを変えたいときはZend_Db_Selectが便利ですよん
Zend_Db_Tableの最大の欠点はLIKE使いたいとき。 ゲロコードになる
リファレンスとかカスケード使えないDBなんで出来るだけZend_Db_Tableに任せてる が、複雑なセレクト、サマリ更新、式やサブクエリ含むアップデートは結局手でゴリゴリ書かないとむずかしい queryとTable系でトランザクション違うのか混ぜるな危険を感じた事があった 今時リファレンスが無い()笑とか言われるかも知れないけど多分最新の安定バージョンなんだorz
住人の結論:Zend_Db_Tableは実運用では使えない 自分はSQLの書き方が分かりにくくなるので使っていません 後、純粋なSQL文に慣れているので 逆に、Zend_Db_Tableを運用上で使っている人に意見を聞いてみたいなぁ 自分には知らない便利な活用法なんかあるかもしれないからね
俺は複雑な検索や最適化が必要な箇所は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単位なので、意識してれば混在しても問題無いよ。
うはそうだったのか、使えるじゃんZend_Db_Table せっかちな人はモデルからfetch結果(Zend_Db_Table_Rowset)を返してそのままviewに突っ込めばいいのか。 quickstartのこの実装はいったい何だったんだw 生真面目? DB → Application_Model_DbTable_Guestbook → Application_Model_GuestbookMapper → Application_Model_Guestbook → view
>>820 複雑なSQLの入ったコードをDBTABLEに書くのが気持ち悪いから
生真面目実装してます
いやいや生真面目なのはそこじゃなくて。 Zend_Db_Tableを利用してるのにもかかわらず、さらに自前でMapper書いてるというとこでしょ。
>>822 DB ←Application_Model_Guestbook(Zend_Db_Tableを継承、もしくは内包) ← Controller
くらいが妥当だよな。
だよねえ Skinny Controller Fat Model を表現したかったんだろうけどプロジェクトが小さすぎて かえって違和感がでてしまったんじゃなかろうか。
そもそもさ、ZFの機能って皆色々と使ってる? 自分はフロントコントローラ、DB、その他って位しか主に使ってないんだけど・・・ 例えばValidateなんかも何かめんどくさくて、自分で実装した方がいいような気がしたり
一人で開発するならそれでいいと思うけど
Controller、Session、Db、Cache、Http、あたりは重宝してる。 WEBサービス系のクラスもいざって時に役に立つ。
Zendは、Zend_Http_Clientをライブラリとして使ってるぐらいなんだけど、 アレはほんと便利。 Zend_Db_Tableが複雑なSQLを書くとき〜云々の件は、普通にView書いたりすれば 記述する方もある程度すっきりしたりするのではないの?
アクションコントローラー以外からPOST値を取得したいのですが、どのようにすればいいでしょうか?
$_POST
>>830 返事遅くなってすみません。
スーパーグローバルは使わない方向でいたきたいです。
アクションコントローラーだってスーパーグローバル変数を参照してると思いますが
>>832 すみません。
背景を説明します。
Zend_Formの派生クラスを作ってまして、その派生クラスをアクションクラスの中で使っています。
アクションクラス内では$this->getRequest()->getParams()で取得できますが、Zend_Formの派生クラスの内部でgetRequest()する方法はないでしょうか?
コントローラから渡すのじゃなんでだめなの?
>>834 $form =new MyZend_Form( $this->getRequest());
として、MyZend_Formのコンストラクタに渡すとエラーがでます。
エラーの原因つぶせば?
>>833 Zend_Controller_Front::getInstance()->getRequest()
じゃだめなの?
この質問者のグダグダした感じ、いつもの奴だろ あだ名付けようぜ、今日からお前「グダ質」な
>>838 お前相当仕事でストレスたまってんだろ
はっきり言って見苦しいぞ
スレにケチつける暇あったらコード書け
Zend_Formの中でリクエスト取得とかありえねぇw
>>829 $request = Zend_Controller_Front::getInstance()->getRequest(); でもいいし、
$request = new Zend_Controller_Request_Http(); でもいいし、
$request = Zend_Registry::get("REQUEST"); でもいいし、
$request = $_POST; でもよい。
皆さんデバッグをどうやってますか? ZFでエラーが起きた行を表示してくれる機能などあるのでしょうか?
デバッガー使え
845 :
843 :2011/01/23(日) 18:57:36 ID:???
デバッガを使ってはいますが、エラー行(冷害が発生した行など)の特定までは 自動で行ってくれないかなと思って質問しました
普通してくれるだろw
ZFというより、PHP側の設定の問題だなw 開発環境にxdebug入れてるが、自動でエラートレースしてくれて便利だよ。 それが無理なら、 エラーと例外のハンドラ作って、var_dump(debug_backtrace()) とでも書いとけ。
848 :
759 :2011/01/24(月) 19:25:07 ID:???
すみません。 その後の報告ですが、 やっと原因がわかりました。 Hogeクラスの親クラスのプロパティの初期値に nullと設定すべきところを nulとしていたのが原因でした。 お騒がせいたしました。
849 :
nobodyさん :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って表示させたいだけなんですがどうすればいいのでしょうか。
>>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()) {
Zend_Applicationの存在しないバージョンから使ってる俺に、 Zend_Applicationを導入する優位性を教えてくれないか? 煽りとかでは無く、 アプリケーションの起動処理って、分岐の無いロジックかつ、アプリケーション固有処理が入る事が多いので汎用クラス(Zend_Application)を使うメリットが感じられないんだ。
まあざっくり言うとコードを書かずに、大方必要なインスタンスを揃えてリクエストをディスパッチ してくれる。やってることはZend_Applicationを使わない場合でもそう変りないはずだよん。 むしろ一番フレームワークらしい気がする。
あれ上のちょっと日本語おかしいな。まあいいか 自分でカスタマイズするときは、application.iniでパラメーター変更したり、クラス名変更したり、 Bootstrapで自分でnewするんだす。
>>852-853 ありがとう!
やっぱ基本的な初期化処理とかを行うクラスみたいだね。
元々BootstrapもApplicationも無いバージョンから使ってて、
独自クラスで実装してたんだけど、乗り換えてもあまり大差なさそうだ・・・
暇を見つけて乗り換え検証してみるよ。
855 :
nobodyさん :2011/01/25(火) 21:14:33 ID:Mp2xKR4s
>>850 できた!さんくす
…Zend_Applicationは巨大すぎて把握しきれんわ
あとvar_dumpしたら至る所に*RECURSION*って出てくるんだが大丈夫なんだろうか?
へ?何が?
>>855 大丈夫。
リファレンス値が入っていると無限階層になっちゃうから、
そういう変数はRECRUSIONと表示される。
858 :
nobodyさん :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'); } とかやりたかったんですが普通はどこらへんでやるものなんですかね?
860 :
nobodyさん :2011/01/29(土) 01:55:56 ID:gRK6VmbL
よくわかったな!なぜバレた!
偉そうな口調が似てた
>>858 $request = new Zend_Controller_Request_Http();
$baseUrl = $request->getBaseUrl();
アンケートフォームみたいな、テキスト入力欄とかチェックボックスとかの数が多くて、 デザインも複雑な場合(チェックボックスの最初の1個だけラベルが二つとか)、 Zend_Form_Elementを使ってフォームの要素を出力しようとすると、フォームの要素の部分がすげーめんどくさいんだが、 なんとか楽にやる方法ないかな?
コード自体をスクリプトで書く
Zend_Dateで和暦を扱うことはできませんか? Locale/Data/ja.xml に和暦のデータ(calendar[@type="japanese"]) が入っていたので扱えるのかと思ったんですが、 Zend_DateのtoString('GGG')などとしたときのコードを追っていくと 使うデータが calendar[@type="gregorian"] 決め打ちみたいで 「紀元前」と「西暦」しか出てきません。 Zend_Dateを継承して自分で日本のものを作らないとだめでしょうか?
和暦っつても色々あるらなぁ・・・自分で変換するのが手っ取り早いかと。
867 :
nobodyさん :2011/01/30(日) 11:13:05 ID:Mz9WohIA
Zend_Controller Zend_View これ以外で覚えたらいいの教えてください
>>867 覚えたらいいのってのも漠然だけど
Zend_Layout
大抵使う
Zend_Date
Zend_Log
Zend_Cache
Zend_Mail
Zend_Session
この辺は手軽に使えるから試すのも楽
腐れ実装もあるけど
Zend_Application
Zend_Config
Zend_Db
Zend_Form
フレームワークとして使い込む度合いで
この辺りも
他は需要と実装に応じて
Zend_Validateも必須じゃないか?
Zend_Validateはメッセージがクソだったから 自前のクラス使ったままだったわ でも、確かにZend_Formやら使う時は必須ね
WEBサイトをZFで全部作ってきたのですがある社員にそれはやめろと言われました cakephp|CIと,ZFを使い分けるべきって どういうケースにcakephp|CIを利用してどういうケースにZFを使うんですか?
2ちゃんで聞いてみ?俺が言いたい事を誰かが書いてくれるからって言われたもので
>>866 ありがとうございます。自分で変換します。
876 :
nobodyさん :2011/01/30(日) 18:15:38 ID:7lsYYH4G
>>873 逆にその先輩だか同僚だかに使い分けの理由を聞いて結果をここに晒してくれ。
>>873 アホじゃねえのその先輩という名の情弱は
死んどけって言っといて
>>871 複合主キーをもつDBのシステムを作るときはZF、単一の主キーだけで構成
されるDBを扱う場合はCakePHP、とか言いそうだなそいつ。
どちらかに統一したほうが、スキル習得コストの面でも作成するコードの品質面
でも将来のメンテナンスの面でも、いいよ。
似たようなスキルを分散するのは、良くない。
てか、その先輩はそんな事は承知の上で言っているんだろうから、単に両方使
えますと威張りたいだけ。
そんな人の言葉を真に受ける必要はないと思うよ。
>>上 上でZend_Formの事書かれてるけど、皆アレ使ってるんだ・・・ 俺はマニュアル見て「何だコレ、めんどくせぇ」と、逆にぐちゃぐちゃになりそうだったから止めたんだけど 単純なフォームを作成するだけでもかなり長いコードになりそうな気がしてるんだけど結構使い勝手いいものなの? もしそうだったら学習しなおそうかな
上に挙がってるZend_FormとZend_Validateは使ってない。あとZend_Authも使ってない。
プロジェクトで組む相手によるでしょ。 普段はsymfony使いだけどzendでやるところに呼ばれたらzendもできるし、cakeでやる人に呼ばれたらcakeでやる。 俺俺のところに呼ばれたらその俺俺を学習して使ってみせるよ。
企業サイト6ページ作る場合は何で作るのが妥当? トップページ お問い合わせ 会社紹介 求人 製品紹介 各製品のページ(5ページ程度。デザインは使いまわし)
既成CMS使えよ
ほんと 既製のもので適わないなにかあるなともかく
>>879 俺も使ってないよ。layoutもformもvalidateも使ってない
あまりに使いにくいし見苦しいから
Zend_FormのMultiCheckboxってチェックのとこクリックしたときの挙動おかしいよね。 Firefoxだと一番下にチェックつけると一番上にもチェックがつく。 IEとChromeだと一番下にチェックつけると一番上が一瞬選択状態になる。 あとチェックを解除するためにチェック済みの項目をクリックするとチェックがはずれないことがある。 フォームはViewに手書きしてValidateを手動で使うのが良さそう。 Zend_Formは概要を理解するまでがはてしなくめんどくさい。 理解しても細かいとこを覚えきれないから結局これどうやんだっけって調べるはめになる。 ちょっと機能詰め込みすぎて逆に使いにくい。 うまいこと分割していけば使いやすい物になると思う。
そもそもViewに属するであろうFormが複雑なロジックを含みすぎてるんだよな。 所詮HTMLを出力するだけなのに、学習コストが高すぎる。 Validateは基本英語ってのが微妙だし、 自分で一度作ってしまえば延々使い回せるものなので使いやすいクラスを自作している。 (Zend_Validateを扱えるAdaptorも一応用意してある) 逆に一度覚ると楽で手放せないのは、 Zend_Session、Zend_Cache、Zend_Dbくらいかなぁ・・・ Zend_Log、Zend_Mailは俺俺クラスで一枚ラップしてやらないと微妙に使いにくい気がする。
メッセージくらい自分でカスタマイズしろよ。 自力開発能力ほんとないのな
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); }
>>885 じゃぁ何使ってるの?
後はDBとView位?
まぁ確かにメッセージくらいは楽に変更できるけどね
>>883 CMSって使ってる?
俺使ったことないんだけど
どんなの使ってるの?
xoopsとか?
というかさ、CMS使ったら別に俺たち要らなくなるような気がするんだよな
Zend_Validateって単体項目に対するチェックがメインで、
複数項目チェインさせたり、条件分岐させる場合に使いにくいと感じたなぁ。
コードをZFで統一する美しさには惹かれるけど、
いちいち調べてカスタマイズして・・・ってやる程のモノでも無いと感じたから、自分で書いちゃった。
>>888 車輪の再発明したのに、自己開発能力無いと言われるとは思わなかったわw
>>889 ありがとう。試してみるよ!
車輪の再発明ってだめな例だぞ
>>893 大抵のプログラムは再発明を得てブラッシュアップされていくものだ。
多分、今君が書いてるプログラムも、世の中探せば既存コードがある。
探す手間をかけるか、自分で書いて理解を深めるか、好きにすればいい。
Hello worldが書けないプログラマは大規模なサイトなんて作れんのです
>>862 ありがとう!できた!
一体どうやって調べるんだこういうの!
ただそのままリクエスト引き回そうとしたら
$request->getParams()がNULLだった。
Smartyでいう$smarty.request的なものってViewにありませんか?
Viewでvar_dump($this)ってしたかぎりではそれっぽいものは見あたりませんでした。
とりあえずコントローラのinitで
$this->view->request = $this->getRequest()->getParams()って
やったんだが、もっと汎用的な方法ってあるよね?
>>896 Zend_View(_Abstract)自体には、Requestを保持する機構は無いみたいなのでそれでOKかと。
もしくはgetRequestを実装した、Zend_View継承クラスを使うとかかね。
__get / __set マジックメソッド使ってるからvar_dumpでは解読出来ないよね・・・
IDEとか使ってソースコード追うのが一番早いよ。
>>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で検索してる。
アレを使ってるだの使ってないだのと 色々と議論されていますが、 皆さんどれくらいの規模のシステムを開発されてますか? フレームワークの選定権とかもたれているのですか?
Zend_Validateは結構便利だと思ってたけど、少数派なのかな。 Zend_Validateの派生クラスを生成するクラスを作っておけば、使い回しもできて便利だと思うのだけど。
Zend_Validateだけとかならいいけど、FilterとかFormとかFileなどと連携になると非常に知識を覚えるのがめんどくさい 特にForm Layout、MVCとかと一緒にすると自分には逆に混乱してしまう
>>890 dbとviewとaclとconfigとsessionとcacheかなー
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();
Zend_ApplicationとかBootstrapって、 大した事してないのにコード追うのが面倒になるので使ってねーや。 (というかちょっと前のバージョンには存在して無かった) 疎結合で好きな機能だけ使えるのもウリなのに、 最近は兎に角あるものは極力ZFを使うべきって流れになってて嫌だなぁ
>>903 そこから変えるとしたら自分の場合はZend_Configはiniじゃなくてphpの方使うくらい
↓でも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>
>>906 デザインとロジックを分けるためだけにFWを導入するわけでは無い。
それ以前に君の例だと、
ViewからController(?)であるsetting.phpを呼び出している時点でMVCのなんたるかすら理解していないと思われる。
基礎からお勉強してきなさい。
じゃあこうすりゃいいんだろ? 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> 略
>>908 恥ずかしいから他所行った方がいいとおもうなぁ…
無知の知って言葉すら知らない餓鬼なんだろうよw 自分がついていけないから、必死でフレームワークの存在を否定したいんだよ。 クラス設計とか全く出来なそうな臭いがするな。
ヒアドキュメントで変数置換してたら、jQueryとか使う時面倒そうだなw
まぁ、それ以前の問題だけどドヤ顔で
>>908 を出しちゃうあたり微笑ましい。
専門学校生以下。間違っても職場にいたら足を引っ張るタイプ。
>>912 データとかなら data/resources とか好きにディレクトリ作ればいいと思うよ。
推奨プロジェクト・ディレクトリは良くも悪くも冗長で、時として管理し辛い。
ありがとうございます!
<ul> <li>メニュー1</li> <li>メニュー2 <ul> <li>サブリンク1</li> <li>サブリンク2</li> </ul> </li> <li>メニュー3</li> </ul> これをZend_Navigatorで表示したいのですがどなたか教えてください
>>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()から作るのかなぁ?
>>915 >>917 素朴な疑問なんだが、なんでHTMLを書こうとせず、壁にぶつかってまで自動生成しようとするの?
後々カスタマイズとか非常に面倒な気がするんだが・・・
慣れると手書きよりカスタマイズ性と運用性が上がるとか?
えっ
blogとか、SNSとかその他サンプルとしてでもいいので Zend_Frameworkde作られたWebサイト、Webアプリなどのソースコードを出しているようなサイトとかCMS等は何かありませんか? マニュアルとかの断片的なものではなく、実際どのように製品として組み立てているのかとかを学びたいのですが
前頁で共通箇所というのを一回で指定する方法ってありませんか?
<link type="text/css" rel="stylesheet"href="
http://example.com/style.css ">
っていうタグを全ページに入れたいのですが???Cntroller.phpのfunction ???Action(){〜}で一つ一つアサインしてます
これだとstyle.cssを書き換えると手間がかかってしまうのでいい方法ありませんか?
訂正 ×前頁 ○全ページ
>>922 Zend_Layoutは、そういう用途のためのもの。
取り敢えず、全体に1回でいいから目を通したほうがいいよ。
>>922 俺はZend_Controller_Actionを継承した中間クラスを作って、init()でアサインするという手でやってる。
>>922 Zend_Layout
Zend_View_Helper
Zend_Layoutって使いにくくない? 俺はSmartyを連携させて使ってる。俺はこっちの方が楽だ。
ありがとうございます
930 :
917 :2011/02/02(水) 19:53:18 ID:???
>>918 正直、手書きも含めて自作しちゃうのが簡単だとは思うw
あえて利点を挙げるなら、パンくずリストとサイトマップにも
変換可能ってところかな。
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)の引数を増やせば良い、と・・・。
>>931 普段はCakeを使うことが多いが、個人的には引数増えるよりBの方法が楽だと思う。
というか引数の順番をいちいち記憶するのが面倒。
array(
'val' => $str,
'encoding' => 'utf-8',
'convert' => array('KV', 'upper')
)
とかすれば引数の順番覚えなくてすむし。
Cakeを触りすぎたせいかもしれないが
Aのようなメソッドチェーンの引き回しはPHPの文法に向いてないと思う。
("->"と"."の違いは心理的に大きい)
>>932 意見ありがとう!
A)は冗長だけど、エラーハンドリングのしやすさとか、処理の順番とかキッチリしていて扱いやすいとは思う。
コードは冗長だけど、補完の優秀なIDE使えばタイプ数は、Bよりタイプ数が少なくてすむよ。
B)案だと、配列のキー名のタイポが発生したり、IDEのコード補完が使えないのが辛いよねぇ・・・
かといって引数をクラス化すと途端に冗長と言われるし。
適材適所なんだろうけど、皆の意見をもっと聞きたいっす。
俺も自前でC型のクラス(や関数)を作って、そのうち変数の意味や順序を忘れて面倒になって B型にしとけば良かったよと後悔するタイプだな
>>934 Cはなんとなく気持ち悪いかなぁ。。
その例でいうなら
Number::convert()作ったときに引数が違ってくるよね?
megentoっていうEC-CUBEよりもすごいショッピングカートがあるんだけど 日本では流行ってないけど時間が立てば流行るよぐらいすごいんだけど それにZFが使われてた んで、megentoをダウンロードするとZFが含まれているんだけど、最新のZFにアップグレードするのはファイルの上書きだけで大丈夫か教えて欲しいのです
>>936 知らんけど、やるなら上書きじゃなくてフォルダごと差し替えじゃね
誰かやってやれ。俺は面倒臭い。
商用サポートもあるみたいだしコミュニティもあるんだからフォーラムで英語で聞いてみろよ。 ここはそのmagentocommertceのスレじゃないぞ
>>938 ZendFWはディレクトリ丸ごと差替えるだけでバージョンアップ出来る。
magentocommertce自体が別のZendFWバージョンに対応しているかは別の話。
ルーティングに関して質問です。
以下の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
>>926 Zend_Layout は、 有名な「ツーステップビューパターン」を実装したものです。 開発者は、アプリケーションのコンテンツを別のビューの中に埋め込むことができます。 この「別のビュー」は、通常はサイトのテンプレートとなります。
ああもう!!!!Zend_Layout難しいすぎるのだ!!!!!!!!!!
946 :
nobodyさん :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');
それぞれのページごとにキーワードを設定したいのでコントローラのアクションに$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に
>>947 $item = new stdClass;
$item->type = 'charset';
$item->charset = 'UTF-8';
$item->content = null;
$item->modifiers = array();
$this->headMeta()->prepend($item);
無駄に長くなるね。
試してないけどheadScriptのoffsetSetNameみたいな感じでmetaも指定できたような
chrsetなんて共通だろうし直接書いちゃえ
Zend_ViewもZend_Layoutも敷居が高いだけで、あまり良い事ないな・・・ Smartyとかと連携した方がいいと思うよ。
>>951 Zend_ViewもZend_Layoutも使わないならそもそもZF使わないほうがいいような・・・
ZendFrameworkのフォーラムってありませんか?
>>951 上にあるようなheadMetaとかheadSctipt(だっけ?)とか無駄に色々あるのを
使わなければ単に変数assignするだけだし敷居も低くない?
viewでPHP関数をそのまま利用できるのは有りだと思うよ。
Smartyの知識+独自のライブラリとかがすでにあるならSmartyでもいいかもしれないけど。
むしろSmartyと連携するメリットがまるでわからない。
>>954 テンプレートエンジンにフィルターとかキャッシュは必須だと思っている。
ZF導入にあたってViewの乗り換えを検討し、同様の事をZend_Viewで行おうとしたけど、
Smartyより難しい印象だったなぁ・・・
PHP構文使えるのはメリットにもデメリットにもなるので、なんとも。
ZF+SMARTY導入でページを表示するたびにZFとSMARTYを起動しちゃうじゃん 重いじゃん
headに <script type="text/javascript"> alert(1); </script> をコントローラから追加したいのですが下記のようにアクションに書いてもエラーページに繋がってしまいます ページ毎に異なるjavascriptを埋め込みたいので直接VIEWスクリプトには書かないでコントローラから操作できるようにしたいのですがお知恵を拝借させてください public function indexAction() { $this->headScript()->captureStart(); ?> alert(1); <?php $this->headScript()->captureEnd(); }
>>955 Smartyよく知らないんだけど、Zend_View_FilterとZend_Cacheと違うの?
959 :
nobodyさん :2011/02/06(日) 16:57:57 ID:zdEuJ7Gl
function init(){ $this->view->headScript()->offsetSetFile(100, 'test.js'); } で読み込ませているのですが特定のアクションだけ読み込ませない方法ってありませんか?
>>958 いや、同じ事は出来ると思う。
性能の優劣とでは無くて、ゼロから学ぶならSmartyの方が楽な印象がしたのさ。
ZendFW自体、疎結合で好きな部分だけ使えるようになってるんだから、
Viewには慣れ親しんだSmartyとかでもいいのかな、と。
ZFとWPって連携して使うもの? WP使えるのにZFまぜる必要ってある?
WPって何?WordPress?
963 :
nobodyさん :2011/02/07(月) 04:15:06 ID:X/yGRmJE
新しいコンポーネントがリリースされた時に、そのコンポーネントだけ追加することって出来る? ターミナルでのコマンド入力で一気にコンポーネントの追加したりって可能かな? それと、リモートのサーバで動いてるzendFWのバージョンアップさせようと思ったら 1)新バージョンのFWをブラウザでローカルにダウンロード 2)リモートのサーバにアップロード 3)sshで既存のFWに上書き って流れでやるしかないの? 一発で実現できるコマンドってないのかな
Zend_Formってどのような場面で使うものですか?
それはわかりますよw HTML直書きと比べての話です
「varidatorと組み合わせて簡単に入力値検証できるとかがメリット」のはずだけど実際には 「zend_formもjsとの組み合わせとかやりづらいし、zend_varidatorも 自前の検証クラスに比べて冗長でややこしい一方だしろくなことねーぞ!」って感じ まあ使ってみなよ 結局使う人の感性次第だ、俺はあわなかったな
Zend_Pdfってフォントの拡張子がttfのものじゃないとダメなんですか? 日本語使いたいんですけどttcって使えないですか?
970 :
969 :2011/02/07(月) 19:45:19 ID:???
ごめん自己解決した
>>963 >新しいコンポーネントがリリースされた時に、そのコンポーネントだけ追加することって出来る?
何らかの方法で差分を取得すればいい。(SVNリポジトリ見ればいいと思う)
>ターミナルでのコマンド入力で一気にコンポーネントの追加したりって可能かな?
バッチ組めばOK。俺はSVN UPで済ましちゃってるけど。
>一発で実現できるコマンドってないのかな
リモートサーバが外部にアクセス出来るなら、バッチ処理書けばいい。
971じゃないけど TTCなんてきもい実装への対応をOSSに求めんなよ 自分で調べて分割しろ あとライセンスは気をつけろ
>>973 さん
ええええMSゴシックがttcだからもうオワタか
>>975 さん
うはwそれいいですねwダウンロードして試してみますw
layoutって結構使うもの?
使わない。使いにくい。
980 :
nobodyさん :2011/02/09(水) 13:29:55 ID:aJnPZ9zM
すいません自己解決できました なんかコントローラのクラス名の命名規則があってモジュール名_IndexControllerって書かないといけなかったようでした ggって見つけたものなのでマニュアルのどこに書いてあるのかよくわからないのでこれで良いのか分かりませんが・・・
983 :
nobodyさん :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です。よろしくお願いします
>>983 Zend_Service_Twitterは使った事ないけど、
OAuthで受け取ったアクセストークンの設定とかはしてる?
985 :
nobodyさん :2011/02/10(木) 12:44:36 ID:B6xb9mKa
>>984 レスどうもです。
原因わかりました
ZendFWのバージョンがOauth認証に対応してませんでした
1.10のマニュアルを見ると対応してるように書いてるのに、
実際には(自分のは?)対応してなかったという…
意味わからないですが、ありがとうございました
レイアウト使うとページ読み込むの遅いんだけどこういうものなの? レイアウトからheaderとcontentsとfooterを呼び出している
Zend_Layoutが原因で、そんなに重たいと感じたことはないなあ いや、よく考えたらキャッシュ使いまくりだから、あんまり感じないだけなのかも 何にせよキャッシュは大事だよ
なんだこれsmartyみたいにキャッシュて勝手に聞いてくれるものじゃないのか
>>988 好きにZend_Cache使いなさい、
ってのがこのフレームワークのスタンスなのよ
Zend_Cacheは簡単だし、粒度もそれなりに設計できる
990 :
nobodyさん :2011/02/10(木) 23:30:56 ID:2I2O4kI9
ドキュメントルートにZFをインストールする場合って特別にパーミッションやhtaccess設定することってありますか? いつもincludeパスが通った所に置いた利用しかしてなかったので分かりません
>>990 どこに置こうがZFを呼び出せるということは、
include_pathの通った場所(例えば".")に置いてるということなので
PHP視点でZFを使うための追加の設定は不要
ただ、ZFに限らずライブラリ系置くなら外部からHTTPアクセスはできないようにしておく方が無難
ドキュメントルートに送って事はapplicationの中見られるって事ですよね htaccessの修正なくてもOK?
はい・・・?
>>997 そこのページどの記述からapplicationドキュメントルートに置くって読み取ったの?
へんなバカに粘着されてレス伸びてるから次スレで聞いたらいいよ
1000 :
nobodyさん :2011/02/11(金) 16:51:20 ID:g4d041We
超高速で俺が1000ゲット!
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。