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

Zend Framework Part4

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

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

翻訳状況
http://mikaelkael.dyndns.org/checker/language/details/lang/ja
http://framework.zend.com/wiki/display/ZFDEV/Japanese+(Nihongo)

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

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

前のスレッド Zend Framework Part3
http://pc11.2ch.net/test/read.cgi/php/1239320100/
0622nobodyさん2010/11/03(水) 12:52:45ID:???
ORMは山ほどある。
標準的が何を示すのか不明だがZFならZend_Db_Tableあたりだ。
0623nobodyさん2010/11/03(水) 13:06:02ID:???
そもそもhibernateやiBatis, S2Daoは標準的なORMじゃないので
0624nobodyさん2010/11/04(木) 00:39:38ID:1iy2rlVw
質問します。たとえば日記のアプリを作るとき
localhost/diary/edit/y/2010/m/11/d/1 って形で入力画面(editアクション)を開くとします。

そうすると、まずこの時点でパラメータが日付にふさわしい型か
パラメータチェックする必要があると思うんですが、その処理を外部化したいんです。
↓こんな感じで(diaryコントローラ)
public function init(){
 require('paramChk.func.php');//検証機能の外部化
}
public function editAction(){
 $param=$this->getRequest()->getUserParam();
 $checkAry = array(
      array($param['y']=>array('required', 'numeric'),//パラメータyが必須かつ数値かチェック
      array($param['m']=>array('required', 'numeric'),
      array($param['d']=>array('required', 'numeric')
      );
 paramChk($checkAry);
}

このとき、実際の検証用外部関数paramChk()の中でエラー(不正の発見)があったとき、
エラーコントローラにリダイレクトさせたいんですが
function paramChk($ary){
 //チェック処理省略
 if($err) return $this->_redirect('/error/pt/paramerr');
}
とするとエラーが起きます(Using $this when not in object context in /var/www/application/inc/paramChk.func.php)
どうしたらいいんでしょうか? 検証処理は外部化しつつ検証エラーの時のリダイレクトまで実装したいです。
意見よろしくお願いします
0625nobodyさん2010/11/04(木) 00:54:38ID:???
エラーの時返り値返せばいいのでは
0626nobodyさん2010/11/04(木) 01:10:04ID:???
>>624

・editAction側でリダイレクトさせる方法
if (!paramChk($checkAry)) $this->_redirect('/error/pt/paramerr');

・paramChk側でリダイレクトさせる方法1
paramChk($checkAry, $this); // $this(コントローラを引数で渡す)
function paramChk($ary, $controller){};


多分、前者の方が好ましい。
(paramChkもグローバル関数では無く、何らかのクラスに隠蔽すると尚良い)
0627nobodyさん2010/11/04(木) 01:31:00ID:???
コントローラを外部関数に渡すとか初めてみたw
0628nobodyさん2010/11/04(木) 02:11:43ID:???
redirect処理含めて外部関数に隠蔽したいなら、なんらかの方法で渡すしか無いだろうw
06296242010/11/04(木) 11:44:09ID:???
>>625-626
ありがとうございます。
なるほど、確かにエラーの時にfalse返してコントローラでリダイレクトの方が
あとあと便利そうですね!
「if (!paramChk($checkAry)) 」こういうの思いつかないのでホント聞いて良かったです

>paramChkもグローバル関数では無く、何らかのクラスに隠蔽すると尚良い
これはなぜですか?
0630nobodyさん2010/11/04(木) 16:29:59ID:???
>>629
>paramChkもグローバル関数では無く、何らかのクラスに隠蔽すると尚良い
>これはなぜですか?
他にparamChkという関数が存在していると不具合が出ちゃうからね。
値を検証するクラスを別に作り、必須や数値チェックするのもそちらに外部化する方が見通し良くなると思うよ。

以下簡単な例

・Controller側
$diary = new Diary($param['y'], $param['m'], $param['d']);
if ($diary->isValid()) $this->_redirect('/error/pt/paramerr');

・Diaryを処理するクラス
class Diary{
private $_param = array();
public function __construct($y, $m, $d) {
$this->_param['y'] = $y;
$this->_param['m'] = $m;
$this->_param['d'] = $d;
}

public function isValid() {
// $this->_param に正常な値が入っているかチェック
return true;
}
}
0631nobodyさん2010/11/04(木) 20:13:18ID:???
俺はパラメータチェックはアプリケーションではなくアクションの仕事だと考えて

アクション内で
$this->reqParams('y', 'm', 'd');

基底コントローラ内で
public function reqParam() {
foreach (func_get_args() as $arg) {
if (!$this->hasParam($arg)) {
throws Hogehoge_Parameter_Exception();
}
}

みたいなことやってたよ
0632nobodyさん2010/11/04(木) 21:06:11ID:???
Javaやってた自分からすると、メソッドの中で
func_get_argsとか、array渡してextractとかやって
可変引数を扱うのにいまだに馴染めないんだけど
これらってバッドノウハウじゃないのかな?
0633nobodyさん2010/11/04(木) 21:17:13ID:???
>>632
可変引数はPHPにおいてはバッドノウハウでは無く、割と一般的なテクニックかと。
個人的にはfung_get_args()よりarray渡しを使うけど。

#extractは使う場面は思い浮かばない。
0634nobodyさん2010/11/04(木) 21:18:32ID:???
extractとfunc_get_argsを同列に語るのは
さすがにPHPの経験不足が露呈しすぎだぞ
0635nobodyさん2010/11/04(木) 22:32:56ID:???
>>634

というのも、 >>632 で書いたのもスレチなわけではなくて
ZFのViewHelperのForm**** 見てたらどれも

public function form****($name, $value = null, $attribs = null, $options = null, $listsep = "<br />\n")
{
 $info = $this->_getInfo($name, $value, $attribs);
 extract($info); // name, value, attribs, options, listsep, disable

みたいになってて、こんなのどうやって呼び出すんだよ…って思ったんだよ。。
こういうのってPHPでは無茶なやり方ではないのかな?
まあ、フレームワークでやってるってことは一般的なのか・・・
0636nobodyさん2010/11/04(木) 23:16:22ID:???
その例では$name, $value, $attribsを元に戻してるだけ
引数が限られているなら危険性もないし、逐一コード書くより統一性が取れて開発効率も上がるから使ってるんだろう
06376242010/11/05(金) 01:38:03ID:FPhbRDb9
>>630
>他にparamChkという関数が存在していると不具合が出ちゃうから

なるほど、納得出来ました。paramChkクラスを作ってみます。

>if ($diary->isValid()) $this->_redirect('/error/pt/paramerr');

これは、ifの()の中ってこれで良いんですか?
trueを返す条件でエラーのリダイレクトにならないですか?
自分凄い勘違いしてるのかな


他の人の意見も勉強してみます
ありがとうございました
0638nobodyさん2010/11/05(金) 02:12:03ID:???
>>637
>>if ($diary->isValid()) $this->_redirect('/error/pt/paramerr');
>これは、ifの()の中ってこれで良いんですか?

ごめん。 if (!$diary->isValid()) だね。
06396242010/11/05(金) 02:50:10ID:???
>>638
おお、良かったです
こんな時間にありがとうございました
0640nobodyさん2010/11/05(金) 09:45:33ID:???
array渡しはJavaScriptでもよくあるし
JSONやXMLとの親和性もいいんじゃないか?
0641nobodyさん2010/11/05(金) 16:52:21ID:???
オーバーロードが出来ない言語ではよくある手段だね。
0642nobodyさん2010/11/05(金) 19:40:31ID:???
ZF 1.11来たな
http://sourceforge.jp/magazine/10/11/05/0641258
0643nobodyさん2010/11/05(金) 20:48:27ID:???
>>641
単に引数の個数が可変の時に使ってるだけじゃね?
0644nobodyさん2010/11/06(土) 00:53:16ID:???
>>643
普通は無尽蔵に可変なら配列で渡すし、
引数の数や型よって処理が変えたいのであればオーバーロードする。

PHPはオーバーロードが無いから仕方無い。
0645nobodyさん2010/11/06(土) 01:07:38ID:???
>>644
extractとfunc_get_argsのどっちの話?
0646nobodyさん2010/11/06(土) 01:11:09ID:???
>>645
func_get_argsの話。
単に不特定多数の値を渡すだけなら配列渡しの方が見通しが良い。
func_get_argsは、引数の数をチェックして振る舞いを変える為にあるイメージ。(疑似オーバーロード)

まぁ好みの問題だろうけど。
0647nobodyさん2010/11/06(土) 01:38:52ID:???
いや不特定多数の引数を渡す時のための関数だともうよ
0648nobodyさん2010/11/06(土) 02:46:56ID:???
不具合の温床になるから、
配列渡しの書き方を省略したいだけなら array() でくくった方が良いと思う。
IDEとの相性も悪いし。
0649nobodyさん2010/11/06(土) 02:49:53ID:???
不具合ってどんな不具合?
0650nobodyさん2010/11/06(土) 03:05:36ID:???
何故オーバーロードという概念があるか考えれば解るよ。

逆にarrayで囲わない理由は何だろうか?面倒だから?
0651nobodyさん2010/11/06(土) 03:08:01ID:???
なんだよ例出せないんじゃん
0652nobodyさん2010/11/06(土) 04:48:15ID:???
>>651
うーん。そもそもオーバーロードの概念が無い人には説明し辛いんだが

function hoge($array) {}
function hoge($string, $string) {}
function hoge($string, $array) {}

という感じで、同名関数だけど引数によって処理が変わる場合に使うのが望ましいだよ。
ここまでは解る?

fung_get_args()で配列を受け取りたいだけならarrayを受け取る関数一つでもいいよね?

function hoge($array) {}

ここでまでは解る?

オーバーロードは本来、
受け取った引数の型や個数によって処理を振り分ける場合に有用なんだよ。
PHPじゃなくてプログラミング言語自体の基礎がついていれば普通は理解出来ると思うが。
0653nobodyさん2010/11/06(土) 13:19:33ID:???
オーバーロードの例出してどうするw
func_get_argsがオーバーロードを実現するための関数だという根拠は何か
そしてそれを使うとどういう不具合が発生するのか
を聞いてるんだけど
0654nobodyさん2010/11/06(土) 14:18:26ID:???
どっちかっていうと、Cでいうところのstdarg的な使い方を目指してるんじゃね?
0655nobodyさん2010/11/06(土) 14:24:08ID:???
引数の型や個数を見て処理を振り分けるのはオーバーロードとは違うと思う。
オーバーロードは、引数の型や個数を関数を区別する情報の一部として扱うことで、
それぞれ別個の関数を定義する仕組み。
実行時に引数を見てシミュレートすることはできるだろうけど。
0656nobodyさん2010/11/06(土) 14:32:07ID:???
「ここまでは解る?」とか痛すぎる
0657nobodyさん2010/11/06(土) 17:24:47ID:???
>>653
0658nobodyさん2010/11/06(土) 17:36:17ID:???
>>653
マニュアル嫁
http://php.net/manual/ja/function.func-get-args.php
逆に配列渡しにしない理由はなんだよ?

>>655
わかってるよ(>>646に書いてる)
0659nobodyさん2010/11/06(土) 17:46:21ID:???
どっちが良いかなんて、ケースバイケースじゃね?
引数を実行時に組み立てたいなら配列しかないだろうし、
printf的な使い方なら、いわゆる可変引数の方が直感的だろうし。
0660nobodyさん2010/11/06(土) 19:28:44ID:???
>>658
え?>>653の上下どっちに対する回答?
オーバーロードの話も不具合の話も書いてないけど
0661nobodyさん2010/11/06(土) 20:34:35ID:???
>>660
マニュアルのコメント欄まで嫁。
配列渡しを拒む理由も書け。
0662nobodyさん2010/11/06(土) 21:23:28ID:???
>>661
User Contributed Notesはユーザが勝手に追加するコメントだよ?
逆にいうとそこ載っているという事こそ、標準の使い方でないことの証明。
しかも数十件ある中で1件しかそんなこと書いてないからPHPユーザの中でもそんなことしてるのはマイナーと思われる。
0663nobodyさん2010/11/06(土) 21:43:07ID:???
>>662
>逆にいうとそこ載っているという事こそ、標準の使い方でないことの証明。
なんねーよw


func_get_argsが直接バグを生み出す訳では無い

 ・関数の内部処理を見ないとパラメータの扱いが解らない
 ・タイプヒンティングが使えない
 ・IDEによる補完機能が使えない
 ・バージョンによる挙動の違い

という制約が結果的に潜在的なバグを生み出しやすいって事だよ。
それらを踏まえて、単に複数パラメータを渡すだけならarrayを使い、
オーバーロード的な振る舞いを行いたい時にfunc_get_argsを使えば良い。


で、頑なに配列渡しを拒む理由は何なの?
0664nobodyさん2010/11/07(日) 21:13:27ID:???
func_get_args()、検索したらZFの中では60箇所使われてた。
いくつか見た感じ、ZFではオーバーロード的な振る舞いを狙った使い方はしてないかも?

ただ >>663
>単に複数パラメータを渡すだけならarrayを使い、
>オーバーロード的な振る舞いを行いたい時にfunc_get_argsを使えば良い
はわりと同意。
0665nobodyさん2010/11/09(火) 09:47:23ID:???
>>664
ありがとう。
検索してみたけど、確かにオーバーロード的な使い方はしてないね・・・(sprintf系が多い?)

個人的にIDEに洗脳されつつあるので、可変引数は毛嫌いしてたけど、
ちょっと引き出しが増えた気分だよ。ありがとう。
0666nobodyさん2010/11/09(火) 17:16:52ID:bQQ5pU57
zend_dbでの例外処理で質問です。

$ret = $db->query("insert〜〜");
$rowCount = $ret->rowCount();
$errCode = $ret->errorCode();
if($rowCount == 1 && $errCode="00000"){//クエリは成功しました}

自分は普通、Zend_dbで単純なinsert処理とかをする場合は上記のようにクエリの成功/失敗を判別してるけど
トランザクション処理の場合、以下のようにやってます。
try{
 $db->beginTransaction();//トランザクション開始
 $lastInsertIdAry = array();
 for($i=0; $i<$n; $i++){
  $db->query(
   "INSERT INTO `{$table}`(id,uType) VALUE(:id,:uType)",
   array(':id'=>0, ':uType'=>$uType)
  );
  $lastInsertIdAry[$i]=$this->_dbConn->lastInsertId();
 }
 $db->commit();
 return array('status'=>'success', 'insertIdAry'=>$lastInsertIdAry);
}catch (Zend_Db_Statement_Exception $e){//トランザクション失敗A
 $db->rollBack();
 $msg = $e->getMessage());
 return array('status'=>'errorA', 'errorMsg'=>$msg);
}catch (Exception $e){//トランザクション失敗B
 $msg = $e->getMessage();
 return array('status'=>'errorB', 'errorMsg'=>$msg);
}

もっと効率的なやり方ないですか? またそもそもこの方法に穴はないでしょうか。
発生したエラーをログに残すのに効率的な方法を探してます。
0667nobodyさん2010/11/09(火) 23:37:52ID:???
トランザクション失敗Bでロールバックしなくていいの?
あと何のDB使ってるか知らんけどidに0入れてauto incrementになるのかい

効率的といってもコード量なのかメモリ量なのか実行速度なのか可読性なのか開発効率なのか保守性なのか
何を重視するのかによる
0668nobodyさん2010/11/09(火) 23:49:24ID:???
>>663
> ・関数の内部処理を見ないとパラメータの扱いが解らない
> ・タイプヒンティングが使えない
> ・IDEによる補完機能が使えない

それって全部arrayでも同じじゃないの?
0669nobodyさん2010/11/10(水) 00:04:44ID:???
>>668
同じじゃない。
0670nobodyさん2010/11/10(水) 00:09:14ID:???
>>669
なんで?
0671nobodyさん2010/11/10(水) 00:21:19ID:???
>>670
なんでと言われても・・・同じじゃない。
0672nobodyさん2010/11/10(水) 00:22:28ID:???
なんじゃそりゃ
0673nobodyさん2010/11/10(水) 00:31:38ID:???
>>672
>・関数の内部処理を見ないとパラメータの扱いが解らない
これは少々語弊があるね・・・
パラメータの扱いではなく、必要なパラメータが関数の宣言を見るだけで解る。
(func_get_argsにすると内部処理を見ないとわからない)
(PHPDocに書けば別だが、IDEは認識出来ない)

>・タイプヒンティングが使えない
arrayは使える

>・IDEによる補完機能が使えない
引数定義しておけばパラメータ補完機能が働く


以下コード例

function hoge(array $array) {}

function hoge() { $array = func_get_args(); }
0674nobodyさん2010/11/10(水) 14:17:57ID:JflIvKmc
リダイレクト先にuserParamsの形でURLを渡すのはどうやったらいい?

$referer = urlencode("http://www.yahoo.co.jp");
$this->_redirect('/hoge/user/taro/referer/'.$referer);
↑の方法でリダイレクトさせたら404 Not Foundが返ってきて困ってる
($refererを空欄にするとちゃんとリダイレクトできる)
$refererをurlencode()しなければリダイレクトは成功するけどrefererの値がhttp:になってしまうし

もしかしたらZend以前の問題かも知れないけどアドバイスお願いします
0675nobodyさん2010/11/10(水) 15:52:53ID:???
>>674
base64_encodeしたら?
0676nobodyさん2010/11/11(木) 19:52:34ID:???
メソッドオーバーロードを標準でサポートしてるメジャーなスクリプト言語ってないよな。Perl6がサポートするみたいだけど。
引数が多くなってきたらハッシュで渡すのが、メソッドオーバーロードのないスクリプト言語での常套手段だと思う。
0677nobodyさん2010/11/11(木) 21:00:10ID:???
そういうのはオーバーロードできる言語でもハッシュで渡すんじゃね?
0678nobodyさん2010/11/12(金) 11:04:01ID:???
Zend_Paginator でページ移動をするviewで、
ページのエレメントではないチェックボックスやテキストボックスの状態を
ページ移動後も維持したいのですが、
方法が分かりません。ページ移動すると初期状態にもどります。
Zend frameworkに何か仕組みはあるのでしょうか?
0679nobodyさん2010/11/12(金) 12:11:24ID:???
移動前にサーバ側でパラメータ持ってればそのまま引き継がれるはず。
クライアント側で変更したなら当然Javascript使わなきゃだよ。
0680nobodyさん2010/11/12(金) 12:21:47ID:???
すまんちょっと訂正
viewscript内のhrefって基本は自分で書くようになってるやん。
維持するのもリセットするのもあんた次第。
維持する項目が多くてPC用ならセッション使うのが普通。
0681nobodyさん2010/11/12(金) 13:54:05ID:wenK3AdP
初めてZend Frameworkを触り始めました。
Bootstrapで初期処理を行うクラスとみて大丈夫でしょうか。

また、Bootstrap.phpで
protected function _initTest() {
$this->foo = 'var';
}

と変数を格納した場合、
class TestController extends Zend_Controller_Action
public function indexAction()
{
var_dump($this->foo);
}
}

のように、コントローラ側に値を渡すにはどうすれば良いのでしょうか
0682nobodyさん2010/11/12(金) 16:52:02ID:???
bootなんちゃら使ったことないから間違ってるかもだけど
$this->getInvokeArg('bootstrap')->foo
0683nobodyさん2010/11/12(金) 18:01:38ID:???
なんかもうフレームワークとかワケワカメだわ
いちいち必要なモジュール読み込んで
手続き書いていくだけでおなかいっぱいだよ・・
0684nobodyさん2010/11/12(金) 19:24:22ID:???
>>683
その手続きの先にある馬鹿げた繰り返しを防ぐためのものだから
もう少しだけがんばれ
0685nobodyさん2010/11/13(土) 01:50:36ID:???
上の方にも書いてあるが、引数をハッシュにするとタイプヒンティングが利かなくなって、それが問題。
0686nobodyさん2010/11/13(土) 09:44:11ID:YYAlO5qe
>>681
ちょっと違う
ブートストラップは、リソースを初期化してコンテナに保存する所なのよ。
つまりこう

protected function _initTest() {
$test = new stdClass;
$test->foo = "bar";
return $test;
}

とやるとtestという名前でコンテナ(レジストリ)に保存されるから、
あとはコントローラでもモデルでもビューでもどこからでも
ZendRegistry::get('test')->foo;
てやれば取り出せる

フロントコントローラとかビューとかDBとか良く使うリソースは、それ用のプラグインがあって、
初期値だけiniファイルで与えてやればコード書かなくても勝手に作られるようになってる。
0687nobodyさん2010/11/13(土) 10:24:40ID:???
>>685
/* @var $name ClassName */
を駆使すりゃどうにでもなるだろ
まぁ無駄なコードは増えるが
0688nobodyさん2010/11/13(土) 10:47:24ID:???
タイプヒンティングもオーバーロードもやらないで柔軟に開発するってのが元々のPHPの設計思想だろ
だからハッシュだとか可変引数だとかの議論はナンセンス
0689nobodyさん2010/11/13(土) 10:54:25ID:???
思想なんて変わってんのに、もともとのPHPの設計思想なんかに縛られてる方がナンセンス。
0690nobodyさん2010/11/13(土) 11:35:43ID:???
>>687
それはタイプヒンティングでは無い。

>>688
そんな事は名言されていない。
思想時に無かった故に、継ぎ足しされてカオスなコードになっているだけ。知ったか乙。
0691nobodyさん2010/11/13(土) 12:00:49ID:???
>>689
縛られてなんかないよ。
PHPでもやろうと思えばできる、やってもいいしやらなくてもいい、
ただ元々の設計思想が違うんだからJavaと同じようにできるわけがない、だからPHPがどうとかJavaならどうとかいう議論自体が無意味。
むしろ、OOP的に書かねばならないという方が凝り固まっているよ。

>>690
明言されてたら無条件に従うのか?w
思想時って何かよく分からないけど、上述の通りスタートが違うんだから仕様が違って当然。
カオスになって付いていけない?Perl的な書き方もC的な書き方もJava的な書き方もできるようにしましょう、ってだけの簡単な話だと思うが。
別に使うか使わないかはユーザの自由だよ。
0692nobodyさん2010/11/13(土) 12:22:25ID:???
まあ>>688はナンセンスって言ってるだけで
議論の価値そのものを否定してるわけではないだろうし
そうしてる間にも俺はオナ禁してるわけで
0693nobodyさん2010/11/13(土) 12:50:16ID:???
>>691
論点ずれすぎ。日本語でおk。
0694nobodyさん2010/11/13(土) 14:09:27ID:YYAlO5qe
おまえら引数にそうとうなこだわりがあんだな。

そんなことよりzendの話しようぜ。
>>686 たいぶ間違ってた、みんなごめん。ZendRegistry::set()/get()も簡単で悪くないと思うけど。

リソースが保存されるのはブートストラップの中にあるZend_Registryインスタンスだった。
だからアクションでtestリソースを得るには、
$this->getInvokeArg('bootstrap')->getResource('test')->foo

モデルとか外部から呼ぶときは、やっぱフロントコントローラのインスタンスからブートストラップを
とってくんのかな・・なんかまわりくどいような。

quickstartでDBアダプターどうなってんだろうと思って調べたら・・・!なんとで、Zend_Db_Tableの
staticなクラス変数にデフォルト値としてアダプタのインスタンスを突っ込んでたw
たしかブートストラップのリソースプラグインあたり
0695nobodyさん2010/11/13(土) 17:25:56ID:YYAlO5qe
いろいろ調べたんでまとめさせてください。というか間違いがあったら指摘して欲しい

Zend_Applicationを使うときの話です。
リソースプラグインを書かず、一般に俺々リソースを注入するには

まず application.ini に
oreore.foo = bar

Bootstrapで、
protected function _initOreore()
{
$oreore = new Oreore($this->getOption('oreore'));
//または
$oreore = new Zend_Config($this->getOption('oreore'));
//または
$oreore = $this->getOption('oreore');
// または
Oreore::setDefaultOptions($this->getOption('oreore'));

return $oreore;
}

アクションコントローラで、
$this->getInvokeArg('bootstrap')->getResource('oreore')->foo

モデルで使うには、
Zend_Controller_Front::getInstance()->getParam('bootstrap')->getResource('oreore')->foo

またはアクションコントローラでモデルをnewするときに、
$this-_oremodel = new Oremodel(
$this->getInvokeArg('bootstrap')->getResource('oreore')
);
0696nobodyさん2010/11/13(土) 17:28:27ID:???
>>691

PHPそのものはともかく、ZFでは基本的にOOP推奨な気がするけど。
0697nobodyさん2010/11/13(土) 17:30:24ID:???
>むしろ、OOP的に書かねばならないという方が凝り固まっているよ。

むしろ、フレームワークって凝り固めてブレを減らすためのツールじゃないの?
0698nobodyさん2010/11/13(土) 18:43:11ID:???
反応ないな(´・ω・`)
リードオンリーなら2番目の
return new Zend_Config($this->getOption('oreore'));
禿げしく推奨
0699nobodyさん2010/11/13(土) 21:54:53ID:???
フォーム表示用のアクションと
検証を行うアクションを別にするとどうもしっくり来ない
検証エラーがあった場合に表示させることを考えると同じメソッドにした方が楽だけどそのへんどう?
0700nobodyさん2010/11/14(日) 12:36:29ID:cYG57qWr
BootstrapでGET、POST取得する方法ないのん?
0701nobodyさん2010/11/14(日) 20:41:27ID:???
>>697
フレームワークはOOPではない
0702nobodyさん2010/11/14(日) 21:38:53ID:???
Bootstrapの_init***で
$this->bootstrap('Request');
がなぜ使えないという事を聞いてるんですか?
普通に $_GET や $_POST 使えばいいのでは
0703nobodyさん2010/11/15(月) 07:59:13ID:???
>>701
日本語でおk
0704nobodyさん2010/11/15(月) 13:31:06ID:???
>>701
??
0705nobodyさん2010/11/15(月) 13:40:11ID:???
>>679 >>680
返事ありがとございます。
保存したい値を追加したURLへリダイレクトするようにします。
0706nobodyさん2010/11/15(月) 16:55:25ID:5FHMT34S
Zend FrameworkでPDO_Mysqlを使っております。
最後にデータベースに格納したauto_increment_idを取得する場合、
last_insert_id()に値する関数はありますか?
(ちなみにZend_Dbを使っております)
0707nobodyさん2010/11/15(月) 17:07:49ID:???
>> 706
こんなふうに DbTable でやっています。
$this->insert($data);
return $this->_db->lastInsertId();

0708nobodyさん2010/11/15(月) 19:35:02ID:tul9B6Yr
Zend触り始めたけど結構活発で良かった

エラーの質問ですが
An error occurred
Application error
と出てエラー内容が出ないのですが、どこで設定できるのでしょうか
宜しくお願いします
0709nobodyさん2010/11/15(月) 22:49:00ID:???
>>707
insertの戻り値でもプライマリキー取れるよ。

>>707
http://framework.zend.com/manual/ja/learning.quickstart.create-project.html
Configurationの項目見る、環境変数はhtaccessで設定するようになってたと思う
0710nobodyさん2010/11/16(火) 07:53:24ID:Rh5mS6i1
>>709
あちがとうできました!
お陰でエラーの原因を突き止めやすくなりました
0711nobodyさん2010/11/16(火) 09:45:32ID:???
>>708
.htaccessかhttpd.confに
SetEnv APPLICATION_ENV development
0712nobodyさん2010/11/16(火) 10:41:07ID:???
>>709
そうだったんですね。orz
情報ありがとうございます。
0713nobodyさん2010/11/19(金) 19:11:59ID:???
ZFのModuleって使えそうで使えないな…
該当モジュールにルーティングされようとなかろうと、
常に全モジュール初期化されるって仕様はどうなの。
モジュール別にPlugin動かしたりしたいのにわけわからなくなるだろ・・・
意味なくね?
0714nobodyさん2010/11/19(金) 19:21:11ID:???
逆にモジュールごとに初期化するのメンドクサってのがphperのレベル。
豪にイラズンバゴウに従え。
0715nobodyさん2010/11/19(金) 21:29:39ID:???
モジュールは構成が複雑になるだけで、使い勝手微妙だよな・・・

というかZend_Controller系全般が微妙
0716nobodyさん2010/11/21(日) 15:42:08ID:???
>>695
亀ですまんが、モデルからFrontController参照するのは筋が悪いと思う。
モデルの単体テストが難しくなる。

サービスロケータでも作ってモデルインスタンス取得を初期化し、
そこでセットしてあげるのがいいんじゃないかな。
単体テスト時はsetUpでセットしてあげれば良いし、
モックをセットするようなことも簡単になる。
0717nobodyさん2010/11/22(月) 11:29:12ID:???
おおそういう意見を待ってたのよ。でもまあ議論したいわけじゃなくて
だいたいこうやっときゃ齟齬ないよってのが知りたいだけなんだけど。

たしかにモデルからFrontController参照するのは都合悪そうですな。
やっぱモデルのコンストラクタに必要なリソースを入れるのが普通ですかな。
0718nobodyさん2010/11/22(月) 16:21:21ID:???
>>700
Bootstrapでリクエストオブジェクトを使うには、自分でリソース化しなきゃだめ。
やり方はリファレンスガイドのZend_Applicationあたり参照。

リクエストオブジェクトってリソースって扱いじゃないみたい。
フロントコントローラで作られて、ルーター、ディスパッチャやコントローラーで共有してるって感じ。
0719nobodyさん2010/11/24(水) 15:59:17ID:???
その編の単体テストとか考えてプログラミングしてる香具師がphpの場合は皆無だしなあ。
htmlやjavascript並にちゃんと表示されて動けばいいジャンで終わってるし。
0720nobodyさん2010/11/24(水) 16:08:32ID:???
字面だけだと解りにくいし
どっかに日本語で講義してるサイトとかあればいいなぁ
0721nobodyさん2010/11/25(木) 23:18:34ID:???
ZFってプラグインとかプラグインリソースとかコントローラーとか、
シングルトンだと思ってたらinitが何度も呼ばれてたりしてよくわからん。。
0722nobodyさん2010/11/27(土) 01:59:15ID:???
oopはinit呼ばれまくりなのは基本。ウザイならクラスを上書きすれば。
■ このスレッドは過去ログ倉庫に格納されています