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

ZendFrameworkってどうよ?

レス数が900を超えています。1000を超えると表示できなくなるよ。
0001nobodyさん2006/10/07(土) 02:49:15ID:6wQ8r0Dc
ようやくVer.1.0が出るらしいね
これってどうよ?

PHP5に移行したほうがいいのかな
0844nobodyさん2008/02/02(土) 19:25:23ID:???
そういうわけでなくハイフン区切りにしなくてもということ
0845nobodyさん2008/02/04(月) 14:10:35ID:???
>>841
そう。ソース追ったら、
$this->getViewScript($this->_request->getActionName());
でViewRendererから呼ばれる
Zend_Controller_Action_Helper_ViewRenderer#_translateSpec
でtolowerしてました。Renderer変えないとだめそうです。
/controller-name/action-name (url) -> ControllerName#actionNameAction (controller) -> controller/action-name.php (view)
がZend推奨ぽいですね。

>>842
>>844
そうですね。これドキュメントまちがってますね。
0846nobodyさん2008/02/04(月) 14:14:16ID:???
>>834
> $this->_mail = new Zend_Mail(Zend_Mime::ENCODING_7BIT);
こっちは new Zend_Mail('ISO-2022-JP'); ですよね?
しかし、ヘッダー関連足すときに自分でencodeしないと変なエンコーディングになって面倒・・
0847nobodyさん2008/02/04(月) 22:51:58ID:???
>>846
ああ、ごめん、確かに間違ってたわ
__construct($charset='iso-8859-1')
なのね
0848nobodyさん2008/02/04(月) 22:58:45ID:???
失礼、引数みるとsetBodyTextも2番目はcharsetなので
setBodyText($str,'ISO-2022-JP',Zend_Mime::ENCODING_7BIT);
ですな
まぁラッパークラス作ればエンコーディングの指定は毎度毎度やらないだろうからいいんじゃないかな
0849nobodyさん2008/02/05(火) 13:18:44ID:???
>>845
今度出る1.5では「FooController::CamelCaseAction」が「foo/camel-case.phtml」になるらしい
ttp://tdiary.ishinao.net/20080204.html#p01
0850nobodyさん2008/02/05(火) 15:07:24ID:???
camelcaseの区切りはアンダースコアにして欲しいんだけどな
アンダースコアはpath delimiterに使われてるからか

url: controller/action_name
action: actionName()
view: controller/action_name.phtml

が一番しっくりくるんだけど
0851nobodyさん2008/02/06(水) 12:07:54ID:P8eN/dUP
オプションで変更できればいいんだけどな。
0852nobodyさん2008/02/06(水) 23:02:38ID:???
このフレームワークって
controller/action/引数名/値/引数名/値/
ってリクエストの形式だけど、
controller/action/値/値/
の形式でgetParam(0)とかで引数参照できるようにできないのかね。そっちのほうが好きなんだが。
0853nobodyさん2008/02/07(木) 00:46:59ID:???
>>852
http://framework.zend.com/manual/ja/zend.controller.router.html
Zend_Controller_Router_Rewrite
のあたりと、getParamsを使うと少し幸せになるかもよ
0854nobodyさん2008/02/07(木) 10:19:25ID:???
>>852
デフォルトでできるんだが
むしろ前者のパターンだと相当古いバージョンを使ってると思うが
0855nobodyさん2008/02/07(木) 10:26:05ID:???
デフォでできんの?どうやんの?
0856nobodyさん2008/02/07(木) 11:18:06ID:???
>>855
routerにrouteを追加するだけ
$route = new Zend_Controller_Router_Route(':controller/:action/:id/:id2');
$router->addRoute('two_params', $route);
ていうかマニュアル嫁
0857nobodyさん2008/02/07(木) 23:56:07ID:???
ttp://msdn.microsoft.com/msdnmag/issues/08/01/PHPandIIS7/default.aspx?loc=jp
ZFっぽく、URLパースして特定のメソッドをInvokeMemberするようIIS7モジュールを
ZFのControllerソース見ながら作ろうとして挫折
便利に使えるように、なんだかんだで内部じゃ頑張ってるんだな、ZF
0858nobodyさん2008/02/08(金) 00:12:15ID:???
1.5のPreでても1.5の話題が全然でなくてしょんぼり。
0859nobodyさん2008/02/08(金) 02:27:47ID:kZbVINNL
でも、良いの〜。あたしゲイツ様に捕まってうれしいの〜♪
0860nobodyさん2008/02/08(金) 16:03:42ID:???
Zend_Db使ってDBの行に値を格納するときって、
必ず自分で
class Bugs extends Zend_Db_Table_Abstract
{
protected $_name = 'bugs';
protected $_primary = 'bug_id';
}
みたいに書かなきゃいけないの?
0861nobodyさん2008/02/08(金) 16:43:41ID:???
そんなことないけど?
0862nobodyさん2008/02/08(金) 23:31:33ID:???
>>860
1.5はまだ触っていないけど、1.0.3の話で言うと
テーブル名から機械的に作れないようなクラス名を使いたい時だけ $_nameの明示が必要だよ

