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

ZendFramework Part2

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2008/03/05(水) 23:21:24ID:???
公式
http://framework.zend.com/

マニュアル
http://framework.zend.com/manual/ja/

m-takagi ver(↑よりたぶん新しい)
http://www.m-takagi.org/docs/php/zend/

API
http://framework.zend.com/apidoc/core/
0545nobodyさん2008/11/26(水) 09:03:28ID:???
httpd.confで設定できていれば問題ないよ。
あれだよね。
ZFのコントローラーを実装するのにmod_rewriteの設定が必要で
mod_rewriteのスレで聞いたらあとは自分でやれと言われてここに来たって感じっしょ。
とりあえず、がんばれ
0546nobodyさん2008/11/26(水) 11:18:20ID:???
>>543
してるんですが挙動が変なんです
>>545
そんな感じです。
.confだけでOKとわかって安心しました、ありがとうございます。
0547nobodyさん2008/11/26(水) 11:44:14ID:???
>>541 ご本人のblogに掲載されています。
0548nobodyさん2008/11/26(水) 14:09:19ID:???
>>547
ありがとう
0549nobodyさん2008/11/27(木) 21:41:31ID:nkJ4I6fb
コントローラの使い方がいまいちわからないんですが、
ページ全体の要素や構成を決めるのではなく、たとえばグローバルメニューや
フッタ部分など複数のページで使いまわされるパーツを作るのに使うのも
ありなんでしょうか? それはモデルで定義するべきなのかな?
0550nobodyさん2008/11/27(木) 21:50:53ID:???
それはテンプレートではないでしょうか
0551nobodyさん2008/11/27(木) 21:54:35ID:???
コントローラーの使い方じゃぁないね。
まぁ、だいたい設計は自由だけど、たとえば、
全体の構成ならZend_Layout
共通のメニューやフッターはviewのpartialヘルパーで、
モデル=データ由来のメニューであれば、
コントローラーで準備しとくとか。
もちろん、専用のコントローラを用意しておいてアクションヘルパーを呼ぶとか
そりゃまったく自由なわけで
0552nobodyさん2008/11/27(木) 22:14:33ID:KUrXy2lE
アクションコントローラのinit()とpreDispatch()ってどういう場合に
使い分ける必要性出てきますか?
間になにか挟まる事がありえるんでしょうか。
0553nobodyさん2008/11/27(木) 23:12:04ID:???
>>550-551
どうもありがとうございます。テンプレートってsmartyとかかな?
Zend_Layoutてのがあるの初めて知りました、使ってみます
0554nobodyさん2008/11/27(木) 23:29:14ID:DhKL8FdT
>>552
_forward
0555nobodyさん2008/11/28(金) 02:51:15ID:???
AMFまわりの情報でどこか熱いサイトないでしょーか。
Flexとの連携は面白そーですね。
0556nobodyさん2008/11/28(金) 11:48:11ID:???
ZendFrameworkで業務系システムを作るとマジ死ねる。おすすめ。


おまいらはどんな何系のシステムでZF使ってますか?
0557nobodyさん2008/11/28(金) 13:54:54ID:???
それはなんで?
0558nobodyさん2008/11/28(金) 21:28:14ID:???
>>555
Zend_Amf_Server試してみたけど未完成過ぎる印象。

・提供していないPHPメソッドを実行できる(不具合?仕様?)

 以下のコードでZend_Json::encodeをFlashから実行出来てしまう。
 connection.call("Zend_Json.encode", responder, params);
 これは Zend_Amf_Server::_dispatch() の実装が原因

・ネームスペースが機能していない

 $server->setClass("Hoge", "Namespace");
 としてもNetConnection.call("Namespace.method") が呼ばれない。
 これも Zend_Amf_Server::_dispatch() / _handle() あたりの実装が原因

・エラーが起こる

 Zend_Amf_Server::_dispatch() 150行目あたりに、
 PHPのWarningが発生する箇所がある為、Flash側で不正なAMFパケットとみなされてしまう事がある。

例)存在するクラスの存在しないメソッドをコールすると起こる
 connection.call("Zend_Json.hoge", responder, params);



