Php 如何在symfony窗体上隐藏单个标签?
我正在一个symfony项目上创建一个非常定制的表单,目前我有如下内容:Php 如何在symfony窗体上隐藏单个标签?,php,forms,symfony1,label,Php,Forms,Symfony1,Label,我正在一个symfony项目上创建一个非常定制的表单,目前我有如下内容: foreach ($foo as $c) { $fields['crit_v_'.$c->getId()]=new sfWidgetFormInput(array('label'=>'')); $fields['crit_m_'.$c->getId()]=new sfWidgetFormTextarea(array('label'=>__($c->getName
foreach ($foo as $c) {
$fields['crit_v_'.$c->getId()]=new sfWidgetFormInput(array('label'=>''));
$fields['crit_m_'.$c->getId()]=new sfWidgetFormTextarea(array('label'=>__($c->getName(),array(),'messages')));
}
<form action="<?php echo url_for('evaluation_submit')?>" method="post">
<?php echo $form['id']?>
<div> <!-- with label -->
<?php echo $form['foo']->renderLabel() ?>
<?php echo $form['foo']->renderError() ?>
<?php echo $form['foo'] ?>
</div>
<div> <!-- without label -->
<?php echo $form['bar']->renderError() ?>
<?php echo $form['bar'] ?>
</div>
<?php include_partial('form', array('form' => $form)) ?>
正如您所看到的,每个元素有2个输入,但我只希望第二个元素有一个标签。将第一个标签设置为null
或'
不会使symfony不呈现此标签并显示此标签的默认文本。(这意味着for输入标记为crit\u v\u xx
)有没有隐藏特定表单标签的简单方法?要将symfony表单中单个字段的标签设置为空白:
$your_form->widgetSchema->setLabel('the_field_id', ' ');
它将呈现
标记,但其中有一个空格,因此它们不会在浏览器上输出任何内容您可以创建自定义行格式,定义字段的呈现方式(如果您没有使用自定义模板)。我在这里面找到的
一个好的解决方案可能是重写formatRow
方法:
public function formatRow($label, $field, $errors = array(), $help = '', $hiddenFields = null)
{
if(strip_tags($label) == '__UNSET__')
{
return strtr($this->getRowFormat(), array(
'%label%' => null,
'%field%' => $field,
'%error%' => $this->formatErrorsForRow($errors),
'%help%' => $this->formatHelp($help),
'%hidden_fields%' => is_null($hiddenFields) ? '%hidden_fields%' : $hiddenFields,
));
}
else
{
return strtr($this->getRowFormat(), array(
'%label%' => $label,
'%field%' => $field,
'%error%' => $this->formatErrorsForRow($errors),
'%help%' => $this->formatHelp($help),
'%hidden_fields%' => is_null($hiddenFields) ? '%hidden_fields%' : $hiddenFields,
));
}
}
然后将\uuuu UNSET\uuuu
设置为那些不应呈现其标签的字段的标签
或者,您甚至可以根据标签名称使用自定义行格式,以防止输出标签的封闭标签。行格式看起来像这样
%field%%help%%error%%hidden_fields%
,并将传递该行格式,而不是$this->getRowFormat()
我最终得到以下结果:
我创建了一个单独的模板文件,名为\u form.php
,如下所示:
foreach ($foo as $c) {
$fields['crit_v_'.$c->getId()]=new sfWidgetFormInput(array('label'=>''));
$fields['crit_m_'.$c->getId()]=new sfWidgetFormTextarea(array('label'=>__($c->getName(),array(),'messages')));
}
<form action="<?php echo url_for('evaluation_submit')?>" method="post">
<?php echo $form['id']?>
<div> <!-- with label -->
<?php echo $form['foo']->renderLabel() ?>
<?php echo $form['foo']->renderError() ?>
<?php echo $form['foo'] ?>
</div>
<div> <!-- without label -->
<?php echo $form['bar']->renderError() ?>
<?php echo $form['bar'] ?>
</div>
<?php include_partial('form', array('form' => $form)) ?>
在该操作的主模板中,我包括如下表单:
foreach ($foo as $c) {
$fields['crit_v_'.$c->getId()]=new sfWidgetFormInput(array('label'=>''));
$fields['crit_m_'.$c->getId()]=new sfWidgetFormTextarea(array('label'=>__($c->getName(),array(),'messages')));
}
<form action="<?php echo url_for('evaluation_submit')?>" method="post">
<?php echo $form['id']?>
<div> <!-- with label -->
<?php echo $form['foo']->renderLabel() ?>
<?php echo $form['foo']->renderError() ?>
<?php echo $form['foo'] ?>
</div>
<div> <!-- without label -->
<?php echo $form['bar']->renderError() ?>
<?php echo $form['bar'] ?>
</div>
<?php include_partial('form', array('form' => $form)) ?>
如果将标签设置为false,则symfony将根本不会呈现
标记。False的行为与null或“”不同
您可以在generator.yml中禁用它
filter:
fields:
name: { label: false }
很抱歉,我想键入一个空格,如果您输入一个空字符串,它将不起作用(正如您已经知道的)。这样,它将呈现标记,但其中有一个空格,因此它们不会在浏览器上输出任何内容。这有点可疑,但它对我有用。。。