$_primaryはキー項目を要求するメソッド、たとえばfindを使いたいときに指定してあげる必要があるよ
0863nobodyさん2008/02/12(火) 10:38:38ID:???
modelsディレクトリの存在って特に意味ないのかな
ただ、そこにスクリプト置くと効率がいいよってな感じと見ておk?
モデルを簡単に呼び出すようなものがあれば便利なんだけどなぁ
0864nobodyさん2008/02/12(火) 11:38:37ID:???
MVCについて勉強するといいよ
0865nobodyさん2008/02/12(火) 11:40:01ID:???
>>864
いや、仕組みは理解できたんだけど、
ZendにはModelをサポートするような機能がないから気になって・・・
結構Modelに関しては放置してるような記事が数点見られたし、どうなのかなと
0866nobodyさん2008/02/12(火) 12:54:34ID:???
Zend_Db_TableとZend_Db周りがあるじゃない
0867nobodyさん2008/02/12(火) 15:16:31ID:???
質問です。
PDO接続で、どうしてもエラーが出るのですが、
The mysql driver is not currently installed'

MySQLは使えるのですが、PDOの接続ができないということでしょうか?
普通のMySQLとして接続する方法とかないのでしょうか
0868nobodyさん2008/02/12(火) 15:33:30ID:???
pdoは入っているけど、pdo_mysqlが入っていないと見た。
0869nobodyさん2008/02/12(火) 15:36:00ID:???
>863
>モデルを簡単に呼び出すようなものがあれば便利

これって例えばどんな感じ?
ただ、ZFのDB関連は比較的プリミティブだとは思う。
0870nobodyさん2008/02/12(火) 15:37:06ID:???
>>868
そのとおり、Pdo_Mysqlが入っていませんでした・・・
Zend_Dbを見ると、Pdo_Mysqlが入っていること前提ということなのでしょうか?
ローカルでできたのにレン鯖でできなかったorz 作り直さなきゃいけないのか・・・
0871nobodyさん2008/02/12(火) 15:48:39ID:???
pdo_mysqlだとレン鯖では難しいかもしれない。ユーザ領域に追加するのが難しい。
サーバがCentOSみたいなパッケージベースでバージョンが分かっていて、
PHPのインクルードパスを変更できるなら、
コンパイル済みのpdo_mysqlパッケージをユーザ領域に展開してインクルードできるかも。
当然、コンパイル環境はないんだよね?
0872nobodyさん2008/02/12(火) 15:50:40ID:???
>>871
当然ないです。
ということは、ZendDbは使えないということで決定でしょうかorz

おとなしくPEARに戻らないとorz
0873nobodyさん2008/02/12(火) 18:17:01ID:???
php5とmysqlサポートしてるのに
pdo_mysqlのドライバが入ってないっていうサーバもアレだな
とりあえずサポートに連絡して
40秒で今からpdo_mysql入れなかったら解約だバカってクレームつけろ

