Zend:从 Zend_Form 内部获取 Url 参数

Posted

技术标签:

【中文标题】Zend:从 Zend_Form 内部获取 Url 参数【英文标题】:Zend: get Url parameter from inside Zend_Form 【发布时间】:2011-09-06 05:34:03 【问题描述】:

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

class Form_Custom extends Zend_Form

  public function init()
  
   [..] 
   $id = new Zend_Form_Element_Hidden('name');
   [..]
  

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

谢谢

卢卡

【问题讨论】:

既然已经实例化了表单,为什么不在表单中创建字段,然后在控制器中设置其值? 我觉得我更喜欢它..但我可能错了 【参考方案1】:
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()

【讨论】:

投反对票,因为 Jimmy C. 提出的解决方案更好【参考方案2】:

如果要将 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 变量传递给隐藏字段,您就应该完成了:)

【讨论】:

【参考方案3】:

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

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

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

这将使用来自 $_POST/$_GET 的所有值填充您的表单

【讨论】:

以上是关于Zend:从 Zend_Form 内部获取 Url 参数的主要内容,如果未能解决你的问题,请参考以下文章

Zend_Form 占位符翻译

Zend_Form 创建校验和解析表单的基础--(手冊)

PHP 在Zend_Form中显示错误

如何将 Zend_Dojo 表单元素动态添加到 zend_form?

PHP Zend_Form的示例XML表示

如何使用装饰器将多个 div 或字段集添加到 zend_form?