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

Zend Framework Part3

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2009/04/10(金) 08:35:00ID:???
公式
http://framework.zend.com/

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

(有力翻訳者のm-takagiさんのver)
http://www.m-takagi.org/docs/php/zend/

バグ報告
http://framework.zend.com/issues/secure/Dashboard.jspa

API
http://framework.zend.com/apidoc/core/

前のスレッド Zend Framework Part2
http://pc11.2ch.net/test/read.cgi/php/1204726884/
0261nobodyさん2009/06/24(水) 00:46:07ID:???
>>260
そのコードだけじゃ情報が足りなさすぎる。

config中にルータの設定とか書いて無い?
一度config.iniを空っぽにして試してみれ。
02622562009/06/24(水) 03:05:26ID:lk5E+v4f
>>261
ありがとうございます。config.iniが原因とは思いませんでした
なかで、データベース接続情報を書いていたんですが、
パスワードに ! を含んでいて、これが原因だったようです(消したら動きました)
!は使えないってことでしょうか、とりあえずPW変更して対応します。。
0263nobodyさん2009/06/24(水) 08:41:21ID:???
吹いたら負け
http://www.nicovideo.jp/watch/1245748338
0264nobodyさん2009/06/24(水) 13:55:46ID:???
>>259
なら、static関数にすればええがな。
0265nobodyさん2009/06/27(土) 11:34:29ID:LkjCp9rV
Zend_AuthのマスタにXMLって使えないの?
0266nobodyさん2009/06/27(土) 19:24:02ID:62AeSP23
viewのテンプレートをクライアントにFTPで直接アップできるようにしてるんですが、
関数は使えないようにしたいと思います。
なんか良い方法ないですか?
0267nobodyさん2009/06/27(土) 21:59:13ID:???
情報ツウは得をする!
⇒ 情報サイト http://sho-zai.com/index.html
0268nobodyさん2009/06/29(月) 14:25:46ID:???
zend_dojoを使って作成したボタンの幅を変更ってできる?
0269nobodyさん2009/06/29(月) 14:28:17ID:dN5c2Pu7
CSS使えば良いんとちゃいますのん?
0270nobodyさん2009/06/29(月) 14:46:32ID:???
echo $this->button(
'foo',
'',
array(
'label' => 'bar',
'style' => 'width:150px',
)
);

こんな感じで幅を指定できないかなと思ったのですが、できません?
0271nobodyさん2009/06/29(月) 17:11:46ID:???
Zend_Dojoを使う利点ってあるのか?
0272nobodyさん2009/06/29(月) 19:08:49ID:???
別に
0273nobodyさん2009/06/29(月) 22:04:00ID:???
Controller側からJavaScript操作するってのが、よくわからん。
普通に書けばええがな。
0274nobodyさん2009/06/29(月) 23:31:03ID:???
>>265
Adapterを作ればOK。

>>266
Zend_Viewでは実質不可能。
Smartyなりのテンプレートエンジンの導入を。
0275nobodyさん2009/06/30(火) 10:36:03ID:AIJgPj0k
皆さんSMARTYと併用してる?
0276nobodyさん2009/06/30(火) 16:00:28ID:???
Zend_Log_Writer_Dbでログを保存したいんだが、日付をdateフィールドに保存したい。
どうすればいい?
0277nobodyさん2009/06/30(火) 16:06:01ID:???
columnMappingでそのカラム名日付のキー名を対応させれば?
0278nobodyさん2009/06/30(火) 18:49:48ID:???
>>277
ありがとう。おかげで解決した。
logに項目追加できるってのもわかったよ。
0279nobodyさん2009/06/30(火) 20:57:51ID:???
次からはマニュアル読んでからおいで
0280nobodyさん2009/07/02(木) 01:17:44ID:???
キャッシュについて聞きたいんですが、
DBからデータを取得してきて、それをキャッシュに保存したりしますよね?

ページング処理にZend_Paginaterを使ってるんですけど、そのpaginaterオブジェクトも
キャッシュとして保存するものですか?

普通はどうしてるんでしょう?