まあライブラリがサポートしてるドライバくらい先に見とけってのもあるけど
mysqliドライバはZend_Dbにあるからmysqliが使えないか調べてみるとか
書き直すくらいなら自分でZend_DbのAPIに合わせて
PHPネイティブのmysqlのfunction使ったドライバ書く方が早いんじゃね
0874nobodyさん2008/02/13(水) 09:17:27ID:???
>>873
有名なさくら鯖様です
0875nobodyさん2008/02/14(木) 02:17:26ID:???
たまたま自分もさくらで試していたけど、Pdo_Mysqlもmysqliも入ってなかったorz
Pdo_Mysqlが入ってる鯖に乗り換えました
0876nobodyさん2008/02/14(木) 09:51:02ID:???
意外とPdo_Mysqlの入ってる鯖って少ないのかな?
だったらDb関係は全てPEARで実装するしかないか・・・
$select->from()みたいな感じの記述方法結構気に入ってたのになー
0877nobodyさん2008/02/14(木) 11:46:52ID:Fq1v3NmX
xrea
0878nobodyさん2008/02/14(木) 14:08:48ID:???
PDOで$select->from()? PDOはプリペアードステートメントじゃねーの?
0879nobodyさん2008/02/14(木) 16:45:46ID:???
何言ってんの?
0880nobodyさん2008/02/14(木) 17:35:10ID:???
あれ?別のアクション呼び出しって$this->_callじゃなかったっけ・・・
0881nobodyさん2008/02/14(木) 21:41:48ID:???
インターフェースとか正直PHPにとってJava真似のカッコつけでしかないよな。
これはインターフェースを使って実装したからうまくいったなんて例あったら教えてくれ。
0882nobodyさん2008/02/14(木) 22:07:34ID:???
いきなりどうしたんだ?
0883nobodyさん2008/02/14(木) 22:32:59ID:???
> これはインターフェースを使って実装したからうまくいったなんて例あったら教えてくれ。

Javaの例がそのままあてはまる。以上。
0884nobodyさん2008/02/14(木) 22:35:21ID:???
> Javaの例がそのままあてはまる。
0885nobodyさん2008/02/14(木) 22:45:12ID:???
>>881
インターフェイスはメソッドを実装せずにそのまま継承するとエラーを出すクラスを表現する糖衣構文。
絶対なくてはならないものじゃないけど、あった方が便利でいいよね。
0886nobodyさん2008/02/14(木) 22:54:53ID:???
それはabstract classじゃないのか
0887nobodyさん2008/02/14(木) 23:08:42ID:???
>>886
abstractはすでにいくつか実装されたメソッドを持ってるけど、interfaceは持ってない。
まあ似たようなもんだけど。

あ、もしかして>>881は全部abstractでいいじゃんって言いたいのか?
0888nobodyさん2008/02/14(木) 23:31:13ID:???
インターフェイスってタイプヒンティングにも使えたっけ?
0889nobodyさん2008/02/14(木) 23:35:13ID:???
もち。
使えなかったらインターフェイスの意味なくね?そうでもない?
0890nobodyさん2008/02/14(木) 23:41:04ID:???
PHPでの例ならZend_View_Interfaceが良い例だと思うよ。

正直JavaやC#やるまでインターフェイスの便利さが理解できんかった。
便利さが実感できるのは厳格な型がある言語とそうでない言語との違いじゃないかと思う。

08918812008/02/15(金) 04:02:49ID:???
>>890
まさにそうだと思う。PHPなんて何でも受け取れるんだからイランと思う。
PHPは方向を見失ってるな。matzは嫌いだが、言っていることは正論だ。
彼のオブジェクト指向に対する考えの深さには驚く。
0892nobodyさん2008/02/15(金) 04:13:23ID:???
ってかrubyも厳格な型がある言語じゃねーだろ
0893nobodyさん2008/02/15(金) 05:14:03ID:???
厳格もなにも型がない事の利点を見出して活用してる言語だし、881への指摘としては的外れじゃね
その割には仕様がない事による迷走具合が酷かったりするが、まあスレ違いだな

phpはどこに向かうんだろな。goto導入とか既にブロガー共の定番ネタ化してるが
0894nobodyさん2008/02/15(金) 08:03:17ID:???
>>891
Interfaceいらないっていう理由がよくわからんな
単に自分が使ってないだけじゃないのか?
理由をもうちょい詳しく言ってくれ
0895nobodyさん2008/02/15(金) 08:28:43ID:???
>>890はPHPではインターフェースの便利さが理解できなかったって書いてるのであって
インターフェースが要らないとは書いてないしな。
JavaやC#だってインターフェースを使わなくてもプログラミングが出来る。
しかし、OOPするならインターフェースは欲しい。
言語じゃなくてプログラミングスタイル(っていうのか?)次第じゃね。
0896nobodyさん2008/02/15(金) 08:54:29ID:WvlYrnu/
インターフェースってのはつまり、エラー報告機能のついたドキュメントだよね。
0897nobodyさん2008/02/15(金) 09:35:00ID:???
>>891 >>893
890だけど、ごめん言葉足らずだったわ。
要るか要らないかって言うと俺は便利だから要る。

