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

ZendFrameworkってどうよ?

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2006/10/07(土) 02:49:15ID:6wQ8r0Dc
ようやくVer.1.0が出るらしいね
これってどうよ?

PHP5に移行したほうがいいのかな
0609nobodyさん2007/11/03(土) 06:06:39ID:???
dslって何だ?
adsl?
0610nobodyさん2007/11/03(土) 12:32:41ID:???
PHPの文法じゃDSLとは言い難いだろ
0611nobodyさん2007/11/04(日) 00:45:50ID:pUsvR5iH
Db_Table_Rowって昔
user_nameみたいなカラムを

$row->userName

みたいにするような感じじゃなかった?
0612nobodyさん2007/11/04(日) 01:03:54ID:???
だからdslって何なんだよ
Nintendo DS Lightのことか?
0613nobodyさん2007/11/04(日) 01:39:49ID:???
ttp://itpro.nikkeibp.co.jp/article/COLUMN/20070604/273453/?P=4&ST=oss
Glenn Vanderburg氏*3によれば,メタプログラミング機能が最も活用できるのはDSL(Domain Specific Language)の分野なのだそうです。
DSLとは特定の分野向けに機能を強化した小規模なプログラミング言語のことで,昔からあるアイディアです。

だってさ
0614nobodyさん2007/11/04(日) 17:38:17ID:pUsvR5iH
http://ho.ge/user/:username

みたいなページで:usernameのユーザーが登録されてないときに
404ページ出す場合ってforwardでエラーページに飛ばすべきか
throw new Zend_Controller_Dispatcher_Exception()をするべきか
どっちがいいですか
0615nobodyさん2007/11/04(日) 18:40:59ID:???
ちんぽまるだしで全部解決
0616nobodyさん2007/11/05(月) 11:16:12ID:???
>>614
Controllerの中でerrorActionを定義するのが簡単
その次がException
0617nobodyさん2007/11/05(月) 12:46:18ID:???
しばらく見てないけど
Zendルータってもう使いものになるレベルになってんの?
0618nobodyさん2007/11/06(火) 20:29:30ID:???
いつのバージョンと比較してるのかは知らんが
使えないのは、単にお前の能力不足じゃないのか
0619nobodyさん2007/11/07(水) 02:53:53ID:???
いや…
前見た時はなんかろくすっぽ実装されてなかったけど
0620nobodyさん2007/11/07(水) 02:55:45ID:???
ってかルータ使うのに能力も何もねーだろ・・・
意味不明な煽りすんな氏ね>>618
0621nobodyさん2007/11/08(木) 02:26:48ID:???
Zend_Log のDB使用の際のイベントの追加の仕方がよく分からないんですが、
下記のようにnew Zend_Log_Writer_Db時点($columnMapping)で、追加予定のイベント指定して、
new Zend_Logでインスタンス生成してから
setEventItemするという順で良いのでしょうか?

$db = Zend_Db::factory('PDO_MYSQL', $params);

$columnMapping = array('lvl' => 'priority', 'msg' => 'message', 'pid' => 'pid');
$writer = new Zend_Log_Writer_Db($db, 'log_table_name', $columnMapping);

$logger = new Zend_Log($writer);

$logger->setEventItem('pid', getmypid());
0622nobodyさん2007/11/09(金) 21:37:56ID:???
>>617
まだがっつりとは触ってないけど、私見では十分使えるレベルだと思う。
Net_URL_Mapperなんかでごりごり書くよりも直感的で、本当にルータっぽく
設定できるので、個人的には結構気に入っている。というか、他の機能が
まだ少し未熟な(好意的に見れば柔軟性に富んだ)感触なのに対して、ほぼ唯一
そのまま使える機能といってもいいw

むしろ、Validator周りが予想以上に使えなくて、今頑張ってるよ…。
0623nobodyさん2007/11/10(土) 00:36:32ID:grKOANVo
>>622
その辺はZend_Formとかとくっつける為にあんな感じなんだろう
0624nobodyさん2007/11/10(土) 00:49:31ID:???
なんで放置されてるZend_Form?適当な事言ってない?
0625nobodyさん2007/11/10(土) 01:04:16ID:???
PonkotsuFramework
0626nobodyさん2007/11/10(土) 02:58:12ID:???
Zend_Log組み込んでるんだけど、
DEBUGはロギングしない、とか後で変更できないの?
わざわざ継承して、debug関数の処理空にする、とかしか思いつかない。
06276262007/11/10(土) 02:59:42ID:???
スマソ、フィルタってのがあるね
0628nobodyさん2007/11/10(土) 15:52:22ID:???
Zend_Db_Adapter_Abstract::insert()
で1日ハマってるんだけど、誰か助けてくれ〜〜

