代码之家  ›  专栏  ›  技术社区  ›  powtac

Zend框架带空白的HTML表单输入元素

  •  1
  • powtac  · 技术社区  · 15 年前

    当我创建这样的HTML表单时:

    $form = new Zend_Form();
    $form->setMethod('post');
    $form2->addElement('textarea', 'Name with Space');
    

    HTML变成:

    ...
    <textarea name="NamewithSpace" id="NamewithSpace" rows="24" cols="80"></textarea>
    ...
    

    请注意,输入名称将变为camelcase!

    当我调用$Form->getValues();在使用填充的文本区域发布后,结果是:

    array('Name with Space' => NULL); // Whitespace name! But value empty!
    

    当我调用$this->getRequest();在使用填充的文本区域发布后,结果是:

    array('NamewithSpace' => 'filled in value'); // Camelcase name! Value filled, but name changed!
    

    如何访问已设置名称“name with space”的填充值?

    我用的是ZF 1.7.6。

    2 回复  |  直到 15 年前
        1
  •  1
  •   David Snabel-Caunt    15 年前

    不幸的是,我认为你不能!对于一个应用程序来说,您必须有一个在ZF中不可接受的元素名,您必须修改ZF源。

    在zf 1.8.1中,需要更改以允许空间(和任何其他字符)的正则表达式位于zend/form/element.php的第424行。

    一个可能的(更好的)解决方案是创建一个自定义元素并重写filtername方法,但是如果您希望更改几个元素类型,这并不太实际。

    一定有更好的解决办法吗?!

        2
  •  1
  •   Kieran Hall    15 年前

    这个 $form->getValues() 将始终显示在窗体对象上设置的原始键和值,因为这些键和值在窗体发布后不会更新。但是,您可以使用它来实现您的优势,比如:

    $textarea = $form->getElement('Name with Space');
    $key      = str_replace(' ', '', trim($textarea->getName()));
    

    在请求对象上使用该键,应该可以让您访问所需的值。这是一个有点黑客,但看起来可能会奏效。