不具合なのか、仕様なのかわからんので修正する気にならん。
Parser系は普通に使えそうなので自前でサーバ部分(リクエスト受けてレスポンス返すだけ)を作れるならいいかもね。
05595292008/11/29(土) 09:54:36ID:???
>>552
initは初回だけ実行すれば良いもの、たとえばデータベースへの接続作成とか

preDispatchはアクションを呼び出すたびに(どのアクションかにかかわらず共通で)実行したいものに使うと便利です

>>558
ソース見てみましたが、Unimplementedと記載されているfunctionたちが目に付きますね
0560nobodyさん2008/11/29(土) 12:15:11ID:Q7h0AD5b
エラーコントローラってのがあるけど、これは不動産サイトの物件情報で
物件IDが存在しない時なんかに、「該当の物件は存在しません」みたいに
使えばいいのかな?
0561nobodyさん2008/11/29(土) 22:57:14ID:???
物件IDが不正な値なのか、それとも
物件を検索したけど、該当するIDが存在しなかったのかによる。
0562nobodyさん2008/11/29(土) 23:00:44ID:???
そんなときにエラーcatchしてくれるか?
0563nobodyさん2008/11/29(土) 23:04:37ID:???
>>560
好きなように使えばいいんでは?

物件IDが存在しないときに、例外を投げ、かつエラーコントローラーにわたるように
設定し、エラーコントローラーでcatchすればそれに応じたエラーメッセージは出せるだろうけど、
物件IDが存在しない程度で例外か?ってのは気になる。
普通は、DBから不正な値が返ってきたとか、想定外を想定して作るもんじゃない?
検索でヒットしないってめっちゃ普通の現象のように思うけど。
まぁ自由なので個人的な感覚にすぎないけどね。
0564nobodyさん2008/11/29(土) 23:08:12ID:???
俺そんなときは_forwardでエラーコントローラーに飛ばしてる
0565nobodyさん2008/11/30(日) 01:05:31ID:???
ご意見ありがとう
へんに機能として用意されてる分「使わなきゃ」って気になっちゃうなぁ
妙に考え込んでナチュラルじゃない処理をわざわざ作らないようにしよう、、ありがとうございました
0566nobodyさん2008/11/30(日) 02:05:35ID:???
日本の新聞社とかが古い記事IDを無効にする感じのニュアンスなら
エラーコントローラに投げて
このページは削除されました->TOPページのリンクへ誘導でOK。

もし、そういう意味じゃないならフレームワーク以前の問題だな。
0567nobodyさん2008/11/30(日) 15:03:50ID:???
リクエストオブジェクトのことで質問なのですが、
URI、GET、POST、COOKIEなど外来ではないデータで、たとえば認証済みのユーザーIDなど、
クライアントが自由にセットできるわけではないが、クライアント固有のリクエスト情報を
格納・取得するための仕組みはないでしょうか?
リクエストオブジェクトを拡張するか、レジストリやフロントコントローラーに保存などを
使った方がいいでしょうか。

Zend_Controller_Request_AbstractにあるgetUserParamというのが使えそうかと思ったのですが、
実質的にgetParamとほとんど変わらない実装になっていますよね。
Zend_Controller_Request_HttpではgetParamでGET POSTから取得できるできないの違いは
ありそうですが、/controller/action/key1/val1/userid/hoge/
みたいな感じでgetParamに混入できる可能性を制約したいと思っています。
0568nobodyさん2008/11/30(日) 15:06:57ID:???
セッション使えば?
0569nobodyさん2008/11/30(日) 15:27:55ID:???
なるほど。
リクエストの方がTestがやりやすいかと思って検討していたのですが、
セッションを使う方がすっきりしそうなので、セッションで行きたいと思います。
ありがとうございました。
0570nobodyさん2008/12/01(月) 22:10:13ID:???
getParamsはsetParamSources(array('_GET'))とかしておく事で
ソースを絞れるっぽいけど。
0571nobodyさん2008/12/01(月) 22:28:42ID:???
そうなんですけど、基本的にルーターのインフレクターがセットするデータについては、
paramsに入ってしまうのでparamSourceじゃ絞れないですよね。
インフレクター側で何を受け入れるか、もしくは受け入れないという設定をしたものを
使えば制御できることはできるんですけど・・・
0572nobodyさん2008/12/01(月) 22:57:39ID:???
リクエストクラス自作するのはあかんの?
0573nobodyさん2008/12/01(月) 23:08:10ID:???
getParamの方がごちゃ混ぜでも
getUserParam?みたいな名前の奴は、アクションとパラメータ?か
こっちでセットしたデータしか入ってないんじゃなかったっけ?
何か使い分けられるみたいなのをどっかで見た覚えがあるけど。
0574nobodyさん2008/12/02(火) 07:54:53ID:???
>>572
そうですね。状況によってはリクエストを自作する方向で考えたいと思います。
ユーザーIDについてはZend_Auth::getInstance()->getIdentity()でいいやってことで
リクエストからの取得はあきらめました。自動的にセッションに保存されるようですし。

