私は 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 型にする必要がある理由がわからないため、混乱しています。
だから私の質問:
- ここで抽象クラスのインスタンスが宣言されているのはなぜですか。
次に、$_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;
}