$db->insert( $table, $insert_data );
としても全くインサートされない。

Zend_Db_Profiler でクエリー文調べてみたら
INSERT INTO `table` (`hoge`, `hoge2`) VALUES (?, ?)
となってるんだが、ホワィ??
なぜにプリペアドステートメント?
0629nobodyさん2007/11/10(土) 16:37:29ID:???
なぜってお前・・
0630nobodyさん2007/11/10(土) 18:43:54ID:???
>>628
Zend_Db_Profilerで見られるクエリでPDOでbindする前のじゃなかったっけ
だからそれはそれであってるんじゃないの(この仕様もどうかと思うんだけどね)
例外が返ってくることもなくデータが入らないの?
0631nobodyさん2007/11/10(土) 23:10:26ID:???
>>607
objectが返るってことはソースからなんとなくわかったんだが、
結局
>>599のように送信が成功したかどうかで分岐させたい場合、
どんな記述をすればよいの?
0632nobodyさん2007/11/11(日) 01:37:50ID:???
try catch
0633nobodyさん2007/11/11(日) 09:38:19ID:???
>>631
sendで失敗したら例外が投げられるから投げられてたらエラー
tryでsendしてcatchに失敗した時の処理を書く
0634nobodyさん2007/11/11(日) 10:16:36ID:???
Zendframeworkはやはり諸々のお手本として勉強になりますなぁ
ZF周辺の頭脳派集団的オーラがぜひPHPコミュニティ全体に波及しますように
0635nobodyさん2007/11/11(日) 23:29:07ID:???
try catch ってソース汚くなっていやなんだが
ほかの人はあれ好きなの?
0636nobodyさん2007/11/11(日) 23:43:13ID:???
好きなヤツはいないと思うけど、さっくりとException投げられるから仕方なく使ってる
.NetでもSMTPにメールアドレスが拒否られた場合、普通にException投げてくれるから同じ書き方になる
try{mail.send(primary)}
catch
try{mail.send(secondary)}
catch{return false;}
他の言語だとどうなんだろうね
0637nobodyさん2007/11/12(月) 00:32:16ID:OoaTyYVU
try catchの美しさを理解できないのか
0638nobodyさん2007/11/12(月) 00:46:57ID:???
インデントが1段下がるのが嫌だ
0639nobodyさん2007/11/12(月) 01:36:43ID:???
Zend_Db_Tableはリレーションまでまともに使い物になる日は来るんだろうか?
SimonとかいうヤシのProposalはどうも現場感覚が決定的に不足してる感じがする
06405692007/11/12(月) 07:21:42ID:???
throwsがないのが不便。
0641nobodyさん2007/11/12(月) 10:09:01ID:zaguTSbK
汚いって思うやつは、try{〜}の中が長すぎるんだろ。
0642nobodyさん2007/11/12(月) 14:04:06ID:MO0zYBuT
Zend_Mailって日本語もばっちり?
0643nobodyさん2007/11/12(月) 18:00:06ID:???
>>642
OK!
0644nobodyさん2007/11/12(月) 18:03:05ID:???
>>642
一つ書き忘れ。送信者名に日本語使うときの対処方法がZend framework入門の
P299に書いてあります。
0645nobodyさん2007/11/12(月) 18:26:18ID:???
ばっちりちゃいますやんw
06466442007/11/13(火) 13:00:03ID:???
>>645
ゴメソ
06476422007/11/13(火) 19:59:22ID:lFhItDW1
なるほどです。
>>644
給料出たので奮発してその本買って見ます。
0648nobodyさん2007/11/13(火) 20:32:39ID:???
「Zend Framework入門」は別に買わなくてもいいんじゃないかと。
マニュアル以上のことが書いてあるわけでも無いし。

俺は買って損した気分です。
0649nobodyさん2007/11/13(火) 22:09:12ID:???
>>648
同意
0650nobodyさん2007/11/14(水) 01:14:37ID:???
ZF入門は残念ながら内容薄かったね。
英語でよければ「Zendframework in action」がオンライン購入で途中まで読めるようになっており
コチラはもう少し読みやすく実践的なのでモチベーションが上がる。
まぁZFのバージョンアップではやくも内容が古くなりつつあるけど。
0651nobodyさん2007/11/14(水) 01:44:20ID:???
Zend_Viewでビュースクリプトから取得される文字列をデフォでエスケープさせようと弄ってるんだけど、