>>573
getParamとgetUserParamの違いは、Zend_Controller_Request_Abstractの段階では
$request->_paramsから返すだけで、ほぼ同じコードなので同じデータのようです。
セットされるのはルーター由来の値で、まぁ、リクエストオブジェクトなんだから当然といえば当然ですね。

マニュアルを読んだ時は、getUserParamってコントローラーでセットしたり
ルータでもルートで明示的に受け入れ設定した変数だけかな?
と誤解してしまったので、>>567みたいな質問をしてしまったのですが、
リクエストオブジェクトはリクエストなんだなと、今は理解しております。

テストが簡単だからという理由で、別の情報や機能をリクエストオブジェクトに
含めようという方が邪道だったと反省しています。
0575nobodyさん2008/12/02(火) 12:22:41ID:X8fwryD+
モジュールの機能について教えてください。
モジュールを使うことで、どんなメリットがあるんですか?
「モジュール自体が一つの完結したMVCアプリケーション」という解説を見ましたが、
それではモジュールをまたいでmodelのincludeやクラスのextendsをしては
いけないのでしょうか?

ディレクトリがまとまるからそこそこ大規模なサイトになったら見やすい・管理しやすいのかなと
は思うんですが、モジュール不使用と比べた大きな長所があれば教えてください
そういう経験談を聞かせてくれたら嬉しいです。
0576nobodyさん2008/12/02(火) 12:32:04ID:???
1.7.1
0577nobodyさん2008/12/02(火) 12:42:19ID:???
>>576
どこ?
0578nobodyさん2008/12/02(火) 12:45:00ID:???
>>575
includeやextendsは自由に使っていいと思うよ。

Zend推奨のディレクトリ構成だと、モジュール単位で独立しちゃってるイメージだけど
自分は /controllers/ModuleName/ でディレクトリ掘って、サブモジュール的なイメージで使ってる。

サイトに大きめの機能追加をする時にモジュールを分けておくと、
ネームスペースが独立してコントローラ名の競合が防げるメリットがある。
0579nobodyさん2008/12/02(火) 12:46:57ID:???
トップにも開発ニュースにも書いてないからどこかと思ったけどダウンロードページ見たらあった、すまん
0580nobodyさん2008/12/02(火) 14:47:57ID:???
>>578
なるほどー 詳しくありがとうございました
モジュール使ってやってみようと思います
0581nobodyさん2008/12/03(水) 01:29:21ID:???
Translatorの中の人疲れてる?( ;^ω^)
http://framework.zend.com/manual/status
0582nobodyさん2008/12/03(水) 14:09:39ID:C1dbydXA
Zend_Db_TableのfindParentRowってイチイチSQL発行されてるの?
負荷とか大丈夫なの?教えて
0583nobodyさん2008/12/06(土) 02:47:49ID:???
MVCの各役割なんだけど、俺が最近入ったZF使ってる会社は、
各コントローラーの各アクションに、select()->from()->
where->leftJoin()->leftJoin()・・・以下略と書きまくっている
のだが、これでいいのだろうか?

俺の理解だと、コントローラーはリクエストパラメーターにより
上で書いたような処理をモデルで行ったり、その結果をビューに
返したりするものだと思うのだが。