>>895
言いたい事書いてくれてありがとうw
0898nobodyさん2008/02/15(金) 09:35:35ID:???
>>885,896
なんか"エラーを出す"にこだわっているというか重点があるように読めるんだけど、
インターフェースはクライアントに見せる仕様書みたいなものだから、
エラーは二次的なもというかそれ以前の話。
茶碗と箸を用意しても腹はふとらない。
茶碗と箸を使うことを決めてるだけで、クライアントは原則それを使う。
インターフェースでプログラムするのがOOPの基本だろ。
0899nobodyさん2008/02/15(金) 10:13:42ID:???
>>898
エラーを出すから仕様書みたいな扱いにできるんじゃね?
まあ鶏が先か卵が先かみたいな話になるけど。
09008982008/02/15(金) 10:59:35ID:???
>>899
いや、意外と重要だと思うんだ。間違いじゃないけど、理解度の問題かな?
俺もOOを100%理解しているとは思えないので間違ってたら叩いてくれ。

茶碗と箸を用意(実体化:new)して「飯が食えない」ってエラーが出て便利か? ってこと。
インターフェースが便利なのは、飯が和食じゃなくて洋食となりお皿とスプーンが
必要となったとしても、それは実装で変えればいいだけでインターフェースは変わらない。
クライアントコードは茶碗と箸で洋食が食える(クライアントコードを修正する必要がない)

例えが変な気もするが許してくれ、言いたいことは伝わると思ってるんだが。
0901nobodyさん2008/02/15(金) 11:00:22ID:???
> 茶碗と箸を用意(実体化:new)して「飯が食えない」

