0

Form メソッド内で Request オブジェクトにアクセスするには? Form メソッド内で ActionHelper を使用してコントローラのリクエスト オブジェクトにアクセスすることは何とか可能だと思いますが、そのようなタスクのために新しいクラスを作成するのは過剰なようです。

または、どうにかしてコントローラーのリクエストを Zend_Registry に保存し、フォームのレジストリ項目にアクセスする必要がありますか?

4

2 に答える 2

7
$request = Zend_Controller_Front::getInstance()->getRequest()

?

于 2009-04-03T08:04:33.080 に答える
1

レジストリ方式(1)とシングルトンフロントコントローラー(2)の両方にアクセスすることはできますが、両方の方式にはいくつかの大きな欠点がありZend_Controller_FrontますZend_RegistryZend_Controller_Request_Abstract

// (1)
// in bootstrap e.g.
Zend_Registry::set('request', Zend_Controller_Front::getInstance()->getRequest());

// in form method
$request = Zend_Registry::get('request');

// (2)
//in form method
$request = Zend_Controller_Front::getInstance()->getRequest();

最善の方法は、フォームのコンストラクターまたはフォームのセッターを介してリクエストオブジェクトをフォームに挿入するか、リクエストパラメーターを配列として挿入することです。

// form class (constructor-injection presumed)
class My_Form extends Zend_Form
{
    /**
     * @var Zend_Controller_Request_Abstract
     */
    protected $_request;

    public function __construct(Zend_Controller_Request_Abstract $request, $options = null)
    {
        parent:: __construct($options);
        $this->_request = $request;
    }       
}
// or inject only parameters
class My_Form extends Zend_Form
{
    /**
     * @var array
     */
    protected $_params;

    public function __construct(array $params, $options = null)
    {
        parent:: __construct($options);
        $this->_params= $params;
    }       
}
于 2009-04-03T08:37:07.073 に答える