さらにいうと、ModelでForm部品用の設定をしている。DBの項目が
フォームの項目だからだって。
0584nobodyさん2008/12/06(土) 02:50:09ID:???
アクションコントローラーがそういうことする場所って決めてるならそれでいいんじゃね?
0585nobodyさん2008/12/06(土) 02:53:01ID:???
MVCにに縛られる必要は無いんじゃない?
規模が膨らめばそれこそMVCに属さないコードとか出てくるしさ。
長期稼働させない一時的なシステムとか、叩き台程度の作成ならそのやり方でサックリ作るのもありでしょう。

そうじゃないなら、炎上する前に転職すれw
05865832008/12/06(土) 03:22:51ID:???
まあ、確かにMVCにこだわる必要はないか。

MVCじゃない、ライブラリ的なクラスを切り分けるくらいのことを
したいとは思う。

でも、一時的なシステムじゃなくて、今後うちの会社の核になる
システム。多分炎上はしないかな。メンテしにくそうだけど。
0587nobodyさん2008/12/06(土) 06:50:07ID:???
>>583
てか、それが普通だろ
ウェブフレームワークのMVCと言われている処理の主流はそんなのだよ
モデルはDBをオブジェクト指向で操作するインターフェイスを提供、
actionはそれをドライブって感じ
0588nobodyさん2008/12/06(土) 07:11:45ID:???
>>587
普通では無いだろw

そのAction内でしか使わないDBクエリならActionに直書きでいいだろうけど、
複数Actionから参照されるようなDBクエリなら、普通はモデルなりライブラリなりに切り分ける。
0589nobodyさん2008/12/06(土) 08:36:08ID:???
同じ処理がある時に切り分けるのはプログラミングの大原則だからするのは当然。
ここではactionにモデル操作を書くことの是非が問題になっているんだろう。
0590nobodyさん2008/12/06(土) 08:42:45ID:???
システムの決めごとの問題と言ってしまうと身も蓋もないけど、
ActionControllerからモデルを利用するにしても、newしてメソッドを呼ぶとして
そのアクション固有のパラメータはやっぱりコントローラーで設定するんだよね。
境界線をどこに置くかっていう問題のような気はする。
0591nobodyさん2008/12/06(土) 09:13:37ID:???
>>589
>>583ではモデルを作らずZend_Dbを直に使ってるから、MVC的にこれは普通はしないよねって事。
0592nobodyさん2008/12/06(土) 17:18:11ID:???
Zend_Dbみたいなオブジェクト指向DB操作インターフェイスを「モデル」と捉えて
コントローラで操作するやり方は、railsとその影響を受けたFWでは一般的じゃね?
ZFを実際には使ってないからZend流の普通は知らないが。
Zend流ではZend_Dbをいわば広義のモデルでラップするの?
0593nobodyさん2008/12/06(土) 18:22:58ID:???
>>592
Zend_Dbでselect()とか使ってるのであれば、SQL直書きとなんら変わらないんだぜ。
オブジェクト指向でDBへのコネクションを管理できるだけであって、
データの操作は最低限のAPIしか無い。
モデルを作るためのDBアダプタって感じかね。

Zend_Db_Tableなら低レベルO/Rマッパとして機能するけど、
やはり1枚ラップしてやらないとコードが汚れる気がする。
0594nobodyさん2008/12/08(月) 21:32:33ID:???
ZF、何か完成させようとすると超むずい…。
0595nobodyさん2008/12/10(水) 02:51:00ID:???
エラーコントローラーを、モジュール別に登録する事って可能ですか?

モジュール別に404エラーの出力内容を制御したいのですが、
現状ではErrorControllerが全てのエラーをcatchしてしまう為、処理が無駄に入り組んでしまっています。
0596nobodyさん2008/12/10(水) 20:56:49ID:???
モジュールのコントローラーのpreActionやコンストラクタで個別のErrorController設定するか、共通のErrorControllerからモジュール判断してforwardしてもいい気がする
0597nobodyさん2008/12/10(水) 21:23:54ID:???
モジュールが追加された場合に、デフォルトモジュールの
コントローラと名前が被った場合は
モジュールが優先されて、次にコントローラ。

だから、モジュールと同じ名前のコントローラを作って、
__callから飛ばせば良いんじゃないかな。