0281nobodyさん2009/07/02(木) 01:58:48ID:???
DBへの問い合わせ結果をキャッシュするのが粒度的に使いやすいと思う
大抵、ボトルネックになるのはDBだし
Webはスケールアウトすればいいじゃん、的な
0282nobodyさん2009/07/02(木) 03:28:49ID:???
横レスだけど、やっぱその場合って更新頻度の低い
マスターとかになるんですかね?
0283nobodyさん2009/07/03(金) 02:02:06ID:???
口コミサイト作りたいです
どうすればいいですか?
0284nobodyさん2009/07/03(金) 04:37:06ID:???
>>283
http://framework.zend.com/manual/ja/zend.controller.html#zend.controller.quickstart
0285nobodyさん2009/07/04(土) 17:45:54ID:???
Zend_Db_Rowsetの$rowset->count()使ってるけど、これって
全データを配列にぶっこんでから、カウントしてくれるだけだよね?
こういうのってPHPのパフォーマンス的にどうなの?

ちゃんと、count(*)関数使ったSQLで取得した方が良いの?
0286nobodyさん2009/07/04(土) 17:55:34ID:???
ZFは開発効率重視だから
そういうアホみたいな処理が多い
0287nobodyさん2009/07/04(土) 18:10:48ID:???
>>285
自分はcount(*)で取得してる。
パフォーマンスは比べるまでもなく、じゃね?(実測した訳じゃないけど)
0288nobodyさん2009/07/04(土) 19:01:27ID:???
全データ、配列ってことはないよ。
結果セットからrowcountとってるから、count以外に使う必要があるようなモデルであれば
Zend_Db_Rowsetで問題なし。
もし、countだけ欲しければ、count(*)でいい。
0289nobodyさん2009/07/04(土) 19:38:55ID:???
↑すまん。忘れて
0290nobodyさん2009/07/05(日) 22:33:37ID:jApqmo0w
ルーターでコントローラでなく画像ファイルを
指定したいんですがなにか方法はありますか?
0291nobodyさん2009/07/05(日) 22:49:24ID:???
それはZFの管理外にしちゃった方がいいんじゃない?
0292nobodyさん2009/07/06(月) 02:41:57ID:???
俺は拡張子というかサフィックスのないリクエストだけ
mod_rewriteの対象にしてるなぁ
0293nobodyさん2009/07/06(月) 06:57:58ID:AIqh19Fa
>>291
>>292
ドキュメントルート上にないファイルなので困っています。
なければコントローラ経由で出力します
0294nobodyさん2009/07/06(月) 07:02:45ID:???
ん?
ドキュメントルート上になくても、mod_rewriteでもAliasでもいいやん
0295nobodyさん2009/07/06(月) 07:04:29ID:???
そうでなきゃ、Zendのルートで画像指定じゃなくて
画像を送出するコントローラーを書けばいい。
0296nobodyさん2009/07/06(月) 14:51:05ID:???
View側でframeつかえますか?
どうしても画面を分割したいのですが・・・
普通できますよね?
0297nobodyさん2009/07/06(月) 14:53:10ID:Ixa1CqYv
そりゃ使えるでしょ、やったことないけど
その場合はコントローラが3つになるんだろね
0298nobodyさん2009/07/06(月) 15:00:52ID:???
Action三つ or パラメータでViewScriptを変えるだけで対応出来るのでは。
0299nobodyさん2009/07/06(月) 23:17:03ID:???
わざわざ使い肉いフレーム分割なんてやめろ
考えなおせ
0300nobodyさん2009/07/06(月) 23:18:55ID:???
まったくだ。考え直せ。
0301nobodyさん2009/07/07(火) 04:09:51ID:???
SEO不必要な管理画面系は、場合によってはフレーム分割も有りだと思う俺は異端児なの?
0302nobodyさん2009/07/07(火) 06:35:31ID:???
レイアウトで共通化できるのに、フレームワーク使う意味がわからん。
0303nobodyさん2009/07/07(火) 06:49:20ID:???
フレームワークなのにフレーム使えないのかよというダジャレの悪寒
0304nobodyさん2009/07/07(火) 11:24:49ID:???
>>302
まずはフレームとフレームワークの区別をつけような、坊や。
0305nobodyさん2009/07/07(火) 17:54:40ID:???
viewの持つ変数をview helperから使う事はできますか?
また、できる場合、どう参照すればよろしいでしょうか?
0306nobodyさん2009/07/07(火) 18:02:51ID:???
自己解決しました。
$this->view->foo;
0307nobodyさん2009/07/07(火) 20:55:21ID:dsERj2eF
User Paramの指定方法ですが、
example.com/controller/action/name/value

