トップページ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/
0229nobodyさん2009/06/11(木) 14:08:50ID:v8Ky+P1J
Actionのinitでエラーが発生したときエラーページに_forwardしてるんですが
すぐ処理が転送してくれません。

例えばController_Actionのメソッドとして、init(),とloginAction()
があるとします。
init()でDBの接続処理を行い、接続できなかったときにエラーページに
飛ばしたいのにloginActionが実行されてしまいます。
#_forwardにはreturn をつけて書いてます。
init()からすぐ別コントローラに飛ばすにはredirectじゃないとだめなんでしょうか
みなさんどうしてますか
0230nobodyさん2009/06/11(木) 14:46:49ID:???
まず、_forwardとredirectは別ね。
で、おれなら、DB接続エラーはコントローラーにはハンドルさせないで例外を投げる。
initは初期化処理のみにしておけば、通常処理用のエラー処理は入ってこないはず。
が、どうしても、アクション前条件判定でエラーコントローラーに飛ばすなら、
preDispatchで_forwardする。
0231nobodyさん2009/06/14(日) 17:33:28ID:???
1.8.3 使ってたら
exception 'Zend_Cache_Exception' with message 'cache_dir must be a directory' in /virtual/monabase/library_test/Zend/Cache.php:208
っていうのが出るようになったんですけど
キャッシュとか使わなくていいんで
どうにかなりませんか?
0232nobodyさん2009/06/14(日) 19:06:28ID:???
どうにかしたかったら、backtraceぐらい晒してくれ。

おれは1.8.3だけどそんなエラー出ない。
0233nobodyさん2009/06/14(日) 19:48:51ID:???
Zend_Locale::setCache();したら直った
Zend_Date使ってるのが影響したんだろうと思うんですけど
0234nobodyさん2009/06/16(火) 20:50:22ID:hxQFGTlU
マニュアルの日本語化って今どうなっとるんです?
0235nobodyさん2009/06/16(火) 22:08:21ID:???
>>234
あなたも翻訳に参加しよう

http://d.hatena.ne.jp/satoruyoshida/20090603/1244035139
0236nobodyさん2009/06/17(水) 12:14:05ID:???
1.8.0からRADツールが追加されたと聞いてやってきました。

再度ZendFrameworkを触ってみようと思います。

皆さんよろしくお願いします。
0237nobodyさん2009/06/17(水) 13:55:51ID:lVB38oSh
Zend Studio Serverはなくなったんでしょうか?
04WebServerとの組み合わせで使用していました。

今出ているZend Server?を試してみましたが、Apache前提みたいです。
0238nobodyさん2009/06/17(水) 17:22:47ID:???
http://framework.zend.com/docs/quickstart/create-a-model-and-database-table
このページで

モデル→データマッパ→ZendDbTable
となってるんですが、

モデルやデータマッパをスクリプトから自動生成する機能はないんでしょうか?
0239nobodyさん2009/06/17(水) 21:25:41ID:???
>>237
公式サポート窓口へドーゾ
0240nobodyさん2009/06/18(木) 20:04:08ID:5iF8/wzr
最近zendfw始めたんですが、imgフォルダとかcssフォルダはどこに置いてどう管理したら良いんですか?
普通にdocumentroot以下に置いて、phtmlには src="/img/hoge.gif"とかすべき?
0241nobodyさん2009/06/18(木) 22:14:24ID:???
>>240
管理し辛いとか、認証をかけたいとか、特別な理由が無い限りはそうなるかと。
0242nobodyさん2009/06/18(木) 23:20:18ID:???
>>240
documentroot以下は同じだが、
俺も最初はそのsrc=のように絶対指定していたのだけど、
<base href="http://www.example.com/..../" />
ってして、相対指定にした。
でないと、開発環境と本番環境の相違を吸収しにくい。
baseタグなんてそれまで使ったことなかったから、すっかり忘れていたわ。
0243nobodyさん2009/06/19(金) 00:54:44ID:???
>>241,242
ありがとうございます
>>242
そのbaseタグ使う方法良さそうですね
もしくは基準のパスを定数でもたせるのも変更時便利かもしれない
ありがとうございました
0244nobodyさん2009/06/19(金) 11:55:12ID:DHeb1GYG
ValidatorのStringLengthって文字数じゃないのね
UTF8だと日本語が思いっきり3でカウントされる
0245nobodyさん2009/06/19(金) 12:16:16ID:???
エンコード設定すれば?
0246nobodyさん2009/06/20(土) 13:15:25ID:???
www.hoge.com/にあるリンクタグが<a href="/sample">リンク</a>ってなってるとき、
これはsampleコントローラ中のindexアクションを実行するわけで、
そのときブラウザのURL欄は www.hoge.com/sampleになるわけですよね?