モジュールにアクションが無い→同じ名前のデフォルトコントローラのアクションを探す
__callで引っかかる。
__callがモジュールのエラーコントローラへ_forward

やってみてないからわからないけど。
0598nobodyさん2008/12/11(木) 18:56:21ID:???
Zend_Loader_PluginLoaderについて質問があります

ドキュメントでは
----------
Zend_Loader_PluginLoader には、 複数のプラグインの間でオブジェクトを共有する機能もあります。
その際にシングルトンインスタンスを作成する必要はありません。
この機能は、静的レジストリを用いて実現しています。
インスタンスを作成する際に、 コンストラクタの 2 番目のパラメータでレジストリを指定します。


// プラグインを静的レジストリ 'foobar' に保存します
$loader = new Zend_Loader_PluginLoader(array(), 'foobar');

PluginLoader がインスタンス化したその他のコンポーネントで このレジストリ名を使用すると、すでに読み込まれているパスやプラグインを使用できます。
----

と書いてあるのですが、オブジェクトを第2パラメーター付きでnewすると、
スタティックプロパティは初期化されてしまって、次にインスタンスをとった
時に再利用できるようには思えないんですが違いますか?
再利用するのであれば、シングルトン等で独自にインスタンスを保持
しないとだめなように思うのですが・・・
0599nobodyさん2008/12/11(木) 21:25:11ID:???
必要ないって書いてあるから大丈夫なんじゃない?

ソース読んでないけど、例えば、Zend_Loader_PluginLoaderが
シングルトンのフロントコントローラにプラグインオブジェクトを
預けたりしてるか、独自のシングルトンを作ってそこに保存してれば大丈夫だろうし。
0600nobodyさん2008/12/11(木) 21:40:05ID:???
someController:
$loader = new Zend_Loader_PluginLoader(array(), "hoge");
forwardedController:
$loader = new Zend_Loader_PluginLoader(array(), "hoge");

たぶん、こんな感じで2か所で呼ばれても同じ名前を使っていれば
同じプレフィックスパスやクラスが使えるという意味だと思うんですが、
実際には
public function __construct(Array $prefixToPaths = array(), $staticRegistryName = null)
{
if (is_string($staticRegistryName) && !empty($staticRegistryName)) {
$this->_useStaticRegistry = $staticRegistryName;
self::$_staticPrefixToPaths[$staticRegistryName] = array();
self::$_staticLoadedPlugins[$staticRegistryName] = array();
}

foreach ($prefixToPaths as $prefix => $path) {
$this->addPrefixPath($prefix, $path);
}
}

こうなってて、new したときに
self::$_staticPrefixToPaths[$staticRegistryName] = array();
self::$_staticLoadedPlugins[$staticRegistryName] = array();
これで、スタティックに登録されたプレフィックスパスやプラグインが初期化されてしまうんですよ・・・
で、それをZend_Registoryにでも保存してるのかと思いきやそんな形跡はないんですよね・・・

レジストリ名一つにつき、自前でインスタンスを一つにしぼって、インスタンス化させないルールにすれば、問題ないんですけど、

ドキュメントの解釈が違うのかなぁ・・・
0601nobodyさん2008/12/11(木) 22:13:41ID:???
多分、他のクラスに受け渡すメソッドと受け渡す内容は
この後も変更しないだろうし、入れ物は単に配列なので
addPrefixPathとかget|set|clear PrefixPathとかを作って、
作り変えちゃえば大丈夫じゃないかと。

それかバグ報告ですかね。
ドキュメントの方が予定されていた物っぽく感じるので。
0602nobodyさん2008/12/11(木) 22:49:49ID:???
うーん、そうですか。
ちょっとSVN確認してみます。
if (!isset(self::$_staticPrefixToPaths[$staticRegistryName]))
を加えればいいんだと思うんで・・・
0603nobodyさん2008/12/12(金) 16:18:51ID:5OtupgTi
zend_Layout使ってみようと思うんですが、
たとえばヘッダとフッタを定義したテンプレートファイルがあるとして、
これを取り込む各ページごとにユニークの<title></title>情報を入れようと思ったら
どうしたらいいんですか? 