ではなくaction == indexとして省略して
example.com/controller/name/value

のように指定する方法はありますか?
後者だとnameActionを探しに行ってしまいます
0308nobodyさん2009/07/08(水) 13:32:23ID:???
あるよ。
詳しくはマニュアルで。
http://framework.zend.com/manual/ja/zend.controller.router.html#zend.controller.router.routes.standard
0309nobodyさん2009/07/08(水) 23:27:36ID:5XpF0jdH
現在のコントローラから他のコントローラの関数(アクションではない)を実行する方法ってありますか?

_forwardのようにそのアクションを呼び出すのではなく、関数の返り値が欲しいです。
0310nobodyさん2009/07/08(水) 23:50:56ID:???
require して new して 呼び出せばいいんでない?
0311nobodyさん2009/07/09(木) 00:12:48ID:JLJTWxg2
なんかメソッドがあればよかったんですがないようですね
0312nobodyさん2009/07/09(木) 00:18:29ID:???
作ればいいんでね?
0313nobodyさん2009/07/10(金) 17:30:13ID:???
>>309
ビューヘルパーのaction使えばできるんじゃね?

で、デレツン行っていいかな。
コントローラーからコントローラーを直接呼ぶとか、
ビューからコントローラー呼ぶとか、キモイこと考えんなやw

