ZendFrameworkってどうよ?
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2006/10/07(土) 02:49:15ID:6wQ8r0Dcこれってどうよ?
PHP5に移行したほうがいいのかな
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:eWyQP34E0680nobodyさん
2007/11/17(土) 11:44:10ID:???俺ならUserにregisterメソッドを用意して
その中でbeginTracnsanctionして
UserへのinsertとUserProfileへのinsertを行う
って感じでmodelに押し込めるな
Controllerからはトランザクションを意識したくはないな
0681nobodyさん
2007/11/17(土) 16:52:25ID:???でUser::insert(),UserProfile::insert()
でControllerでcommitする。
Controllerでトランザクション意識するのってそんなに良くない事かな?
俺はどっちかっていうとmodelでcommitすることに抵抗あるな。
トランザクションの制御はなるべく外側でやりたい。
0682nobodyさん
2007/11/17(土) 20:07:19ID:???0683681
2007/11/17(土) 20:44:28ID:???そうか、やっぱりダメか。
なんかControllerで何やって良いかまだ良く分かってないんだ。
なら>>677の別の解答として、
UserRegisterクラスを作って
その中で
beginTracnsanction()
User::insert()
UserProfile::insert()
commit()
とするのはどうかな。
0684nobodyさん
2007/11/17(土) 20:53:01ID:???いや俺もコントローラでコミットするよ。
そんでbeginとcommitの場所はソース的には一カ所になるようにする。
そうすると安全。
0686nobodyさん
2007/11/17(土) 21:18:14ID:???0687nobodyさん
2007/11/18(日) 00:20:09ID:???0688nobodyさん
2007/11/18(日) 00:54:29ID:???まー好きにしろってこった。
0689nobodyさん
2007/11/18(日) 02:40:59ID:???データの処理関係はモデルです。曖昧も何もない。勉強不足
0690nobodyさん
2007/11/18(日) 02:48:04ID:???根本的にセンスがない。
0691nobodyさん
2007/11/18(日) 04:27:24ID:???モデルって結構幅広いから
どういう設計にしたらいいかすっげー悩むんだけど
その辺のルールがよくわからない
0693nobodyさん
2007/11/18(日) 07:29:05ID:???0694nobodyさん
2007/11/18(日) 07:33:16ID:???0695nobodyさん
2007/11/18(日) 08:02:11ID:???0696688
2007/11/18(日) 08:16:49ID:???ぶっちゃけZendFramewordつかってないから良くしらんのだがwww
単に複数の別クラスのモデルを1つのトランザクションで処理するときどうするの?
0697nobodyさん
2007/11/18(日) 08:32:29ID:???Cでコントロールしてもおかしくない
0698nobodyさん
2007/11/18(日) 08:55:51ID:???0699nobodyさん
2007/11/18(日) 09:01:34ID:???0702688
2007/11/18(日) 12:18:02ID:???うわ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:???try {
トランザクション開始
アクション関数呼び出し
} catch () {
ロールバック
ログ出力
} finally {
例外じゃなきゃコミット
}
アクション内ではトランザクションとか何も意識しない
とかなっとけばいいんでないの?
モデルのなかでいちいちトランザクション貼ってロールバックとか
毎回書く方がナンセンスじゃないか?
複数のモデルの処理が全部正常に行われたらコミット、
何か1つでも失敗あったらロールバックてときも上の方法だと何も考えなくても対処できてる。
0708569
2007/11/18(日) 14:56:17ID:???0709nobodyさん
2007/11/18(日) 15:11:10ID:???アクション内全部が1トランザクションとか愚の骨頂
どんなアクションだろうが最初にファイルをオープンしてロックかけておけば
いつでもファイルいじれるよ!どうだい柔軟で便利だろ!
とか言ってるのと同じくらいバカ
CだろうがMだろうがどこでトランザクション張ってようが
そこで毎回rollbackの対応を書いたりなんてしない
FW使ってるなら普通上層で一元的に例外に対するコントロール部分があるし
そもそも例外発生したらcommitされないんだから
そのまま終了しても自動的にrollbackされる
0710707
2007/11/18(日) 15:47:47ID:???すまん、>>707は簡素すぎた。
実際はopenTransaction()ってメソッドが親のコントローラとかにあって、
それを呼ぶとトランザクションが貼られる。
で、明示的にアクション内でcommit()呼ばないとアクション抜けたときに自動的にコミット。
>FW使ってるならほげほげ
そういう仕組みがあるならいいよ。
てか上の話見てて毎回書くようなことを書いてるように見えたから
ちょっぴり自己主張しちゃいました。
>>708
すまん、実はJava厨が紛れ込んだだけなんだ。
0711nobodyさん
2007/11/18(日) 19:22:08ID:kBwRbUKB0712nobodyさん
2007/11/18(日) 19:24:42ID:???例外投げられたらcatchに移行する
例外投げられなかったらfinallyが実行される
てことはtryの最後にfillany内の処理書いとけば同じことじゃんなんて思うんだが
0714707
2007/11/18(日) 20:32:34ID:???namespaceもほしいお
>>712
ファイルとかセッション閉じる処理とか例外でも正常終了でもしないといけないっしょ?
そういうのをfainallyにまとめて書くのだ。
0715nobodyさん
2007/11/18(日) 20:54:37ID:???(^-^)
0716nobodyさん
2007/11/18(日) 21:36:37ID:???PHPの場合はリクエスト(≠プロセス)終了時に変数はすべて開放されるし、
そのときリソースも開放される。(ファイルを閉じたり、DBならトランザクションを
アボートしてコネクションを閉じたりする。セッションハンドラも然り)
てなわけで、JavaやC++ほどfinally節の必要性は感じない。
まあ無いよりはあった方がいいとは思うけど。
0717707
2007/11/18(日) 22:45:39ID:???確かにphpではfinallyはあんまいらないかも。
0718nobodyさん
2007/11/18(日) 23:06:35ID:???finallyで処理する必要があるんだよね。
DB接続もリクエストをまたいで使い回すのが普通だし。
0719nobodyさん
2007/11/18(日) 23:39:18ID:???0720707
2007/11/19(月) 00:10:52ID:???そうなんだよね。
そういう点ではC++のがデストラクタにきっちり組み込めるのでfinally無しでもいけたりする。
>>719
Javaはフレームワークは混沌としてる。
結局railsだけだなFW的にまともに軌道乗ってるの。
VM乗って高速化したらrailsの天下かもね。
0721nobodyさん
2007/11/19(月) 00:55:15ID:???0722nobodyさん
2007/11/19(月) 01:06:02ID:???0723nobodyさん
2007/11/19(月) 13:24:40ID:xD0eowNdなかなか良いこと言うな
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:???[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:???Controllerとやたら密接に絡んでるせいですんげぇ使いづらい・・
0731nobodyさん
2007/11/22(木) 03:26:56ID:???しなくてもよさそうなもんなのに
0732nobodyさん
2007/11/22(木) 12:08:27ID:8IILrWGo$front->setParam("noViewRenderer",true);
にしておけ。
0733nobodyさん
2007/11/23(金) 04:43:01ID:???0734nobodyさん
2007/11/23(金) 11:37:35ID:???ドキュメント嫁
0735nobodyさん
2007/11/23(金) 16:12:50ID:???真珠の掲示板ですら設置できない低スキルで、毎月数十万のぼったくり請求している酷い業界。
0736nobodyさん
2007/11/23(金) 17:03:13ID:???0737727
2007/11/24(土) 14:31:21ID:???0738nobodyさん
2007/11/24(土) 16:34:31ID:???設定ファイル読み込むだけのクラスが
直感的に使えない時点でもう何かダメだと思うんだ
0739nobodyさん
2007/11/24(土) 17:03:10ID:???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:???でキャストしてもそうなる?
0743nobodyさん
2007/11/25(日) 02:52:34ID:???->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'" ) };
みたいな感じの書き方はないでしょうか。
0745nobodyさん
2007/11/25(日) 13:01:53ID:???取り除くんじゃなく必要に応じて足していく
$select = $db->select()->from(〜);
if (条件1) {
$select->where(〜);
}
if (条件2) {
$select->order(〜);
}
...
$sql = $select->__toString();
0746nobodyさん
2007/11/25(日) 14:26:50ID:???ここを参考にしてちょ
プログラマ向けリファレンスガイド 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:???http://framework.zend.com/changelog
0748nobodyさん
2007/12/04(火) 01:25:06ID:???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:???0750nobodyさん
2007/12/04(火) 14:24:37ID:???Formとか作れよ
0751nobodyさん
2007/12/04(火) 16:45:59ID:???0752nobodyさん
2007/12/04(火) 18:14:52ID:???0753nobodyさん
2007/12/05(水) 17:30:35ID:???0754nobodyさん
2007/12/05(水) 19:11:57ID:???良さそうな無料レンサバがみんなPHP4だorz
0755nobodyさん
2007/12/05(水) 21:04:00ID:???0756nobodyさん
2007/12/06(木) 03:32:59ID:???0757nobodyさん
2007/12/06(木) 11:19:10ID:???(日本時間で 冬15時、夏14時)ダウンロードするものを済ませ
たほうがいいよ。それ以降は混雑しますので、Zend Frameworkに限らず。
0758nobodyさん
2007/12/08(土) 21:58:18ID:???インストールや初期設定は終わり、一番最初のindexアクションは成功。
controllers/以下にIndexController.phpを作って
http://127.0.0.1/
でIndexController.phpのindexactionは表示できるようになった。
そこで次は別のを作成。
controllers配下にMainController.phpを作成
<?php
require_once 'Zned/Controller/Action.php';
class MainController extends Zned_Controller_Action
{
public function indexAction()
{ echo "初期"; }
public function newsAction()
{ echo "ニュース"; }
}
内容は単純なこんなもの。
調べた結果によると、
http://127.0.0.1/main/ でアクセスすれば初期と表示され
http://127.0.0.1/main/news/ でアクセスすればニュースと表示されるはずなのに
どちらも
Not Found
The requested URL /main/ was not found on this server.
とでて表示されない。
何か設定が足りないのだろうか?
ttp://blog.so-net.ne.jp/pluto-blog/
環境はこのブログを参考にして構築してみた。
0759nobodyさん
2007/12/08(土) 22:05:50ID:???スペル間違い訂正。
修正しても変わらず。
0760nobodyさん
2007/12/08(土) 22:08:31ID:???でも404だと根本的にroutingできてなさそうだな
.htaccessを確認をしてみるとか
0761nobodyさん
2007/12/08(土) 22:18:28ID:???そもそもApacheの方で設定できてなかった・・・orz
設定後、表示はされるようになりました。
しかし何故か文字化け・・・
日本語を使うと文字化けしてしまう。
でもIndexController.phpの方は日本語でもちゃんと表示される。
MainController.phpの方だと文字化けしてしまっている。
それぞれのファイルの保存文字コードや改行コードを調べてみるもどちらもUTF-8で保存、改行はLFのみ。
全部化けるならPHPのマルチバイト辺りの設定かなと思うのだけど、
indexのが化けないで、mainが化ける意味が・・・
0762nobodyさん
2007/12/08(土) 22:34:52ID:???response headerでもcharset指定してないんだったら
そりゃ化けてもおかしくないだろう
・とりあえず吐き出す内容にmetaタグ入れてみる
・responseのcontent-typeヘッダにcharset指定を入れる
くらい最低試せ
0763nobodyさん
2007/12/08(土) 22:48:26ID:???indexが化けなかったのは日本語が長めだったからブラウザが自動認識してたみたい。
初期とかじゃないくて同じ文字入れたら化けなかった。
こっちは短すぎてブラウザが文字コード断定するに至らなかったようだ。
metaタグ入れたら短くてもちゃんと表示されるようになった。
どうもありがとう。
一通りいけたので、これから頑張ってやっていけそう。
0764nobodyさん
2007/12/08(土) 23:59:02ID:vYBrSVgv0765nobodyさん
2007/12/15(土) 17:18:24ID:???ZF 1.5
2008年第1四半期予定?
0766nobodyさん
2007/12/19(水) 21:47:47ID:???あまりユーザいないのかもしれないけどよろしく。
0767nobodyさん
2007/12/20(木) 00:41:26ID:xSS/j6Nl0768nobodyさん
2007/12/20(木) 04:01:45ID:???0769nobodyさん
2007/12/20(木) 06:46:02ID:???$front->setBaseUrl('/sample');
とやって、(たぶんsetBaseUrl()していることは関係ないと思うけど)
ttp://localhost/sample/
とか
ttp://localhost/sample/index
ではちゃんとアクセスできるんですが、
ttp://localhost/sample/index.php
でエラーが発生するのはデフォ?
dumpさせると
["controller"] => string(9) "index.php"
["action"] => string(5) "index"
["module"] => string(7) "default"
ってあったから、「"Index.php"と言うコントローラ(Index.phpController.php)が無いよ!」
ってことなんだろうけど、ほんとうにこの動作がデフォルトなんだろうか?
0770nobodyさん
2007/12/20(木) 06:46:51ID:???0772nobodyさん
2007/12/20(木) 17:09:50ID:???さんくす、そうだったのか。
>>770
うまく伝わらなかった? それとも「今更」だったのか。
まぁ、今更だったんだろうけど、念のため確認しておきたかった。
既出だったらスマソ。
そこで、/sample/index.phpとアクセスされた場合、みなさんどうしてる?
1. エラーメッセージhtmlを吐く
2. ErrorControllerから _forward('index')
3. ErrorControllerから setRedirect() でHTTP Location: ヘッダーを吐く。
他
2と3を比べた場合、2の方が負荷が低いだろうけど、何となく気持ち悪いので3かな。
0773nobodyさん
2007/12/20(木) 19:15:15ID:???いや、というかURL Routingしてんだから
index.phpというURLに対して特別にRoutingする必要自体がない
404 Not Foundにするべき
(すでにindex.phpで公開していてその形に変更するなら
ブックマークへの対応としてindexへリダイレクトする必要はあると思うけど)
バックエンドがphpであろうとperlであろうと
最終的にブラウザに返すリソースはこの場合htmlであって
.phpというURLにリクエストしなきゃいけないのはあくまでサーバ側の都合によるもの
0775nobodyさん
2007/12/20(木) 21:45:37ID:???自分でそういう風にルーティング設定しているのにわざわざ騒いでて意味わかんねってこと。
index.phpにリクエストが来てどういう挙動をすれば納得したんだ?
■ このスレッドは過去ログ倉庫に格納されています