public function __set($key, $val){
if ('_' != substr($key, 0, 1)) {
$raw_key = $key . '__raw';
$this->$raw_key = $val;
return;
}
require_once 'Zend/View/Exception.php';
throw new Zend_View_Exception('Setting private or protected class members is not allowed', $this);
}

public function __get($key){
$raw_key = $key . '__raw';
if(strpos($key, '__noescape') === false){return $this->$raw_key;}
else{return $this->escape($this->$raw_key);}
}

こういう書き方ってダメなんだっけ?
__setの時点でWindows環境だと無応答、Linuxだとメモリ確保できないぞゴルァみたいなエラーが。
0652nobodyさん2007/11/14(水) 01:49:41ID:???
poka-n
0653nobodyさん2007/11/14(水) 03:29:33ID:???
try{
$db = Zend_Db::factory('PDO_MYSQL', $params);
$db->insert('table', $params2);
}catch(Zend_Exction $e){
echo "メッセージ: " . $e->getMessage() . "\n";
}
でinsertのエラーがキャッチできないんだけどなぜに?
0654nobodyさん2007/11/14(水) 03:30:29ID:???
Zend_Exception
0655nobodyさん2007/11/14(水) 05:29:12ID:???
うわ、これって「Zend_Exction Class が未定義」というエラーにならないんだな。
はじめて知った。さすがPHP、奥が深いな。
0656nobodyさん2007/11/14(水) 10:07:45ID:???
うむ
0657nobodyさん2007/11/14(水) 14:21:55ID:???
Zend_Exception としたところでキャッチされない。
反映行数がinsertの返し値なようだから、
0ならfalseとかthrowとかしなきゃいけない、でファイナルアンサー?
0658nobodyさん2007/11/14(水) 17:50:43ID:???
insertの戻り値ダンプしてみて0だったってこと?
それで例外キャッチできないって絶対何か別の原因があると思うけどなあ
内部で何かエラーがあれば必ずZend_Exception派生の例外は投げられるはずだけど
データの取得(SELECT)はちゃんとできるかい?
06596572007/11/15(木) 12:38:07ID:???
>>658
はい、そうです。
selectなども正常にできています。
意図的にDBパスワードミスとかするとちゃんとcatchしてくれます。

何となく思ったのですが、
653のままでも
本来insertが例外を投げているのであれば、
catchされないままになってしまうので
通常はエラーが出るはずですよね。
0660nobodyさん2007/11/16(金) 03:03:39ID:???
は?insertの返り値が0だったら本当に例外返ってくるのか?
0661nobodyさん2007/11/16(金) 03:55:13ID:???
なんで通ってんのに例外なげんの?
06626582007/11/16(金) 12:18:44ID:???
>>659
うむ

>>660
戻り値が0だったら例外が投げられるとかって事じゃなく
insertが通っているのに戻り値0で
実際にはinsertされてないってのは
何か別の原因が、って意味で書いた
0663nobodyさん2007/11/16(金) 20:37:00ID:???
そりゃどう考えてもスキーマかお前さんのSQL文が悪いんだろう
0664nobodyさん2007/11/16(金) 21:15:28ID:???
Java厨のおいらがPHPやりたくないけどやらざるをえない状況になったんで
ZendFrameworkってどうよ?って質問しに来たんだが、
ざっとスレ読んで放置することにしたわw
0665nobodyさん2007/11/16(金) 22:17:00ID:???
PHPのピの字も分からんうちからFW使おうとすんな。
0666nobodyさん2007/11/16(金) 22:19:53ID:???
PHPって子どものおもちゃじゃないですかwww
0667nobodyさん2007/11/16(金) 22:26:57ID:???
>>666
お兄さん大人なの?おしりの穴貸して欲しいナ
06686642007/11/16(金) 23:12:19ID:???
いや仕事で使ったことはあるよ。てかフレームワークスレも読んだがgdgdだな。
自分で作ることにするわ。汎用性ありそうだったら公開するお。
0669nobodyさん2007/11/16(金) 23:20:25ID:???
>>668
汎用性無くても公開してほすぃ
0670nobodyさん2007/11/16(金) 23:30:58ID:???
いつ頃?
0671nobodyさん2007/11/16(金) 23:46:54ID:???
素直にPhrameでも使っとけよ
0672nobodyさん2007/11/16(金) 23:56:08ID:rj+nso4l
ZF好きだけどな
ソースとかなんでもclassにしちゃうとことか
とっても好感を持てます
0673nobodyさん2007/11/16(金) 23:59:50ID:???
?
それ普通じゃないの
0674nobodyさん2007/11/17(土) 00:49:58ID:???
PHPはModuleとか無いからなぁ
普通にClassにするだろ
0675nobodyさん2007/11/17(土) 01:48:15ID:???
$db->beginTransaction();
ってController_Actionのところでやるのがいいの?
MVCとかにこだわるならコントローラーではやらないほうがいいの?
0676nobodyさん2007/11/17(土) 01:53:00ID:???
どう考えてもビジネスメソッドじゃねぇの?
0677nobodyさん2007/11/17(土) 02:14:26ID:???
じゃあ