コントローラーを呼ぶときはdispatcherとリクエスト使いましょう。
0314nobodyさん2009/07/10(金) 18:12:04ID:???
てかさ、コントローラではどのビューとモデルを使うか決めて処理を移すようにしないと
無駄に太り見通しが悪くなって苦労するよね、今の俺みたいに(´・ω・`)
ついつい、このコントローラ共通の処理だからと、アクションじゃないメソッドを増やしちゃうが...
0315nobodyさん2009/07/10(金) 18:19:43ID:???
俺も似たような感じだなぁ
最近、やっとわかってきたけど。
0316nobodyさん2009/07/10(金) 18:44:08ID:xlLyB0Yi
>>313
SearchActionなんてのにZend_Formを返すgetForm()なんてのがあるとします。
IndexControllerからそのフォームをトップページで表示したい場合はどうすれば良いんですか?

何かおかしいこと言ってますか?
03173162009/07/10(金) 18:45:31ID:xlLyB0Yi
SearchActionではなくSearchControllerです。
0318nobodyさん2009/07/10(金) 18:56:13ID:???
SearchControllerにgetFormメソッドがあるってこと?
だったらそれがそもそもおかしい。
0319nobodyさん2009/07/10(金) 19:40:01ID:???
>>316
BaseControllerに実装するか、ヘルパーにするか、切り出して別途ライブラリにすれ。
0320nobodyさん2009/07/10(金) 21:24:14ID:???
>>316
ZFだと、formsっていうところにモジュール別のフォームを集めておくのがデフォ。
IndexControllerで検索フォームを使いたいなら、IndexControllerのgetFormで、
それをインスタンス化するという簡易的な手もある。
getForm('search')とか。まぁ、しかしそりゃ汚くなる。
ヘルパーかプラグインリソース(Zend_Application)にするところだろうな。
03213162009/07/10(金) 23:25:57ID:xlLyB0Yi
>>318
何がおかしいんでしょうか。
xxActionしか内部に作っちゃいけないなんて言う制約ありません。use-at-willです。
codezineだかのサンプルにもそういった実装がありました。

>>319
helperですか。。
ちょっと考えてみます。

>>320
formsのあたりをもう少し詳しくお聞きしたいです。
static functionとしてgetForm()を定義することも考えましたが、
$thisを使いたい場面もあり、それはあきらめました。

Zend_Applicationで大半のことはやっていますが、
使わないコントローラに対してもフォーム分のメモリを確保するのはどうかなぁと思ってしまいます。
ある程度の規模のサーバーで運用していますが、ZF自体が膨大ですのでできるだけいらない処理は省きたいのです。

0322nobodyさん2009/07/10(金) 23:30:40ID:???
>>321
コントローラに実装しなきゃいいだろ
お前は何を言ってるんだ
0323nobodyさん2009/07/10(金) 23:35:55ID:???
>>321
>xxActionしか内部に作っちゃいけないなんて言う制約ありません。use-at-willです。

制約ではなく、設計を指摘してるのでしょう。
他から参照されるメソッドをSearchControllerに定義する事自体がおかしい、と。
03243162009/07/10(金) 23:46:24ID:xlLyB0Yi
>>322
ならそう書いてください。
2行目は余計です。

>>323
検索の主体(フォーム出力、検索実行)がSearchControllerにあるのでその中で実装するのが自然かなと思ったんですが、
他のコントローラで参照することを考えれば分けた方が良いかもしれませんね。
もしくは出力されるフォームのHTMLだけを直接Viewに書いちゃうかどっちかですかね。
0325nobodyさん2009/07/11(土) 00:43:24ID:???
うざ・・
0326nobodyさん2009/07/11(土) 00:57:28ID:???
>>324
> 検索の主体(フォーム出力、検索実行)がSearchControllerにあるのでその中で実装するのが自然かなと思ったんですが、

全然自然じゃない。

> 他のコントローラで参照することを考えれば分けた方が良いかもしれませんね。

他のコントローラから参照されることがなくても自然じゃない。

> もしくは出力されるフォームのHTMLだけを直接Viewに書いちゃうかどっちかですかね。

「どっちか」って「フォームHTMLだけViewに」とどれ?
ZFって一応MVCモデルのフレームワークってことなんだけどね。
0327nobodyさん2009/07/11(土) 01:07:14ID:???
自由度が高そうに見えるけど実際にはZendが想定してる使い方があって、
結局それ念頭に作られていてこの後も拡張されて行くから
自分で解釈を考えるよりも元々のZendの意図をくみ取る方が重要だったりする

なので迷ったら本家MLのログ検索で良い例題を探してみて、あれば真似する、
というアプローチがよいと思う。出来たてなFWだから野良の情報はけっこう微妙
0328nobodyさん2009/07/11(土) 01:26:56ID:???
みんな知ってるかもだけどZFコーディング規約の一文
コントローラの行数を何行に収めるべきか、とか
ひいてはサイト全体をどう設計して行くべきか、とかが大体イメージ出来る

http://framework.zend.com/manual/ja/coding-standard.php-file-formatting.html

B.2.3. 1 行の長さ
1 行の長さを 80 文字までにすることを目指しましょう。
すなわち、 コードの長さを現実的な範囲で 80 文字までにおさめるよう
努力すべきです。 しかしながら、場合によっては少々長くなってしまっても
かまいません。 PHP コードの行の長さは、最大 120 文字までにするように
しましょう。
0329nobodyさん2009/07/11(土) 01:31:14ID:???
> 検索の主体(フォーム出力、検索実行)がSearchControllerにあるのでその中で実装するのが自然かなと思ったんですが、

全然自然じゃないわ
0330nobodyさん2009/07/11(土) 01:37:51ID:???
>>327
ZFは各コンポーネント間の依存関係を薄めて、好きなモノを好きに使ってくれって思想もあったはず。
良くも悪くもRoR系FWと比べると書き方に規制が無いから、ベストプラクティスを導き出すのが難しいんだよね。
日本ユーザがもう少し盛り上がれば色々広がりそうなんだけどねぇ。

>>328
「行数」ではなくて「行あたりの文字数」なw
行数は明確に規定ないよ。
0331nobodyさん2009/07/11(土) 01:48:09ID:???
>>330
失礼
The maximum length of any line of PHP code is 120 characters.
って書いてるね。余計なこと書いちゃったなぁw。
03323162009/07/11(土) 07:33:19ID:IIRizAp5
>>326
>>329
参照返信されるのはいいですが否定するだけでなく意見を下さい。
あなた方にとってどう実装するのが自然な方法なんですか?
どっちかというのはHTMLをインデックスのビュースクリプトに直接記述する方法と
あなた方が提案しない自然な方法のどちらかと言うことです。

>>327
>>330
作る側にとったら悩むところですね。
私はできれば推奨と呼ばれるような書き方をしたい派なのです。
もっとユーザが増えればですね。
0333nobodyさん2009/07/11(土) 09:27:12ID:???
フレームワークは使うモノであって、使われるモノでは無い。
>>316のやりたい事を実装する方法は多々あるし、自由に実装すればいいんじゃない?
本人が良いのであれば、SearchControllerに実装したって全然かまわない。
0334nobodyさん2009/07/11(土) 10:10:30ID:???
>>332
いい加減にしてくれ
0335nobodyさん2009/07/11(土) 11:06:03ID:???
好きに実装していいけど、正直な感想かかれて切れるんなら別のところで聞いたほうがいいな。

おれは、SearchControllerにgetForm実装するかどうかは別として、
別のコントローラーに処理を回したいケースはある。
おれなら、IndexControllerから直接呼ぶんじゃなく、
ActionStackにSearchControllerをセットして
プレースフォルダにコンテンツを投入させてレイアウトで処理する。
0336nobodyさん2009/07/11(土) 13:03:17ID:???
>>332
だから、全然自然じゃないし、推奨と呼ばれるにはほど遠い書き方なんだよ。
書き方以前に、あなたにはコペルニクス的転回が必要なんじゃね。
>>316 「何かおかしいこと言ってますか?」
これが全て。根底から考え直さないと、ここで今の問題の回避方法を聞いても、
次にまたぶつかる。
0337nobodyさん2009/07/11(土) 16:05:55ID:Vd43NPnH
質問、初心者です
学校の生徒と先生の自己紹介アプリみたいなの作るとして、とりあえず
StudentControllerとTeachearControllerつくって、それぞれに「趣味」を出力する機能があるとします
この場合、趣味のDB問い合わせ+引き出し処理は独立したメソッドに持たせて、
それを上記Controller中のhobbyActionからそれぞれ実行させれば良いんですよね?
0338nobodyさん2009/07/11(土) 16:28:29ID:???
>>337
hobbyActionは共通だから、まずIntroductionControllerを作ってこちらに実装。
生徒と先生とで違う部分だけIntroductionControllerから派生させて作る。
introduction/hobby でアクセスさせるか、(student|teachear)/hobby にするかは他との兼ね合い。
両方可能でもいいし。
DB問い合わせとかは別クラスを作る。
hobbyActionには、せいぜい getDB()->getHobby();程度で趣味を取り出せるようになっているのがいいな。
0339nobodyさん2009/07/11(土) 16:45:27ID:Vd43NPnH
>>338
ありがとうございました、なるほどー
getDB()->getHobby();ってありますが、これはつまり
DBアクセスのクラスを独立させて、生徒・教師問わず情報引き出し処理を
その中のメソッドとしてもたせるってことですよね?
DBアクセスのクラスはどっちのユーザーにも共有ってことで、、

それだと、スケジューラ機能を持たせて、
$uType = "student";
$uName = "山田";
$eventDay = "2009/7/11";
getDB($uType,$uName)->getSchedule($eventDay);
として、「生徒の山田さんの2009/7/11のスケジュール」を呼び出す処理を作る
みたいなことも出来るんでしょうか?
0340nobodyさん2009/07/11(土) 17:34:31ID:???
>>339
> DBアクセスのクラスはどっちのユーザーにも共有ってことで、、
共有と言うより共通かな。
先生と生徒でDBが多少違っていても同じインターフェースが実装されていればいいってことで。

> getDB($uType,$uName)->getSchedule($eventDay);
それでもいい。
Userクラスを作ってDB接続はUserオブジェクト内に持たせるのもありだと思う。
preDispatchあたりで
$user = new User(getDB($uType));
$user->setNmae($uName);//コンストラクタの引数で渡してもいい
scheduleActionで
$this->user->getSchedule($eventDay);
hobbyActionで
$this->user->getHobby();
0341nobodyさん2009/07/11(土) 17:36:01ID:???
preDispatchの$userは$this->userの間違いでした。
0342nobodyさん2009/07/11(土) 17:41:42ID:???
>>340
なるほど、大体理解できました
トライしてみます。ありがとう!
0343nobodyさん2009/07/11(土) 17:49:07ID:???
initじゃだめなの?
0344nobodyさん2009/07/11(土) 18:27:06ID:???
>>343
initとpreDispatchの使い分けでググるといろいろ出てくるけど、
俺的にはアクションやリクエストクエリで違いが出てきそうなのはpreDispatchかな。
DB接続(の用意)とかはinitに書くこともあるけど、どのみちシングルトンだし、
ファクトリーメソッドなどを多用するから、Zend_Controller_Actionから派生させた
そのアプリのベースとなるMyApp_Controller_Actionで使う程度かな。> init
0345nobodyさん2009/07/11(土) 18:41:20ID:???
>>344
なるほど。
ちなみにZend_Applicationはつかってますか?
0346nobodyさん2009/07/11(土) 19:02:48ID:???
>>345
使っていません。
不要と判断した訳じゃなくて、ただ単に使ったことないだけです。
0347nobodyさん2009/07/13(月) 15:41:33ID:sINZz9CU
Zend_ValidateのStringLengthでロケールを考慮しないで文字数を検証する方法はありますか?
iconv_strlen()で文字数を数えているようですが、strlen()の返り値で検証して欲しいです。
0348nobodyさん2009/07/13(月) 16:47:25ID:???
その程度なら調べるより自分で実装する方が早くね?
0349nobodyさん2009/07/13(月) 18:59:28ID:???
上でちょっと荒れてて気になって探してみたらクイックスタートにまんまgetForm()があった
http://framework.zend.com/manual/ja/zend.form.quickstart.html

他のサンプルでもよく使われてるけど元祖はマニュアルなのかw
0350nobodyさん2009/07/13(月) 19:55:44ID:???
User用のフォームだから他では確実に使わないってことなんじゃないの
0351nobodyさん2009/07/14(火) 11:53:04ID:???
コントローラーにgetFormがあるのは設計的にも問題ない。
ただ、他のコントローラーから呼べるようにというのは、ZF的MVCではない。
0352nobodyさん2009/07/14(火) 11:56:10ID:???
使いまわしたいなら各コントローラの親クラスで実装しとけばいいんじゃね?
0353nobodyさん2009/07/14(火) 12:20:58ID:???
普通はモジュール単位で基底コントローラ作るよな?
0354nobodyさん2009/07/14(火) 15:17:09ID:???
あんまり無駄なファイルは作りたくない人とかもいるやん?
0355nobodyさん2009/07/14(火) 15:21:19ID:???
親クラスや基底コントローラが無駄って事じゃないよな?
0356nobodyさん2009/07/14(火) 15:23:14ID:???
親のクラスとなすびの花は
0357nobodyさん2009/07/14(火) 15:25:21ID:???
じゃ1ファイルの中に10クラスくらい入れときゃいいじゃん
0358nobodyさん2009/07/14(火) 15:54:39ID:???
Zend_Loggerのインスタンスをグローバル変数として運用したいのですが、
どこで宣言するのが適正でしょうか?
index.php?
0359nobodyさん2009/07/14(火) 15:58:30ID:???
>>358
俺ならシングルトンにする。
0360nobodyさん2009/07/14(火) 16:09:25ID:???
>>359
お、なるほど。確かに一つだけインスタンスがあれば良いですもんね。
アドバイスありがとうございました。
■ このスレッドは過去ログ倉庫に格納されています