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

ZendFrameworkってどうよ?

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

PHP5に移行したほうがいいのかな
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される
07107072007/11/18(日) 15:47:47ID:???
>>709
すまん、>>707は簡素すぎた。
実際はopenTransaction()ってメソッドが親のコントローラとかにあって、
それを呼ぶとトランザクションが貼られる。
で、明示的にアクション内でcommit()呼ばないとアクション抜けたときに自動的にコミット。

>FW使ってるならほげほげ
そういう仕組みがあるならいいよ。
てか上の話見てて毎回書くようなことを書いてるように見えたから
ちょっぴり自己主張しちゃいました。

>>708
すまん、実はJava厨が紛れ込んだだけなんだ。
0711nobodyさん2007/11/18(日) 19:22:08ID:kBwRbUKB
でも、finallyは必要だよな。
0712nobodyさん2007/11/18(日) 19:24:42ID:???
finallyって存在意味あるの?
例外投げられたらcatchに移行する
例外投げられなかったらfinallyが実行される
てことはtryの最後にfillany内の処理書いとけば同じことじゃんなんて思うんだが
0713nobodyさん2007/11/18(日) 19:32:13ID:???
>>712
もっかい勉強しようぜ
07147072007/11/18(日) 20:32:34ID:???
>>711
namespaceもほしいお

>>712
ファイルとかセッション閉じる処理とか例外でも正常終了でもしないといけないっしょ?
そういうのをfainallyにまとめて書くのだ。
0715nobodyさん2007/11/18(日) 20:54:37ID:???
>fainally
(^-^)
0716nobodyさん2007/11/18(日) 21:36:37ID:???
>>714
PHPの場合はリクエスト(≠プロセス)終了時に変数はすべて開放されるし、
そのときリソースも開放される。(ファイルを閉じたり、DBならトランザクションを
アボートしてコネクションを閉じたりする。セッションハンドラも然り)
てなわけで、JavaやC++ほどfinally節の必要性は感じない。

まあ無いよりはあった方がいいとは思うけど。
07177072007/11/18(日) 22:45:39ID:???
そういえば前にcloseしてねーけどいいのこれ?って聞いた覚えが。
確かにphpではfinallyはあんまいらないかも。
0718nobodyさん2007/11/18(日) 23:06:35ID:???
JavaだとデストラクタがあってもGCでいつ開放されるかが予測しにくいので
finallyで処理する必要があるんだよね。
DB接続もリクエストをまたいで使い回すのが普通だし。
0719nobodyさん2007/11/18(日) 23:39:18ID:???
Java信者も大変だよな
07207072007/11/19(月) 00:10:52ID:???
>>718
そうなんだよね。
そういう点ではC++のがデストラクタにきっちり組み込めるのでfinally無しでもいけたりする。

>>719
Javaはフレームワークは混沌としてる。
結局railsだけだなFW的にまともに軌道乗ってるの。
VM乗って高速化したらrailsの天下かもね。
0721nobodyさん2007/11/19(月) 00:55:15ID:???
PHPも十分混沌としてると思うぞ
0722nobodyさん2007/11/19(月) 01:06:02ID:???
選択肢が一つしかないよりは乱立してるほうが健全じゃね?
0723nobodyさん2007/11/19(月) 13:24:40ID:xD0eowNd
>>722
なかなか良いこと言うな
0724nobodyさん2007/11/19(月) 22:57:53ID:???
そうか?
0725nobodyさん2007/11/21(水) 00:20:31ID:???
最後には淘汰されつついくつかに統合されるのがプログラミング以外にも当てはまる世の流れだな。最初から選択肢が一つは不健全
0726nobodyさん2007/11/21(水) 00:28:36ID:???
そうして文字コードもたくさんできました。
0727nobodyさん2007/11/21(水) 15:45:13ID:???
Zend_Configで.も含む設定名ってどうすればいいんでっしゃろ。
[sample]
hoge.hoge = var
だと
$sample = $Zend_Config->sample->toArray();
で
$sample[hoge][hoge];
に格納されてしまうけど、
$sample[hoge.hoge]としたいんです。