User extends Zend_Db_Table
UserProfile extends Zend_Db_Table

みたいな2つがあるとして
ユーザー登録ページみたいなので
2つ同時にinsertするときは
どういう風に
$db->beginTransaction();
するのがいいんですか?
0678nobodyさん2007/11/17(土) 03:03:48ID:???
トランザクション使わないといけないほど重要なページなのならストアドでも使えば?
0679nobodyさん2007/11/17(土) 05:35:35ID:eWyQP34E
例外の扱い方にもよるだろ
0680nobodyさん2007/11/17(土) 11:44:10ID:???
>>677
俺ならUserにregisterメソッドを用意して
その中でbeginTracnsanctionして
UserへのinsertとUserProfileへのinsertを行う
って感じでmodelに押し込めるな
Controllerからはトランザクションを意識したくはないな
0681nobodyさん2007/11/17(土) 16:52:25ID:???
俺はControllerでbeginTracnsanctionしちゃうな。
でUser::insert(),UserProfile::insert()
でControllerでcommitする。
Controllerでトランザクション意識するのってそんなに良くない事かな?
俺はどっちかっていうとmodelでcommitすることに抵抗あるな。
トランザクションの制御はなるべく外側でやりたい。
0682nobodyさん2007/11/17(土) 20:07:19ID:???
それはMVCじゃない
06836812007/11/17(土) 20:44:28ID:???
>>682
そうか、やっぱりダメか。
なんかControllerで何やって良いかまだ良く分かってないんだ。
なら>>677の別の解答として、
UserRegisterクラスを作って
その中で
 beginTracnsanction()
 User::insert()
 UserProfile::insert()
 commit()
とするのはどうかな。
0684nobodyさん2007/11/17(土) 20:53:01ID:???
>>681
いや俺もコントローラでコミットするよ。
そんでbeginとcommitの場所はソース的には一カ所になるようにする。
そうすると安全。
0685nobodyさん2007/11/17(土) 21:01:26ID:???
>>683
上記2つはともかくそれはないw絶対ないw
0686nobodyさん2007/11/17(土) 21:18:14ID:???
MVC学べよ
0687nobodyさん2007/11/18(日) 00:20:09ID:???
MVC厨乙
0688nobodyさん2007/11/18(日) 00:54:29ID:???
この辺もどっちがMでどっちがCですべきかはあいまいだしな。
まー好きにしろってこった。
0689nobodyさん2007/11/18(日) 02:40:59ID:???
MVC構成を想定で設計されているフレームワークスレで何をいうか。
データの処理関係はモデルです。曖昧も何もない。勉強不足
0690nobodyさん2007/11/18(日) 02:48:04ID:???
MVCが何かも知らずにMVCフレームワークを使い始めるのはどうかしているよ・・w
根本的にセンスがない。
0691nobodyさん2007/11/18(日) 04:27:24ID:???
VCはやること基本的に決まってるけど
モデルって結構幅広いから
どういう設計にしたらいいかすっげー悩むんだけど
その辺のルールがよくわからない
0692nobodyさん2007/11/18(日) 07:28:10ID:???
結局この話題は>>680が最適解?
0693nobodyさん2007/11/18(日) 07:29:05ID:???
何をもって最適と?
0694nobodyさん2007/11/18(日) 07:33:16ID:???
流れ読めよ。MVC的にだろ。
0695nobodyさん2007/11/18(日) 08:02:11ID:???
MVC厨的には最適ですw
06966882007/11/18(日) 08:16:49ID:???
>>689
ぶっちゃけZendFramewordつかってないから良くしらんのだがwww
単に複数の別クラスのモデルを1つのトランザクションで処理するときどうするの?
0697nobodyさん2007/11/18(日) 08:32:29ID:???
トランザクションをコントロールしている…と考えれば
Cでコントロールしてもおかしくない
0698nobodyさん2007/11/18(日) 08:55:51ID:???
そんな理屈なら表示をコントロールするからってVの部分をCでやっていいのかw
0699nobodyさん2007/11/18(日) 09:01:34ID:???
まあ、ありな場合もあるんじゃね
0700nobodyさん2007/11/18(日) 12:04:45ID:???
>>696
複数の処理をする単一のモデルを新たに作れってことじゃないの
0701nobodyさん2007/11/18(日) 12:08:08ID:???
>>700
>>683は無しらしいよ
07026882007/11/18(日) 12:18:02ID:???
>>700
うわwそれは嫌だな。
なんかMVCにしろデザインパターンにしろ、その流儀を守るために
無駄にクラス作ったりコードが増えたり複雑になるのは嫌だわ。
0703nobodyさん2007/11/18(日) 12:36:09ID:???
そもそもカプセル化という重要なことを忘れているヤツがいるな。