<html>
<head>
<title>ここを変えたい(例:12月13日の日記 / 「秋刀魚を食べた」)</title>
</head>
<body>
<img src="header.jpg" />
↓この下が各ページのコンテンツだよ
<?php print($this->Layout()->content); ?>
<img src="footer.jpg" />
</body>
</html>

っていうテンプレートです(現状)。
0604nobodyさん2008/12/12(金) 16:27:45ID:???
変数に割り当てる
0605nobodyさん2008/12/12(金) 16:41:39ID:???
レイアウトスクリプト内でも、ヘルパー使えるから
$this->headTitle()
などとする。
特殊なやつはレイアウトオブジェクトにアサインしてもいい。
その辺はドキュメントに出てるよ
0606nobodyさん2008/12/12(金) 20:25:20ID:???
>>604-605
どうもです、アドバイスいかしてもう少し調べてみますね
0607nobodyさん2008/12/13(土) 13:52:16ID:???
XMLとオブジェクトとの変換にPEARのXML_Serializer/Unserializerを使っているのだけど、
Zend Frameworkには同等のクラスライブラリ無いよね?
みなさんどうしてる?
0608nobodyさん2008/12/13(土) 17:15:06ID:???
>>607
Zend_Dom_Queryは?
0609nobodyさん2008/12/13(土) 18:02:07ID:???
>>608
さんくす。
XML_Serializer/Unserializerの手軽さはないが、これ使ってグリグリするかな。
どもでした。
0610nobodyさん2008/12/14(日) 17:48:13ID:???
Zend_Form使って確認画面出すのってどうやるんでしょうか?
まさか確認画面なんていらないよ!てことじゃないですよね。
0611nobodyさん2008/12/15(月) 14:05:56ID:???
preDispathやinit内で、Actionの実行を止める事って出来ますか?

preDispatch内で認証をしており、
未認証のユーザはエラー画面を表示したいのですが…
0612nobodyさん2008/12/15(月) 14:23:23ID:???
>>611
俺はpreDispathから未認証なら$this->_forward()でログイン画面に飛ばしてる。
0613nobodyさん2008/12/15(月) 14:23:56ID:???
$this->goto()
使ってるんだけど_forwardのほうがいいの?
0614nobodyさん2008/12/15(月) 14:26:57ID:???
goto()って元からあったっけ?
06156122008/12/15(月) 14:38:58ID:???
俺もgoto()ってはじめて知ったw
で、>>611なんだけど、エラー画面に飛ばしっぱなしなら_redirect()の方がいいかもね。
俺は認証後に本来表示すべき画面に戻したいから_forward()使ってるけど。
0616nobodyさん2008/12/15(月) 14:54:53ID:???
ありがとうございます。
でも、_forwardだと共通の画面しか出せませんよね?
状態によって、エラーメッセージを振り分ける必要がある場合はどうするのがベストでしょう?

理想としては

public function preDispatch()
{
if (!$auth) {
// ここで認証状態を判別して、個別のエラーメッセージを表示
    // dispatchループを抜けて、継続するActionは破棄する
}
}

みたいな処理にしちゃいたいのですが…。
06176122008/12/15(月) 15:21:23ID:???
>>616
> でも、_forwardだと共通の画面しか出せませんよね?
> 状態によって、エラーメッセージを振り分ける必要がある場合はどうするのがベストでしょう?

個別メッセージがどのような条件で切り替えられるのかにもよるが、
preDispatchで処理するぐらいだからそれほど細かいものでも無かろう?
で、_forward()してもUriは変わらない、$this->_getParam()でcontrollerやactionを取ると元のままなので、
それらで判別してエラーアクション内でメッセージを切り替えるってのはどうよ。
#ただ、コントローラの独立性が少し失われてしまうが...

他には、Zend_Registryに格納するしかないかなぁ。
0618nobodyさん2008/12/15(月) 15:27:35ID:???
俺なら、エラー内容をリクエストオブジェクトか、
レスポンスオブジェクトに設定して_forward
06196122008/12/15(月) 15:43:30ID:???
あ、そっか。
俺も>>618のレスポンスオブジェクトを使うのがいいかと思う。
>>617は忘れてくれw
0620nobodyさん2008/12/15(月) 15:58:13ID:???
ありがとうございます!

