トップページ⇒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/
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の部分的な書き出しをして
テンプレの中に出力するようにするんですか?

みなさんどんな風に処理してますか? ご意見お願いします。
0646nobodyさん2008/12/17(水) 17:00:12ID:???
そういうケースでは、おれはスタックを使う。
コントローラーで必要な条件を割り出して、必要なモデルで処理をして
結果をスタックする。

ビューはスタックを出力しまくるだけ。
0647nobodyさん2008/12/17(水) 21:54:11ID:???
俺も必要なデータを全てassignして、テンプレートは表示の振り分け以外のロジックいれないようにしてる。
0648nobodyさん2008/12/17(水) 22:05:17ID:???
ループとかは?
0649nobodyさん2008/12/17(水) 23:29:31ID:???
Linux環境でController名がキャメルケースで指定できないんだが、俺だけ?

Windows環境で、コントローラ名がFooBarController.phpで、Viewのパスを/view/scripts/FooBer/で指定してたんだが、
Linuxへ移植したら「コントローラ名が見つかりません」って言われた。

試しにFoobarController.phpで、Viewのパスを/view/scripts/Foober/で指定したら通った・・・orz マジかよ・・・
06506492008/12/17(水) 23:31:06ID:???
×試しにFoobarController.phpで、Viewのパスを/view/scripts/Foober/で指定したら(ry
○試しにFoobarController.phpで、Viewのパスを/view/scripts/foober/で指定したら(ry

viewのディレクトリ名違ってた。
0651nobodyさん2008/12/17(水) 23:47:20ID:???
>>649
ViewRenderを使用しているという前提なら、
FooBarController の場合 view は /view/script/foo-bar/ を探し、
FoobarController の場合 /view/script/foobar/を探します。


http://framework.zend.com/manual/ja/zend.controller.actionhelpers.html#zend.controller.actionhelpers.viewrenderer
詳しくは、↑のマニュアルの「デフォルトの検索方式」をどうぞ。
0652nobodyさん2008/12/17(水) 23:56:11ID:???
>>651
ありがとうございます、読んでみます。
0653nobodyさん2008/12/18(木) 00:09:16ID:???
>>646-647
ありがとうございます
しかしよく理解できません、スタックって? IT用語辞典で調べたら一番最後に格納したデータが最初に出てくる
いろんな要素を格納する箱、のようなことが書いてありました
具体的にはどういうことなんでしょうか?

>俺も必要なデータを全てassignして、テンプレートは表示の振り分け以外使わない
つまり、assign前のモデルやメソッドで情報の最適化はするんですよね?
本来テンプレートに任せるべきhtml出力も場合によってはそれ以前(モデルなど)の中で
してしまうということですか?

ともかくありがとうございました
0654nobodyさん2008/12/18(木) 02:40:01ID:???
>>653

>本来テンプレートに任せるべきhtml出力も場合によってはそれ以前(モデルなど)の中で
>してしまうということですか?

しないよ。
HTML形成に必要な情報だけをassignする。
HTMLの生成はあくまでテンプレート側、
だからテーブル組とか複雑なページ構成だとテンプレートコードが超カオスになる…

どうするのがベストなんだろうねー。
0655nobodyさん2008/12/18(木) 03:08:45ID:???
>>645の挙げる例をloginStatusとして
まずコントローラはログイン情報を元にloginStatusModelを生成。
このときログインしてなかったらloginStatusModelはnullでもいい。
あとはそのままloginStatusModelをビューに渡す。
全体的なビュースクリプト(ex. index.phtml)からログインバー部分のテンプレート(loginStatusBar.phtml)を
読み込んでその中で、loginStatusModelを元にログイン時のテンプレート(loginedStatusBar.pthml)か
未ログイン時のテンプレート(notloginBar.phtml)かを切り替えて表示。

もうちょっとコンポーネント指向的にやるなら、コントローラからビューにログイン情報オブジェクトを渡して
ビュー側でloginStatusModelを呼び出して表示してもいいと思うのだけどね。
0656nobodyさん2008/12/18(木) 07:02:29ID:???
>>653
スタックだけれど、たとえば、Zend_Viewヘルパーのplaceholderはスタックの一種。
プレースフォルダーに"スタック"していけば、
ビュー側ではプレースフォルダをechoするだけになります。

この場合、おっしゃられるように

> 本来テンプレートに任せるべきhtml出力も場合によってはそれ以前にしてしまうということですか?

完全に1枚のビューに任せるのではなく、部分的なrenderを行ってそれをスタック、
最後はそれを結合するというようなコントローラーになります。

しかし、段階的なビューの育成が気に入らない場合は、コンテンツとビュースクリプト名をセットにして
スタックを順にレンダリングしていくようなヘルパーを作成するとよいかと。

言われてみて思ったけど、おれも作るわw
0657nobodyさん2008/12/18(木) 07:10:22ID:???
656だけど、
placeholderはスタックじゃないね。ごめん
後入れ、先出し
0658nobodyさん2008/12/18(木) 09:36:52ID:???
>>654
>だからテーブル組とか複雑なページ構成だとテンプレートコードが超カオスになる…

ですよねぇ、、 これ嫌ですよねー。どうすんべ、、
0659nobodyさん2008/12/19(金) 01:48:58ID:Yo9sHh7s
Zend Frameworkでページキャッシュできる?
0660nobodyさん2008/12/19(金) 01:56:10ID:???
ここは人力検索エンジンじゃねぇんだカス
0661nobodyさん2008/12/19(金) 04:14:38ID:???
じゃ何
0662nobodyさん2008/12/19(金) 10:43:58ID:???
Zend Componentsに名前変えるべきだと思うよ
0663nobodyさん2008/12/19(金) 13:41:41ID:N7fEKEUT
ちょっとすれちなんですが、
流れるようなインターフェイスってや津を自分のスクリプトで実装したいです。
ZFのどのファイル見たらずばっと解決するでしょうか?
0664nobodyさん2008/12/19(金) 14:12:53ID:???
>>663
何が言いたいかわからん。

実装したいなら勝手に実装すればよろし。
0665nobodyさん2008/12/19(金) 14:56:50ID:???
>>664
ZFのマニュアルにあるように、流れるようなインターフェイスってのをやりたいと思っています。
以下のような記述です。
$hoge->setA('A')->setB('B')->setC('C')
0666nobodyさん2008/12/19(金) 15:07:35ID:???
function setA ($aValue) { $this->a = $aValue; return $this; }
0667nobodyさん2008/12/19(金) 15:52:12ID:???
ヽ('A')ノ
0668nobodyさん2008/12/19(金) 23:40:24ID:???
>>659
Zend_Cache_Frontend_Outputか Zend_Cache_Frontend_Pageのマニュアルが参考になるかも

>>665
return $this がキモ。
0669nobodyさん2008/12/20(土) 01:34:15ID:???
もう書いてるのにきめぇw
06706492008/12/21(日) 11:18:40ID:???
コントローラ名のキャメルケースの件でviewに関しては解決しましたが、
やっぱりコントローラ名は駄目みたい。

/application/apps/controllers/FooBarController.php

<?php
require_once 'Zend/Controller/Action.php';

class FooBarController extends Zend_Controller_Action
{
public function indexAction ()
{
}
}
?>

Linux環境に限ってInvalid controller specified (FooBar)が出るわ、
windows<->Linuxの互換のためには、キャメルケースでコントローラ名
付けたら駄目なのか・・・orz これはFW仕様でしょうか?
0671nobodyさん2008/12/21(日) 11:25:51ID:???
viewの場合とControllerの場合とではパスの解決方法が違います。
それぞれの仕様をマニュアルで確認すれば問題のある動作はしないと思いますよ。

OSによってファイル検索時のケース依存が変わるので出来たり出来なかったりするのは
基本的に正しくないパスを与えている場合なので、今一度マニュアルを確認してみてはいかがでしょう
06726492008/12/21(日) 11:54:28ID:???
>>671
ありました・・・

http://framework.zend.com/manual/ja/zend.controller.basics.html

コントローラクラスやアクションメソッドの名前に MixedCase あるいは
camelCase の単語を複数使用したい場合は、 URL 上での単語の区切り文字
として '-' あるいは '.' のいずれかを使用しなければなりません
(とは言え、ここで使用する文字は変更することができます)。

たとえば、アクションを FooBarController::bazBatAction() で定義したと
すると、対応する URL は /foo-bar/baz-bat あるいは /foo.bar/baz.bat
となります。

ご助力頂き、ありがとうございました。
0673nobodyさん2008/12/31(水) 23:10:04ID:???
池■田大■作の本名はソン・テチャク。小泉純一郎、小沢一朗は朝鮮人。
911では小型の水爆が使用されている。
http://ri■ch■ardkosh■im■izu.at.webry.info/
創価の保険金殺人事件。
オウム事件は、統一・創価.北朝鮮の共同犯行である。CIAが監修している。
http://www15.ocn.ne.jp/~oy■ako■don/kok_web■site/ir■iguc■hi.htm
与党も野党もメディアも全部朝鮮人だった。
http://jb■bs.li■vedo■or.jp/b■bs/read.cgi/news/20■92/115794■1306/

2ちゃんねるは統一■教会が個人情報を集めるための道具。運営には統一■教会がいる。
駅前で「手相を見せてください」と勧誘してるのが統一教■会。(カルト宗教)  
カルト宗教の下にいる人と上にいる奴を分けて考えないといけない。下にいる利用される人は上がどんなことをしてるか知らない。

ユダヤ権力の子分→2ちゃん運営=統一協会上層部=層化上層部=自民党清和会=野党の朝鮮人ハーフの政治家=
与党の朝鮮人ハーフの政治家=金 正日(キム・ジョンイル )=読売サンケイ=小沢十朗
ユダヤ人=ロックフェラー=ブッシュ=クリントン=ヒラリー=アドルフ・ヒトラー=オサマ・ビンラディン

毎日新聞スレを荒らしてる奴らも統■一教会の可能性が高い。
荒らしは洗脳するために「ネトウヨ」などのレッテル付けレスを何千回もする。
現実には「ネトウヨ」などは存在しない。
http://changi.2ch.net/test/read.cgi/ms/1230363385/
0674nobodyさん2009/01/08(木) 22:12:51ID:F2D+k5Ku
>>673
こういうのせっせとあちこちに貼ってる人間の心理ってどうなってるんだろう
0675nobodyさん2009/01/12(月) 01:17:09ID:???
これ全然はやらないねぇ

使ってみようと思ったら、日本語リファレンスは充実してるけど、
肝心のWebアプリを作るのにどこからはじめていいかわからないしさ

疎結合にもほどがある
そこがいいとも思うんだけどね・・・
0676nobodyさん2009/01/12(月) 05:05:08ID:???
そりゃお前の能力が足りないだけだろ。ちゃんとクイックスタート書いてあるし。
■ このスレッドは過去ログ倉庫に格納されています