そもそも[]の中に.使えませんでしたっけ?
0728nobodyさん2007/11/21(水) 22:44:32ID:???
>そもそも[]の中に.使えませんでしたっけ?
使えるよ。っていうかこれはすぐ調べられることだと思うんだが^_^
0729nobodyさん2007/11/21(水) 23:38:30ID:???
コーディング規約だけつこうた。
0730nobodyさん2007/11/22(木) 02:35:12ID:???
Zend_Viewきっついな
Controllerとやたら密接に絡んでるせいですんげぇ使いづらい・・
0731nobodyさん2007/11/22(木) 03:26:56ID:???
なんであんな密接にしたんだろうな
しなくてもよさそうなもんなのに
0732nobodyさん2007/11/22(木) 12:08:27ID:8IILrWGo
>>730
$front->setParam("noViewRenderer",true);
にしておけ。
0733nobodyさん2007/11/23(金) 04:43:01ID:???
zendはコンポーネントベースだからPearライブラリを使ったみたいに自分で構成までくむの?それとも推奨構成あり?
0734nobodyさん2007/11/23(金) 11:37:35ID:???
推奨構成はあるよ規約ではないけどな
ドキュメント嫁
0735nobodyさん2007/11/23(金) 16:12:50ID:???
世間のウェブデザのほとんどが使いこなせないのがPHP。
真珠の掲示板ですら設置できない低スキルで、毎月数十万のぼったくり請求している酷い業界。
0736nobodyさん2007/11/23(金) 17:03:13ID:???
それでいてデザイン発注するとテーブルレイアウトで返してきたりな
07377272007/11/24(土) 14:31:21ID:???
どなたか改善策きぼんぬ
0738nobodyさん2007/11/24(土) 16:34:31ID:???
parse_ini_fileでいいじゃん
設定ファイル読み込むだけのクラスが
直感的に使えない時点でもう何かダメだと思うんだ
0739nobodyさん2007/11/24(土) 17:03:10ID:???
てか単純な設定ファイルなら普通に.phpで書いてもいい気がするけどな
0740nobodyさん2007/11/24(土) 17:10:15ID:???
作法に従いたいって事だろうな。
0741nobodyさん2007/11/24(土) 17:36:48ID:???
初歩的な質問で、検討はずれな事を言っていたらすいません。

$db->query('SELECT * FROM `hote_table` WHERE `id` = ?', $id);
Zend_Dbでプリペアドステートメントを使ってSQLのクエリを送信しようとしているのですが、
数値文字列にもクォーテーションがついてしまいます。オプションか何かで数値文字列に
クォーテーションが付かないようにしたりできますか?
また、そうでなくとも似たような簡略化する方法は予め用意されていますか?

ご教示お願い致しますm(_ _)m
0742nobodyさん2007/11/24(土) 20:03:59ID:???
$db->query('SELECT * FROM `hote_table` WHERE `id` = ?', (integer) $id);
でキャストしてもそうなる?
0743nobodyさん2007/11/25(日) 02:52:34ID:???
$db->-select()
->from( 'table' )
->where( "status = '1'" );

特定条件下で上記 where句を取り除きたい場合、
if($hoge){
$db->-select()
->from( 'table' )
->where( "status = '1'" );
}else{
$db->-select()
->from( 'table' );
}
のようにif文で分けるなどの方法しかないでしょうか?

$db->-select()
->from( 'table' )
if($hoge){ ->where( "status = '1'" ) };
みたいな感じの書き方はないでしょうか。
0744nobodyさん2007/11/25(日) 07:30:29ID:???
>>743
出来ないはず。
whereメソッド戻り値見てみ。すぐに意味が解るはずだから。
0745nobodyさん2007/11/25(日) 13:01:53ID:???
>>743
取り除くんじゃなく必要に応じて足していく

$select = $db->select()->from(〜);
if (条件1) {
 $select->where(〜);
}
if (条件2) {
 $select->order(〜);
}
...
$sql = $select->__toString();
0746nobodyさん2007/11/25(日) 14:26:50ID:???
>>727
ここを参考にしてちょ
 プログラマ向けリファレンスガイド 5.3. Zend_Config_Ini
---引用開始---
デフォルトでは、キーの区切り文字はピリオド (.) です。 しかし、これは変更することもできます。変更するには、 Zend_Config_Ini オブジェクトの作成時に $config のキー 'nestSeparator' を設定します。たとえばこのようになります。
require_once 'Zend/Config/Ini.php';
$config['nestSeparator'] = ':';
$config = new Zend_Config_Ini('/path/to/config.ini', 'staging', $config);
---引用終わり---
0747nobodyさん2007/12/03(月) 21:28:30ID:???
1.0.3 出てるよ
http://framework.zend.com/changelog
0748nobodyさん2007/12/04(火) 01:25:06ID:???
>>747
Google Data PHPクライアントライブラリ、YouTubeやPicasaをサポート
http://journal.mycom.co.jp/news/2007/12/03/036/index.html

ZF 1.0.3以降とZend GdataでYouTube、Picasa Web Albums、Google Documents Listが
サポートされるそうです。
0749nobodyさん2007/12/04(火) 07:19:25ID:???
また内緒でZend_Loaderが変わってたらしいじゃない。
0750nobodyさん2007/12/04(火) 14:24:37ID:???
Gdataとかそんなサブ的な、おまけ的なところ後回しでいいから
Formとか作れよ
0751nobodyさん2007/12/04(火) 16:45:59ID:???
PDFの日本語はまだダメ?
0752nobodyさん2007/12/04(火) 18:14:52ID:???
adroitおもすれ
0753nobodyさん2007/12/05(水) 17:30:35ID:???
1.0.3 リリースで鯖落?
0754nobodyさん2007/12/05(水) 19:11:57ID:???
くう…
良さそうな無料レンサバがみんなPHP4だorz
0755nobodyさん2007/12/05(水) 21:04:00ID:???
xreaでいいじゃん
■ このスレッドは過去ログ倉庫に格納されています