やはりAction間で値を受け渡す変数は必要になるんですね。
色々試してみます。
0621nobodyさん2008/12/15(月) 23:23:41ID:???
なんかさ、他のフレームワークはJavaのStrutsしか知らないんだけどさ。
ZFがフレームワークとしてユルイってのを実感してるよ。

Action中に十何個ものswitch caseがあってメンテする気起きねえ。
0622nobodyさん2008/12/15(月) 23:49:09ID:???
なんだそりゃ
0623nobodyさん2008/12/16(火) 02:34:01ID:???
日本語でおk
06246212008/12/16(火) 02:49:58ID:???
すまん。うまい表現が見付からないのだよ。
switch case文の嵐以外の方法を知りたいだけ。
0625nobodyさん2008/12/16(火) 03:05:05ID:???
まずなんでそれが必要なの?
0626nobodyさん2008/12/16(火) 03:24:54ID:???
ZF以前に設計が腐ってる。

という事に気づけない621が腐ってる。

って事でおk?
06276212008/12/16(火) 03:53:21ID:???
いや、解決は求めてないよ。ボヤイただけ。スマソ。

単にZF使っただけってシステムで・・・。
設計なんて誰もやってないさね。力技で作って・・・。
0628nobodyさん2008/12/16(火) 11:53:37ID:???
中級以上のPGなら、設計なして突貫工事しても、そんな悪夢みたいな状況にはならんだろw
0629nobodyさん2008/12/16(火) 13:05:30ID:???
actionの中で何でswitchするんだ??
0630nobodyさん2008/12/16(火) 13:20:56ID:???
actionの数を減らそうとして、複数actionをまとめて中に条件分岐を入れていたら
どんどん条件が複雑になっていってactionが腐れた
というよくある失敗例に見える
0631nobodyさん2008/12/16(火) 13:37:31ID:Rl9W2bGt
以下のようにしてるんですが、ページが出力されません
どこに問題があるんでしょうか? よろしくお願いします

//IndexController アクション
require_once 'Zend/Controller/Action.php';
class IndexController extends Zend_Controller_Action{
public function indexAction(){
echo date('U');
} //不要な場合は、メソッドの中は空でも構いません

public function helloAction(){ //helloアクションメソッド
Zend_Registry::set('testParam' ,'12345test');
$this->view->testP = "設定したテストパラメータは".Zend_Registry::get('testParam')."です";
}
}

//テンプレ
<html>
<head>
<title>Hello World!</title>
</head>
<body>
<?php print($this->escape($this->testP)); ?>
</body>
</html>
0632nobodyさん2008/12/16(火) 14:46:08ID:???
viewRendererが無効になってるんじゃないかと、思うけど確かなことは何も言えない。

$front->throwExceptions(true);
等でエラーの情報を提示してみたらどうでしょう。
0633nobodyさん2008/12/16(火) 20:56:47ID:Rl9W2bGt
>>632
どうもありがとう
viewRendererは無効にしてないんです
根本的に書式とか構造とかに問題があるのかなと思ったんですが
指摘がないってことはそうでもないんですよね? なんでかなぁ…
0634nobodyさん2008/12/16(火) 21:59:57ID:???
require_once 'Zend/Controller/Action.php';って書いてあるってことは
ローダー使ってないと想像するけれど、
require_once 'Zend/Registory.php';はどこかでしてるの?
0635nobodyさん2008/12/16(火) 22:23:00ID:Rl9W2bGt
>>634
お恥ずかしい!忘れてました、コンポーネント呼び出すの!
このZend_Registryコンポーネントって、変数や配列の宣言に使うんですよね?
スクラッチで書くときみたいに $hoge = "変数です"; みたいな定義はZendFWじゃやっちゃいけないのかな
引数が2つしかないけど、変数の型(数値・文字列)は気にしないってことでしょうか
0636nobodyさん2008/12/16(火) 22:23:38ID:???
お前は何を言ってるんだ?
0637nobodyさん2008/12/16(火) 22:45:02ID:???
全部の変数をZend_Registoryに登録してたら、
各アクションでプロパティ名が被りそうで怖くて
フレームワークの意味が無さ過ぎるNE。
0638nobodyさん2008/12/16(火) 23:06:02ID:???
>>637
ですね、、 定数みたいに限定的な要素に対してだけ使うべきなんですかね
変なこと書いて済みませんでした
0639nobodyさん2008/12/16(火) 23:37:13ID:???
サービスロケーターつうやつですか?
0640nobodyさん2008/12/16(火) 23:41:05ID:???
ZFってPHP5.2.4以降をサポート
http://framework.zend.com/manual/ja/requirements.html
ってなってるけど、いつから? 俺が使い出したときは5.1.xだったと思うんだけどな。
CentOS5.2は5.1.6で、個人のリポジトリで5.2.6を公開しているところがあることは知ってるんだが、
何となく躊躇してる。

