ZendFrameworkってどうよ?
レス数が900を超えています。1000を超えると表示できなくなるよ。
0001nobodyさん
2006/10/07(土) 02:49:15ID:6wQ8r0Dcこれってどうよ?
PHP5に移行したほうがいいのかな
0844nobodyさん
2008/02/02(土) 19:25:23ID:???0845nobodyさん
2008/02/04(月) 14:10:35ID:???そう。ソース追ったら、
$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:???> $this->_mail = new Zend_Mail(Zend_Mime::ENCODING_7BIT);
こっちは new Zend_Mail('ISO-2022-JP'); ですよね?
しかし、ヘッダー関連足すときに自分でencodeしないと変なエンコーディングになって面倒・・
0847nobodyさん
2008/02/04(月) 22:51:58ID:???ああ、ごめん、確かに間違ってたわ
__construct($charset='iso-8859-1')
なのね
0848nobodyさん
2008/02/04(月) 22:58:45ID:???setBodyText($str,'ISO-2022-JP',Zend_Mime::ENCODING_7BIT);
ですな
まぁラッパークラス作ればエンコーディングの指定は毎度毎度やらないだろうからいいんじゃないかな
0849nobodyさん
2008/02/05(火) 13:18:44ID:???今度出る1.5では「FooController::CamelCaseAction」が「foo/camel-case.phtml」になるらしい
ttp://tdiary.ishinao.net/20080204.html#p01
0850nobodyさん
2008/02/05(火) 15:07:24ID:???アンダースコアはpath delimiterに使われてるからか
url: controller/action_name
action: actionName()
view: controller/action_name.phtml
が一番しっくりくるんだけど
0851nobodyさん
2008/02/06(水) 12:07:54ID:P8eN/dUP0852nobodyさん
2008/02/06(水) 23:02:38ID:???controller/action/引数名/値/引数名/値/
ってリクエストの形式だけど、
controller/action/値/値/
の形式でgetParam(0)とかで引数参照できるようにできないのかね。そっちのほうが好きなんだが。
0853nobodyさん
2008/02/07(木) 00:46:59ID:???http://framework.zend.com/manual/ja/zend.controller.router.html
Zend_Controller_Router_Rewrite
のあたりと、getParamsを使うと少し幸せになるかもよ
0855nobodyさん
2008/02/07(木) 10:26:05ID:???0856nobodyさん
2008/02/07(木) 11:18:06ID:???routerにrouteを追加するだけ
$route = new Zend_Controller_Router_Route(':controller/:action/:id/:id2');
$router->addRoute('two_params', $route);
ていうかマニュアル嫁
0857nobodyさん
2008/02/07(木) 23:56:07ID:???ZFっぽく、URLパースして特定のメソッドをInvokeMemberするようIIS7モジュールを
ZFのControllerソース見ながら作ろうとして挫折
便利に使えるように、なんだかんだで内部じゃ頑張ってるんだな、ZF
0858nobodyさん
2008/02/08(金) 00:12:15ID:???0859nobodyさん
2008/02/08(金) 02:27:47ID:kZbVINNL0860nobodyさん
2008/02/08(金) 16:03:42ID:???必ず自分で
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:???1.5はまだ触っていないけど、1.0.3の話で言うと
テーブル名から機械的に作れないようなクラス名を使いたい時だけ $_nameの明示が必要だよ
$_primaryはキー項目を要求するメソッド、たとえばfindを使いたいときに指定してあげる必要があるよ
0863nobodyさん
2008/02/12(火) 10:38:38ID:???ただ、そこにスクリプト置くと効率がいいよってな感じと見ておk?
モデルを簡単に呼び出すようなものがあれば便利なんだけどなぁ
0864nobodyさん
2008/02/12(火) 11:38:37ID:???0865nobodyさん
2008/02/12(火) 11:40:01ID:???いや、仕組みは理解できたんだけど、
ZendにはModelをサポートするような機能がないから気になって・・・
結構Modelに関しては放置してるような記事が数点見られたし、どうなのかなと
0866nobodyさん
2008/02/12(火) 12:54:34ID:???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:???0869nobodyさん
2008/02/12(火) 15:36:00ID:???>モデルを簡単に呼び出すようなものがあれば便利
これって例えばどんな感じ?
ただ、ZFのDB関連は比較的プリミティブだとは思う。
0870nobodyさん
2008/02/12(火) 15:37:06ID:???そのとおり、Pdo_Mysqlが入っていませんでした・・・
Zend_Dbを見ると、Pdo_Mysqlが入っていること前提ということなのでしょうか?
ローカルでできたのにレン鯖でできなかったorz 作り直さなきゃいけないのか・・・
0871nobodyさん
2008/02/12(火) 15:48:39ID:???サーバがCentOSみたいなパッケージベースでバージョンが分かっていて、
PHPのインクルードパスを変更できるなら、
コンパイル済みのpdo_mysqlパッケージをユーザ領域に展開してインクルードできるかも。
当然、コンパイル環境はないんだよね?
0872nobodyさん
2008/02/12(火) 15:50:40ID:???当然ないです。
ということは、ZendDbは使えないということで決定でしょうかorz
おとなしくPEARに戻らないとorz
0873nobodyさん
2008/02/12(火) 18:17:01ID:???pdo_mysqlのドライバが入ってないっていうサーバもアレだな
とりあえずサポートに連絡して
40秒で今からpdo_mysql入れなかったら解約だバカってクレームつけろ
まあライブラリがサポートしてるドライバくらい先に見とけってのもあるけど
mysqliドライバはZend_Dbにあるからmysqliが使えないか調べてみるとか
書き直すくらいなら自分でZend_DbのAPIに合わせて
PHPネイティブのmysqlのfunction使ったドライバ書く方が早いんじゃね
0875nobodyさん
2008/02/14(木) 02:17:26ID:???Pdo_Mysqlが入ってる鯖に乗り換えました
0876nobodyさん
2008/02/14(木) 09:51:02ID:???だったらDb関係は全てPEARで実装するしかないか・・・
$select->from()みたいな感じの記述方法結構気に入ってたのになー
0877nobodyさん
2008/02/14(木) 11:46:52ID:Fq1v3NmX0878nobodyさん
2008/02/14(木) 14:08:48ID:???0879nobodyさん
2008/02/14(木) 16:45:46ID:???0880nobodyさん
2008/02/14(木) 17:35:10ID:???0881nobodyさん
2008/02/14(木) 21:41:48ID:???これはインターフェースを使って実装したからうまくいったなんて例あったら教えてくれ。
0882nobodyさん
2008/02/14(木) 22:07:34ID:???0883nobodyさん
2008/02/14(木) 22:32:59ID:???Javaの例がそのままあてはまる。以上。
0884nobodyさん
2008/02/14(木) 22:35:21ID:???0885nobodyさん
2008/02/14(木) 22:45:12ID:???インターフェイスはメソッドを実装せずにそのまま継承するとエラーを出すクラスを表現する糖衣構文。
絶対なくてはならないものじゃないけど、あった方が便利でいいよね。
0886nobodyさん
2008/02/14(木) 22:54:53ID:???0887nobodyさん
2008/02/14(木) 23:08:42ID:???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:???正直JavaやC#やるまでインターフェイスの便利さが理解できんかった。
便利さが実感できるのは厳格な型がある言語とそうでない言語との違いじゃないかと思う。
0891881
2008/02/15(金) 04:02:49ID:???まさにそうだと思う。PHPなんて何でも受け取れるんだからイランと思う。
PHPは方向を見失ってるな。matzは嫌いだが、言っていることは正論だ。
彼のオブジェクト指向に対する考えの深さには驚く。
0892nobodyさん
2008/02/15(金) 04:13:23ID:???0893nobodyさん
2008/02/15(金) 05:14:03ID:???その割には仕様がない事による迷走具合が酷かったりするが、まあスレ違いだな
phpはどこに向かうんだろな。goto導入とか既にブロガー共の定番ネタ化してるが
0894nobodyさん
2008/02/15(金) 08:03:17ID:???Interfaceいらないっていう理由がよくわからんな
単に自分が使ってないだけじゃないのか?
理由をもうちょい詳しく言ってくれ
0895nobodyさん
2008/02/15(金) 08:28:43ID:???インターフェースが要らないとは書いてないしな。
JavaやC#だってインターフェースを使わなくてもプログラミングが出来る。
しかし、OOPするならインターフェースは欲しい。
言語じゃなくてプログラミングスタイル(っていうのか?)次第じゃね。
0896nobodyさん
2008/02/15(金) 08:54:29ID:WvlYrnu/0897nobodyさん
2008/02/15(金) 09:35:00ID:???890だけど、ごめん言葉足らずだったわ。
要るか要らないかって言うと俺は便利だから要る。
>>895
言いたい事書いてくれてありがとうw
0898nobodyさん
2008/02/15(金) 09:35:35ID:???なんか"エラーを出す"にこだわっているというか重点があるように読めるんだけど、
インターフェースはクライアントに見せる仕様書みたいなものだから、
エラーは二次的なもというかそれ以前の話。
茶碗と箸を用意しても腹はふとらない。
茶碗と箸を使うことを決めてるだけで、クライアントは原則それを使う。
インターフェースでプログラムするのがOOPの基本だろ。
0900898
2008/02/15(金) 10:59:35ID:???いや、意外と重要だと思うんだ。間違いじゃないけど、理解度の問題かな?
俺もOOを100%理解しているとは思えないので間違ってたら叩いてくれ。
茶碗と箸を用意(実体化:new)して「飯が食えない」ってエラーが出て便利か? ってこと。
インターフェースが便利なのは、飯が和食じゃなくて洋食となりお皿とスプーンが
必要となったとしても、それは実装で変えればいいだけでインターフェースは変わらない。
クライアントコードは茶碗と箸で洋食が食える(クライアントコードを修正する必要がない)
例えが変な気もするが許してくれ、言いたいことは伝わると思ってるんだが。
0901nobodyさん
2008/02/15(金) 11:00:22ID:???ワロタ
0902898
2008/02/15(金) 11:08:54ID:???もちろん、茶碗だけ用意して「箸忘れてんどー」ってエラーが出るのは便利。
>>885,896がインターフェースに対してnewしてエラーが出ると言っていると思ってたスマソ。
0903898
2008/02/15(金) 11:27:10ID:???とは言っても、俺的には「実装し忘れてエラー」なんかよりも、
「実装が変わってもクライアントコードはそのまま」がインターフェースの本質だと思ってる。
だから「エラーが出る」とだけ書かれるとなんか引っかかる。
ついに言い訳モード(´・ω・`)
0904nobodyさん
2008/02/15(金) 15:57:20ID:???インターフェースがいらないといってるだけなんだが、良く読んでくれ。
Rubyは動的言語(ダックタイピング)をうまく活かして、インターフェースじゃなく
mixinで多重継承を実現してるといいたいだけ。
>>894
上に述べたことに答えは含まれているけど、
PHPでインターフェース宣言するメリットがどこにあるのかわからない。
Javaは受け取る変数の型によってもクラスを作り変えなきゃいけないからインターフェースで外面を定義するのはわかる。
matzの言葉を借りるなら、「仕様の継承」と「実装の継承」
PHPもJava真似をせずに、違う形で多重継承をサポートすべきといいたい。
0905nobodyさん
2008/02/15(金) 16:18:44ID:WvlYrnu/0906nobodyさん
2008/02/15(金) 16:33:07ID:???上の方でいくつかインターフェイスの利点が挙げられてるけどそれについてはどう思ってるの?
それを言わずに、メリットがどこにあるのかわからない、って言われても俺には何言ってるのかわからない。
すまんけど、もっときちんと説明してくれ。煽りとかじゃなくてマジでわからんから。
0907nobodyさん
2008/02/15(金) 17:26:39ID:???interfaceなんかとりいれる暇があったらmixinを実装しろや。
interfaceの利点なんてmixinのそれに比べれば屁みたいなものだし。
ってことじゃないかと思った。
0908nobodyさん
2008/02/15(金) 19:03:51ID:???Zend_View_Interfaceで既定されたAPI通りに作ればそのまま
Zend_Controllerに放り込んでも動きますよ、っていう感じで
別のクラス内部で使われるものを拡張するような
ライブラリを使う場合にinterfaceの意味はちゃんとあると思うけど
(別になくてもいいけど使う側の苦労が増える)
rubyのmoduleのようなmixinが欲しいってのはそりゃ同意だけど、
配列をブラケット表現で書けるパッチに大半が反対意見の惨状を見る限り
ドラスティックに改善する見込みの無いこの保守的な言語に何言っても無駄だと思うので
PHPの言語仕様に文句言う暇があったら他の言語の勉強してる方がまし
それか、こんなところでウダウダ言ってないでinternalsに苦情のメールを投げつけたらいい
0909nobodyさん
2008/02/15(金) 20:13:04ID:???そんなのイラネ
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:???そういうのはもう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:HodSsYVthashも区別させたいから{}もつかいたい
でもinternalの中の人はそういうの好まないってきいた
0918nobodyさん
2008/02/17(日) 05:11:24ID:???だからインターフェースがあっても意味が半減するかもしれないが...
以前「php4はメンバがオールpublicなんでカプセルかできねーYO」って書き込みがあって、
そんとき、「カプセル化は独立性が目的なんだから、PEARのようにコーディング規約で...」
って書いたんだけど、そんなんじゃ意味ねぇってことだったかな。
で、アクセス権が指定できるようになって、言語仕様上カプセル化が可能になったわけなんだから
カプセル化されたオブジェクトを弄るインターフェースも、ってのは普通の流れになると思うが、
なんでそれがJavaのまねごとになるかなぁ。
一番の自由はユーザの要望かw。
そんな俺はC#の静的コンストラクタが欲しい。
0919nobodyさん
2008/02/17(日) 05:24:11ID:an+fL3fY0921nobodyさん
2008/02/17(日) 12:53:01ID:???> nullと空文字を区別してたり
いや、nullと空文字は概念的に違うものだろ。
ついでに空配列とfalseもそれぞれ違うもの。
たとえばデータベースなんかでも、
nullと空文字は違うもの扱いになっていることが多い。
0922nobodyさん
2008/02/17(日) 13:07:00ID:???それさぁ、前から思っているんだけど、privateなメソッドというものは、
その実装をクラス内部しか知らないわけだから、クラス自身が
自己テストという形でやればいいんじゃないかなと思っている。
つまり、クラスにpublicなtestメソッドを作ってそのメソッドが自己テスト。
問題点としては、クラス自身にテストコードが含まれるため
クラスのコードサイズが膨れ上がるということ。
この問題は、C# 2.0の話になるが、C#には一つのクラスを複数のファイルで書くことができる
partial というものがあってそれを使えばテストコードを分離しながらテスト時にはテストコードを
追加してコンパイルリリース時には省いてコンパイルという方法が使えると思う。
とここまで書いたが、単純に条件コンパイルでリリースモードの場合testコードを取り除くという方法でいいかw
テストコードを別ファイルにしたかったら、include。
0923nobodyさん
2008/02/17(日) 13:11:50ID:???validatorsには、受け取る可能性のある全てのフィールド (パラメーター) 名を指定しないと行けないのでしょうか。
どんなフィールド名が来るかわからない時にZend_Filter_Inputオブジェクトを取得する良い方法はありますか?
一部のフィールドにはvalidatorを掛けたいので、
validatorsに指定していないフィールドが来た時はvalidateなしでそのまま格納する、
と言うオプションでもあれば良いんですが、今のところ見当たらなくて。
こっちのフィールドがこういう値だったらこっちのフィールドはこういう値じゃないと駄目、
とか言うチェックもやりづらいし。。
0924922
2008/02/17(日) 13:44:48ID:???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);
}
}
0925922
2008/02/17(日) 13:47:15ID:???ユニットテストはそもそもpublicなものをやるものだとか
いう話はあるけど、自己テストという形でやるべきだという
話は聞いたこと無いんだよね。
まあ詳しく調べたわけじゃないから知らないだけだろうけど。
誰か知っていたら教えて。
0926922
2008/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:???こんな使い方でいいのかな?
0928nobodyさん
2008/02/18(月) 10:48:32ID:???0929nobodyさん
2008/02/18(月) 11:12:15ID:IeH302DJ0931nobodyさん
2008/02/18(月) 17:09:03ID:???WebフレームワークだとControllerはRouterになりがち
ただ、遷移の多いアプリであれば、Routerこそが処理とも思える
まあ、役割がちゃんと分かれていればいいんじゃないの
0932nobodyさん
2008/02/18(月) 18:06:25ID:???データを移動するような処理は
どこに書けばいいのだろうか?
0933nobodyさん
2008/02/18(月) 19:06:28ID:+oxjUq0Hであるように、Zend_View_Smartyを使った場合、テンプレートファイルが
あちこちにある場合は、どうしたらいいのでしょう? setScriptPathだと
ひとつしか設定できないよね?
0934nobodyさん
2008/02/18(月) 19:42:55ID:???そもそもSmarty自体が複数のパスに対応してないからしょうがない
まあパスが複数必要になるケース自体も稀だと思うが
最悪、複数Viewのインスタンスを用意して別々のパスを設定すればいいよ
それが手っ取り早いだろう
0935nobodyさん
2008/02/18(月) 20:57:41ID:???結局DB主体に作ってる。
4〜5のマスタを管理するコントローラと、3〜4の関係を管理するコントローラみたいな。
でも結合させるから境界なんてあいまいだし。
流用するモデルもあまりないから利点が実感できない。結局アクションごとに独立しちゃってる。
0936nobodyさん
2008/02/18(月) 23:13:03ID:???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:???0938nobodyさん
2008/02/19(火) 00:07:36ID:???0939nobodyさん
2008/02/19(火) 01:42:45ID:???それはたぶん、主となるマスタ側のモデルでしょ
モデルさえ定義しておけば自然にロジックが機能するのが理想
0940nobodyさん
2008/02/19(火) 02:51:44ID:???理屈は分かるんだけどやはり実物を見ないと理解が深まらない。
0941nobodyさん
2008/02/19(火) 03:27:03ID:???0942nobodyさん
2008/02/19(火) 03:29:43ID:???重い死に行くフレームワークを持ってこられても・・・
0943nobodyさん
2008/02/19(火) 03:47:56ID:???レス数が900を超えています。1000を超えると表示できなくなるよ。