Zend:从Zend_Form内部获取Url参数


Zend: get Url parameter from inside Zend_Form

Zend talk。我需要设置一个隐藏的表单字段作为url参数的值。我有:

class Form_Custom extends Zend_Form
{
  public function init()
  {
   [..] 
   $id = new Zend_Form_Element_Hidden('name');
   [..]
  }
}

我知道,在实例化类时,我可以在选项数组中传递它(从控制器)。但是,我如何告诉表单查找URL参数本身呢??

感谢

Luca

class Form_Custom extends Zend_Form
{
  public function init()
  {
   //[..] 
   $id = new Zend_Form_Element_Hidden('name');
   //[..]
   $this->fill();
  }
  public function fill()
  {
      $this->name->setValue( Zend_Controller_Front::getInstance()->getRequest()->getParam( 'name', null ) );
  }
}

使用上面的构造,您可以在创建表单时填充字段,也可以从控制器手动使用$form->fill()

如果您想将URL值传递到隐藏字段,可以使用以下方法:

在控制器中:

    // Get wanted value from url
    $var = $this->_request->getParam('url');
    // Get correct form using Formloader helper (or any other method that you might be using)
    $this->view->form = $this->_helper->FormLoader('formname', array('url'=> $var);

在表单中添加以下内容:

protected $_url;
public function init(){
    $url = $this->_url;
    /*rest of your form*/
}
public function setUrl($value){
    $this->_url = $value;
}

就是这样!只需将表单中的$url变量传递给隐藏字段,就可以完成所有操作:)

我认为没有办法做到这一点,因为Zend_form与控制器是分离的。你可以在注册表中注册你的pos/get变量,但那太脏了。您也可以直接访问$_GET/$_POST。。。

或者在你的控制器中你可以做:

$form = new Zend_form();
$form->populate($this->_getAllParams());

它将用$_POST/$_GET 中的所有值填充表单