2016-02-29 68 views
0

Brief如何控制Zend Form中的单个表单元素呈现?

我正在使用Zend Form库。我希望能够对无线电盒子的构造方式进行设计或控制。目前,该元素的渲染是“在一行中”。然而,我想要做的是按照自己的方式呈现每个选项。库似乎没有提供简单的注入,即<br>标签,这正是我通常在我的HTML中使用的标签。无论如何,我需要帮助弄清楚如何让图书馆满足我的需求。

控制器

use Zend\Form\Element; 
    use Zend\Form\Form; 

    $radio = new Element\Radio('gender'); 

    $radio->setValueOptions(array(
     '1' => 'Male', 
     '2' => 'Female', 
     '3' => 'Other',    
    )); 
    $radio->setValue(2); 

在View

<?=$this->formRadio($this->form->get('gender'));?> 

元素可观测呈现为

* Male * Female * Other 

想要元素呈现为

* Male 
* Female 
* Other 

如何?

样本HTML渲染

<form class='my-form'> 
    <table> 
     <tr> 
      <td> 
       <label><input name="gender" type="radio" value="1">Male</label> 
       <label><input name="gender" type="radio" value="2">Female</label> 
      </td> 
     </tr> 
    </table> 
</form> 

回答

1

可以侧步Zend框架完全和节省一些页面重量(不使用br标签),通过使用CSS来解决这个问题。

只需查看用于呈现列表项的重复元素的标记或类名(听起来像是一个无线电输入),并将其设置为垂直显示而不是水平显示。

一个例子:

.my-form input[type="radio"] { 
    display: block; 
} 

这将是比在Zend的定制渲染装饰更快,更简单。

编辑:现在你已经提供了确切的HTML,这里有一些改进。

1)输入嵌套在标签内,因此您将修改标签的显示而不是输入。

.my-form label { 
    display: block; 
} 

2)呈现的表单(如果确切的话)当前没有类名。如果表单永远不会在页面上多次使用,那么您将不得不将CSS中的选择器更改为使用ID表示法。

#myform label而不是.my-form label

否则,您可以使用Zend的setAttribute功能添加一个类名像这样。

$form -> setAttribute('class', 'my-form');

+0

我这样做并呈现为无线电框“男性”在第1行,无线电值2号线,然后无线电框“女性”第3行等的元素。我想在同一行上保留单选框和值 – Dennis

+0

如果您粘贴呈现的HTML,我可以向您展示这些修补程序的样式。 –

+0

谢谢。我把它粘贴到我的问题 – Dennis

相关问题