どういうわけか、クリックしても www.hoge.com/に戻って来てしまいます。
どんな原因が考えられますか? 

なお、sampleコントローラ中のindexアクションには、こういう結果を出すリダイレクト処理は
書いてありません。(単純に、helloを表示するだけです)
www.hoge.com/の.htaccessは
RewriteEngine on
RewriteBase /
RewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php です
何が原因でしょうか、情報不足かもしれないですが、よろしくお願いします
0247nobodyさん2009/06/20(土) 13:17:33ID:sayu7hyr
しまった、、あげさせてもらいます
すみません
02482462009/06/20(土) 13:56:55ID:sayu7hyr
今確認したところ、indexコントーローラ中のhogeアクションは実行できます
→ www.hoge.com/index/hoge/ は表示する
別のアクションコントローラを表示できないようです
なぜだろう。。
0249nobodyさん2009/06/20(土) 17:52:12ID:???
/sample/index

でアクセスした場合はどう?
02502462009/06/20(土) 18:03:33ID:sayu7hyr
>>249
ご回答ありがとうございます
試してみましたがダメでした。以下変でしょうか?

SampleControllerの中身は
<?php
require_once 'Zend/Controller/Action.php';
class IndexController extends Zend_Controller_Action{
public $aisatsu = "hehehe";
public function init(){ //通常のクラスの __construct()に該当します
echo "これはsampleです";
}
public function indexAction(){
$this->view->result = $this->aisatsu;
} //不要な場合は、メソッドの中は空でも構いません
}

view用ファイルは
views/scripts/sample/index.phtmlがあります
0251nobodyさん2009/06/20(土) 18:08:33ID:???
クラス名がIndexControllerになってるけどもw
02522462009/06/20(土) 18:15:23ID:???
>>251
うああああああ!!
大変失礼しました!できた、感動した!
0253nobodyさん2009/06/22(月) 13:48:28ID:???
Smarty組み込んで利用してるんだけど、{foreach}が使えない。そういうもん?
0254nobodyさん2009/06/22(月) 13:55:24ID:???
お前は何を言ってるんだ
http://smarty.net/foreach
0255nobodyさん2009/06/22(月) 15:51:12ID:???
>>253
http://www.php-seed.net/blog/archives/370
こういう問題でもなく?
0256nobodyさん2009/06/23(火) 17:52:02ID:fbX2StFR
質問です、以下のコードをindexController.phpで実行すると
「自動転送がループしています」と出ます
<?php
require_once 'Zend/Controller/Action.php';
require_once 'Zend/Config/Ini.php';
$config = new Zend_Config_Ini('config.ini',null);

class IndexController extends Zend_Controller_Action{
public function init(){ //通常のクラスの __construct()に相当
// $dbConnect = new dbConnect();
}
public function indexAction(){
$this->view->result = $this->aisatsu;
}
}

require_once('Zend/Config/Ini.php');と$config = new Zend_Config_Ini('config.ini',null);を
コメントアウトすれば動いてviewの表示まで行ってくれるんですが、なぜ上記の2行が
問題なのかがわかりません。
apacheのエラーログには何も出ません。すみませんがアドバイスお願いします。
ZFWは1.83、apacheは2、phpは5.2.6、OSはcentOS5.3です
0257nobodyさん2009/06/23(火) 22:49:32ID:U9kBq3jC
異なったコントローラで同一のZend_Formを持ち回りたいんだけど何か良い方法ありませんか?
Bootstrapに入れるのは何か違う気がして、、
0258nobodyさん2009/06/23(火) 22:52:11ID:???
ZendRegistryは?
0259nobodyさん2009/06/23(火) 23:19:57ID:U9kBq3jC
レジストリに入れるのもブートストラップ的なところに記述する感じになるのがちょっと

他のコントローラの関数を参照する関数があればいいんですが
IndexControllerから
TestController::getForm()を参照したいです
02602562009/06/23(火) 23:33:48ID:fbX2StFR
256ですが、どういう問題か教えてもらえないでしょうか?
ZendFW以前の問題で話になんね、って感じなんでしょうか?
それならそれで、ご指摘いただけると有り難いです。
一方的にすみませんがよろしくお願いします
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 文字までにするように
しましょう。
■ このスレッドは過去ログ倉庫に格納されています