とりあえずPHP5.1.6とZF1.7.1でも、今使っている範囲では問題なく動いているっぽいが、
どういったところでPHP5.1系で問題があるのか知っている人いる?
0641nobodyさん2008/12/16(火) 23:44:16ID:???
>>638
ZFはコントローラクラスのアクションメソッド内に記述するのがメインだから
ベタ書きと違って、変数作っても全部がローカル変数になるよね。

だから、別のアクションメソッドで
同じ名前の変数作ってしまっても被らない。

逆に言えば、他のクラスからは、意図的に変数を渡さなきゃ、
値が受け取れないって事でもある。

ビューで変数の値を出力するために
$this->view->hoge = 'hoge';ってしなきゃいけない様に。

主にビュー以外の用途で、変数を運ぶトラックがZend_Registory。

フロントコントローラなんかで、サイトのタイトルとかDBの情報みたいな
各コントローラで共通する情報を登録しておいたりするのが普通かな。

ベタ書きからのフレームワーク移行は最初は大変だと思うけど頑張ってなー
0642nobodyさん2008/12/17(水) 00:08:14ID:???
>>641
ほんとに勉強になります ありがとう
0643nobodyさん2008/12/17(水) 00:23:34ID:???
>>640
ZFは知らないけど、PHP自体のPDOのバグとかいくつか修正されてるし
Zend_Dbの中身はPDOだから、ZF動いてても気持ち悪ければUPじゃね。
設定地獄で逆に動かなくなるかもしれないけど…。
0644nobodyさん2008/12/17(水) 03:31:33ID:???
>>643
PDOのバグとかクリティカルな問題はディストリがメンテしてないかなぁ。
本当は ttp://www.jasonlitka.com/ から5.2.6を入れてみたんだが、
マッチパターンに日本語が混じる正規表現がうまく動かないというのが手元の環境で出て、
mb_ereg、ereg、preg全てダメだった。5.1.6やソースからビルドした5.2.5はちゃんと動いた。
環境の設定がらみかなと思ったんだが解決せずじまい。
jason のビルドに問題有りと決めつけているわけじゃないのだが、
さらに検証するのも面倒なんで、本鯖では避けてる状態。

ソースからビルドしてもいいけど、後々メンテ面倒だし。
つっても、jasonビルドも5.2.6で止まってるがなぁーw。
0645nobodyさん2008/12/17(水) 16:28:02ID:Fnh4GsCx
MVCについてしりたいです
基本的にデザインの構成はテンプレートファイル(.phtml)でやるわけですが、
パラメータを受けて同じページでも画面の一部が切り替わることってあるじゃないですか
たとえば、ポータルサイトでよくある
 ・ログイン済みならメールの受信状況
 ・ログインしてなければアカウント作成への誘導
みたいに。

ああいうのって、表示切替の規模や内容が単純ならテンプレ中で.phtmlの中でif文で
振り分ければいい気がするけど、実際にはパターンごとに別々のクエリを動かす可能性も
あると思います(上の例だとメールの新着確認するとか)

その場合、タイプごとにモデルを作ってその中でクエリからhtmlの部分的な書き出しをして
テンプレの中に出力するようにするんですか?

みなさんどんな風に処理してますか? ご意見お願いします。
■ このスレッドは過去ログ倉庫に格納されています