小規模個人サイトくらいなら気にすることないけど
0704nobodyさん2007/11/18(日) 12:55:18ID:???
原理主義と簡便性のバランスはいつだって難しいね……

データが(程度の問題で)かなりアトミックに扱うべきだと思ったら
一見複雑になるように見えても新たなクラスを作る合理的理由があるはずだろうし
シチュエーション的な理由(Cによるということ)だけでに複数のモデルを同時に扱いたいってのなら
Cからtran制御することにもそれなりな正当性がありそうに思える
0705nobodyさん2007/11/18(日) 13:20:09ID:???
ケースバイケースだろ

ただ上記のUserとUserProfileっていう名前の場合、
普通1:1か1:nの関係でエンティティとしては「ユーザ」という1エンティティなわけで
そのユーザエンティティを登録する処理なんだから
Userの登録処理に押し込めるのは自然な流れだと思うし
それ以外の場合でも、そういう複数モデル(テーブル)にまたがる
一連の更新処理をモデルに対応するテーブル間のマッピングから考えて
いずれかのモデルに押し込めておくのは俺はわりとやる

でも全く関係のない2者間のモデルを同時更新するなら(UserとLogとか)
Cでトランザクションすることだってあるだろう
どっちかでしかトランザクションしないってのは思考停止

っていうか実際そんな簡単にMCは割り切れない部分もあるし
その場に応じてちょっと普通ではやらない置き方になる時も多々あるよ
MVCMVC言って盲目的に割り切ろうとしてる奴も思考停止だ
0706nobodyさん2007/11/18(日) 13:39:00ID:???
明らかに全然関係なかったらトランザクションいらないんじゃないの?
0707nobodyさん2007/11/18(日) 14:07:55ID:???
よーわからんが、1リクエストの処理が以下のように共通化されてて
try {
トランザクション開始
アクション関数呼び出し
} catch () {
 ロールバック
 ログ出力
} finally {
例外じゃなきゃコミット
}
アクション内ではトランザクションとか何も意識しない
とかなっとけばいいんでないの?
モデルのなかでいちいちトランザクション貼ってロールバックとか
毎回書く方がナンセンスじゃないか?
複数のモデルの処理が全部正常に行われたらコミット、
何か1つでも失敗あったらロールバックてときも上の方法だと何も考えなくても対処できてる。
07085692007/11/18(日) 14:56:17ID:???
PHPにfinallyあったっけ?
0709nobodyさん2007/11/18(日) 15:11:10ID:???
>>707
アクション内全部が1トランザクションとか愚の骨頂
どんなアクションだろうが最初にファイルをオープンしてロックかけておけば
いつでもファイルいじれるよ!どうだい柔軟で便利だろ!
とか言ってるのと同じくらいバカ

CだろうがMだろうがどこでトランザクション張ってようが
そこで毎回rollbackの対応を書いたりなんてしない
FW使ってるなら普通上層で一元的に例外に対するコントロール部分があるし
そもそも例外発生したらcommitされないんだから
そのまま終了しても自動的にrollbackされる
■ このスレッドは過去ログ倉庫に格納されています