ワロタ
09028982008/02/15(金) 11:08:54ID:???
ごめん、ちょっと勘違いw。
もちろん、茶碗だけ用意して「箸忘れてんどー」ってエラーが出るのは便利。
>>885,896がインターフェースに対してnewしてエラーが出ると言っていると思ってたスマソ。
09038982008/02/15(金) 11:27:10ID:???
なんかツッコミどころを間違えて、ちょっとじゃなくて大きな勘違いだったな。マジでスマソ。
とは言っても、俺的には「実装し忘れてエラー」なんかよりも、
「実装が変わってもクライアントコードはそのまま」がインターフェースの本質だと思ってる。
だから「エラーが出る」とだけ書かれるとなんか引っかかる。
ついに言い訳モード(´・ω・`)
0904nobodyさん2008/02/15(金) 15:57:20ID:???
>>892
インターフェースがいらないといってるだけなんだが、良く読んでくれ。
Rubyは動的言語(ダックタイピング)をうまく活かして、インターフェースじゃなく
mixinで多重継承を実現してるといいたいだけ。

>>894
上に述べたことに答えは含まれているけど、
PHPでインターフェース宣言するメリットがどこにあるのかわからない。
Javaは受け取る変数の型によってもクラスを作り変えなきゃいけないからインターフェースで外面を定義するのはわかる。
matzの言葉を借りるなら、「仕様の継承」と「実装の継承」

PHPもJava真似をせずに、違う形で多重継承をサポートすべきといいたい。
0905nobodyさん2008/02/15(金) 16:18:44ID:WvlYrnu/
厳格性を重視するなら、mix-inとインターフェースは対立するよね。
0906nobodyさん2008/02/15(金) 16:33:07ID:???
>>904
上の方でいくつかインターフェイスの利点が挙げられてるけどそれについてはどう思ってるの?
それを言わずに、メリットがどこにあるのかわからない、って言われても俺には何言ってるのかわからない。
すまんけど、もっときちんと説明してくれ。煽りとかじゃなくてマジでわからんから。
0907nobodyさん2008/02/15(金) 17:26:39ID:???
PHPはJavaじゃねえっつーの。
interfaceなんかとりいれる暇があったらmixinを実装しろや。
interfaceの利点なんてmixinのそれに比べれば屁みたいなものだし。

ってことじゃないかと思った。
0908nobodyさん2008/02/15(金) 19:03:51ID:???
Zendの例で言うとViewを拡張してオレオレViewを作りたい、って時に
Zend_View_Interfaceで既定されたAPI通りに作ればそのまま
Zend_Controllerに放り込んでも動きますよ、っていう感じで
別のクラス内部で使われるものを拡張するような
ライブラリを使う場合にinterfaceの意味はちゃんとあると思うけど
(別になくてもいいけど使う側の苦労が増える)

rubyのmoduleのようなmixinが欲しいってのはそりゃ同意だけど、
配列をブラケット表現で書けるパッチに大半が反対意見の惨状を見る限り
ドラスティックに改善する見込みの無いこの保守的な言語に何言っても無駄だと思うので
PHPの言語仕様に文句言う暇があったら他の言語の勉強してる方がまし
それか、こんなところでウダウダ言ってないでinternalsに苦情のメールを投げつけたらいい
0909nobodyさん2008/02/15(金) 20:13:04ID:???
mixinてIDEの自動補完きかないよね?
そんなのイラネ
0910nobodyさん2008/02/16(土) 08:06:46ID:???
コーラ噴いた
0911nobodyさん2008/02/16(土) 12:52:02ID:???
静的で型の強い言語で得られる利点と、動的で型の弱い言語で得られる利点は違う。
型推論を持つ関数言語では、コンパイル時のほぼ全てのバグを検出できるというけど、
PHPはもともとそういうところを目指した言語ではないから、
PHPの性質からいえば、mixinみたいなものの方が緩くていいように思う。
var引数にどんなクラスのインスタンスも渡せてしまうというのが、
欠点なのか利点なのかというのは、バグ検出の立場から言えば明らかに欠点だけど、
例えばストラテジー・パターンでアルゴリズムを書いた場合に、
C++のテンプレート・アルゴリズムみたいに使えるという利点はある。
interfaceの話で言えば、ここである程度型の保証をしたいということになる。
0912nobodyさん2008/02/16(土) 14:07:24ID:???
これ以上PHPをゆるくするのは個人的には勘弁だなあ
そういうのはもうRubyでやればいいんじゃね?と思う
PHPはJavaのマネをすべきとは思わんがRubyのマネをすべきとも思わんしなあ
0913nobodyさん2008/02/16(土) 14:32:09ID:???
半端なのがまずいんでしょ
結局phpは緩い自由度提供したいのか、
堅いチェックできっちり作れる言語にしたいのか。

両方を上手く取り入れられれば理想なんだけど、そうもいかんしね
現状では妥協点がはっきりしないまま迷走してる
0914nobodyさん2008/02/16(土) 14:44:56ID:???
現状は前者だろ?
後者に揺れて迷走してるって具体的に何を指してるんだ?
0915nobodyさん2008/02/16(土) 15:11:24ID:???
え?おれ自由って認識ないな。制約だらけというか
とりあえずcreate_functionは不自由だと思う。透過的に引っ張り回せないし。
nullと空文字を区別してたり===/!==が必要になったりってのも
リフレクション周りも妙に不自由するじゃない

良い意味でユルい言語ではないし、良い意味で堅い言語でもない
0916nobodyさん2008/02/16(土) 15:12:20ID:???
「良い意味でユルい言語」ではないし、「良い意味で堅い言語」でもない

としないと意味が逆にw
0917nobodyさん2008/02/17(日) 01:52:40ID:HodSsYVt
array();なんて書くのかったるいから[]でいいし
hashも区別させたいから{}もつかいたい
でもinternalの中の人はそういうの好まないってきいた
0918nobodyさん2008/02/17(日) 05:11:24ID:???
ゆるい/堅いというより型が動的だからなぁ。
だからインターフェースがあっても意味が半減するかもしれないが...

以前「php4はメンバがオールpublicなんでカプセルかできねーYO」って書き込みがあって、
そんとき、「カプセル化は独立性が目的なんだから、PEARのようにコーディング規約で...」
って書いたんだけど、そんなんじゃ意味ねぇってことだったかな。
で、アクセス権が指定できるようになって、言語仕様上カプセル化が可能になったわけなんだから
カプセル化されたオブジェクトを弄るインターフェースも、ってのは普通の流れになると思うが、
なんでそれがJavaのまねごとになるかなぁ。

一番の自由はユーザの要望かw。
そんな俺はC#の静的コンストラクタが欲しい。
0919nobodyさん2008/02/17(日) 05:24:11ID:an+fL3fY
privateなメソッドの単体テストってどうしてる?
0920nobodyさん2008/02/17(日) 07:36:43ID:???
>>919
単体テスト?
何か問題でも?
0921nobodyさん2008/02/17(日) 12:53:01ID:???
>>915
> nullと空文字を区別してたり

いや、nullと空文字は概念的に違うものだろ。
ついでに空配列とfalseもそれぞれ違うもの。

たとえばデータベースなんかでも、
nullと空文字は違うもの扱いになっていることが多い。
0922nobodyさん2008/02/17(日) 13:07:00ID:???
>>919
それさぁ、前から思っているんだけど、privateなメソッドというものは、
その実装をクラス内部しか知らないわけだから、クラス自身が
自己テストという形でやればいいんじゃないかなと思っている。

つまり、クラスにpublicなtestメソッドを作ってそのメソッドが自己テスト。

問題点としては、クラス自身にテストコードが含まれるため
クラスのコードサイズが膨れ上がるということ。

この問題は、C# 2.0の話になるが、C#には一つのクラスを複数のファイルで書くことができる
partial というものがあってそれを使えばテストコードを分離しながらテスト時にはテストコードを
追加してコンパイルリリース時には省いてコンパイルという方法が使えると思う。

とここまで書いたが、単純に条件コンパイルでリリースモードの場合testコードを取り除くという方法でいいかw
テストコードを別ファイルにしたかったら、include。
0923nobodyさん2008/02/17(日) 13:11:50ID:???
Zend_Filter_Inputを各画面で使いたいんですけど、
validatorsには、受け取る可能性のある全てのフィールド (パラメーター) 名を指定しないと行けないのでしょうか。
どんなフィールド名が来るかわからない時にZend_Filter_Inputオブジェクトを取得する良い方法はありますか?

一部のフィールドにはvalidatorを掛けたいので、
validatorsに指定していないフィールドが来た時はvalidateなしでそのまま格納する、
と言うオプションでもあれば良いんですが、今のところ見当たらなくて。

こっちのフィールドがこういう値だったらこっちのフィールドはこういう値じゃないと駄目、
とか言うチェックもやりづらいし。。
09249222008/02/17(日) 13:44:48ID:???
雑にだけどPHP版で書いてみた。
class A {
 private $value = 1;
 private function foo() {
  $this->value++;
 }
 public function test($unit_case_object) {
  include 'a.test.php';
 }
}
//テストコード a.test.php
<?php
$unit_case_object->assertEqual($this->value,1);
$this->foo();
$unit_case_object->assertEqual($this->value,2);
$unit_case_object->assertEqual($this->value,100);
?>

//UnitCaseからこんな感じで呼ばれる予定
class UnitCaseMock {
 function assertEqual($value1, $value2) {
  if($value1!=$value2) {
   print $value1. ' != ' . $value2 . '<br>';
  }
 }
}
class TestCase extends UnitCaseMock {
 function test() {
  $a = new A;
  $a->test($this);
 }
}
09259222008/02/17(日) 13:47:15ID:???
privateメソッドはテストすべきとか
ユニットテストはそもそもpublicなものをやるものだとか
いう話はあるけど、自己テストという形でやるべきだという
話は聞いたこと無いんだよね。

まあ詳しく調べたわけじゃないから知らないだけだろうけど。
誰か知っていたら教えて。
09269222008/02/17(日) 13:57:17ID:???
思いついた改良ポイント

class Aをの親クラスでfunction testを作っておけば
class Aを継承させるだけですむ。

テストコードのファイルをクラス名から自動判断。
またフォルダにし、a.test/〜.php という形にすれば、
テストコードを記述したファイルを細かく分けられる。
そこに、setUp.php tearDown.php を作ることで、初期化・終了コードも実行できる。
0927nobodyさん2008/02/18(月) 09:53:58ID:???
Modelsって、一部の動作を簡略化するためにライブラリみたいな感じで置いて使ってるんだが、
こんな使い方でいいのかな?
0928nobodyさん2008/02/18(月) 10:48:32ID:???
modelが処理の根幹だろ・・・
0929nobodyさん2008/02/18(月) 11:12:15ID:IeH302DJ
modelsにPEARも置いてる俺
0930nobodyさん2008/02/18(月) 16:00:19ID:???
>>928
処理はあくまでコントローラで処理のサポートの主な部分がモデルだろ
0931nobodyさん2008/02/18(月) 17:09:03ID:???
通常はModelがビジネスロジックを持つ
WebフレームワークだとControllerはRouterになりがち
ただ、遷移の多いアプリであれば、Routerこそが処理とも思える
まあ、役割がちゃんと分かれていればいいんじゃないの
0932nobodyさん2008/02/18(月) 18:06:25ID:???
一つのモデルから、もう一つのモデルへ
データを移動するような処理は
どこに書けばいいのだろうか?
0933nobodyさん2008/02/18(月) 19:06:28ID:+oxjUq0H
http://framework.zend.com/manual/ja/zend.view.scripts.html#zend.view.scripts.templates

であるように、Zend_View_Smartyを使った場合、テンプレートファイルが
あちこちにある場合は、どうしたらいいのでしょう? setScriptPathだと
ひとつしか設定できないよね?
0934nobodyさん2008/02/18(月) 19:42:55ID:???
>>933
そもそもSmarty自体が複数のパスに対応してないからしょうがない
まあパスが複数必要になるケース自体も稀だと思うが
最悪、複数Viewのインスタンスを用意して別々のパスを設定すればいいよ
それが手っ取り早いだろう
0935nobodyさん2008/02/18(月) 20:57:41ID:???
コントローラの分割の仕方が良く分からない。
結局DB主体に作ってる。
4〜5のマスタを管理するコントローラと、3〜4の関係を管理するコントローラみたいな。
でも結合させるから境界なんてあいまいだし。
流用するモデルもあまりないから利点が実感できない。結局アクションごとに独立しちゃってる。
0936nobodyさん2008/02/18(月) 23:13:03ID:???
>>933
Zend_Controller_Action_HelperBroker::addHelper($viewRender);
で $viewRenderを指定すると、よろしくコントローラにひもづいたテンプレートを
取得してくれるけど、そういう話ではない?

単純に色んなパスから取得するのなら、毎回setSctriptPathを指定するしかないんじゃないかなぁ。
$smarty->setSctriptPath('path/to/foo');
$foo = $smarty->render('path/to/foo.tpl');
$smarty->setSctriptPath('path/to/bar');
$bar = $smarty->render('path/to/bar.tpl');

$smarty->setScriptPath('path/to/hoge');
$smarty->assign('foo', $foo);
$smarty->assign('bar', $bar);
$hoge = $smarty->render('path/to/hoge.tpl');
echo $hoge;
0937nobodyさん2008/02/18(月) 23:40:09ID:???
Zend/View/Smarty.phpの中身を好きなように書き換えればおk
0938nobodyさん2008/02/19(火) 00:07:36ID:???
なんだかんだでSmarty利用率高いよな
0939nobodyさん2008/02/19(火) 01:42:45ID:???
>932
それはたぶん、主となるマスタ側のモデルでしょ
モデルさえ定義しておけば自然にロジックが機能するのが理想
0940nobodyさん2008/02/19(火) 02:51:44ID:???
なんかMVCの良い見本になるオープンソースアプリとかないかね。
理屈は分かるんだけどやはり実物を見ないと理解が深まらない。
0941nobodyさん2008/02/19(火) 03:27:03ID:???
Struts
0942nobodyさん2008/02/19(火) 03:29:43ID:???
> Struts

重い死に行くフレームワークを持ってこられても・・・

0943nobodyさん2008/02/19(火) 03:47:56ID:???
SSH(笑)の一角を死に行くとかいわれても・・・
レス数が900を超えています。1000を超えると表示できなくなるよ。