0

私は Zend フレームワークを深く掘り下げていますが、この時点で少し混乱しています。特に Zend_Controller_Action (*_Action)、Zend_Controller_Request_HTTP(*_HTTP)、および Zend_Controller_Request_Abstract (*_Abstract) を調べています。

*_Abstract クラスは、その名前が示すように抽象クラスであるため、インスタンス化できず、ほとんどの場合、いくつかの最終的な実装と共にメソッド スタブを提供します。実際の実装は、*_Abstract をサブクラス化する *_HTTP および *_Simple クラスにあります。けっこうだ。

ここで *_Action クラスを見ています: http://framework.zend.com/apidoc/1.0/Zend_Controller/Zend_Controller_Action.html

$_request 変数を見ると、それは *_Abstract 型のインスタンスであることが示されています。この時点で、抽象クラスのインスタンスを技術的に持つことができないため、*_Http ではなく *_Abstract 型にする必要がある理由がわからないため、混乱しています。

だから私の質問:

  1. ここで抽象クラスのインスタンスが宣言されているのはなぜですか。

次に、$_request クラスの getParams() メソッドをオーバーライドします。これは、アプリケーションがすべてのパラメーターを取得する方法であり、ここですべての入力に一般的なサニタイズとブラックリストのルールを適用したいからです。

残念ながら、私の BaseController (他のすべてのコントローラーによってサブクラス化されたメイン コントローラー) では、次のような効果を宣言します。

$_request = new RequestClass(); //RequestClass subclasses Zend_Controller_Request_Http and overrides getParams()

アプリケーションが正常に起動しません (空白の画面が表示されます)。

より好奇心旺盛な人のために、 RequestClass() getParams() は派手なことは何もしません:

getParams()
{
  $params = parent::getParams();
  //sanitization rules over $params;
  return $params;

}
4

1 に答える 1

2

の型ヒントZend_Controller_Request_Abstractは、要求が を拡張するクラスのインスタンスである必要があることを意味しますZend_Controller_Request_Abstract

意図的に ZF のルーティングを使用しない場合を除き、ルートを介してパラメーターのサニテーションを行う方がよいでしょう。それ以外の場合、空白の画面が表示される場合は、それdisplay_errorsはオフになっており、代わりに PHP エラーまたは例外がログに記録されていることを意味します。Web サーバーのエラー ログを調べて、実際の問題を確認してください。

于 2013-04-19T19:42:12.253 に答える