Gre*_*ire 2 symfony1 symfony-1.4 symfony-forms
我想以这种方式呈现symfony表单:
我的问题涉及单选按钮小部件:我不知道如何单独呈现每个选项,以便在这些单选按钮之间显示其他字段.
有没有办法用symfony形式实现这一目标?
谢谢!
Symfony让这有点困难.您想要一个renderChoice( $value)
可从视图中调用的方法,但这需要更改或扩展sfFormField.
更改它不是未来的证明,并且扩展它还需要您更改一些symfony变量,以便视图中可访问的字段是此新类的实例.我不知道该选项是否存在.
相反,我选择将sfWidgetFormSelectRadio扩展到以下非常简单的扩展类中formatChoices
.它会检查你是否只要求一个选项.如果是,它会呈现该标记并返回它,否则它会正常呈现parent::
.
这使您可以从视图中调用:您要渲染的无线电选项的索引$form['field']->render(array('only_choice'=> $value))
在哪里$value
:
<?php
/**
* sfWidgetFormSelectRadioSingleable lets you render just one option at a time.
*
* @package symfony
* @subpackage widget
* @author Fabien Potencier <fabien.potencier@symfony-project.com>
* @version SVN: $Id: sfWidgetFormSelectRadio.class.php 27738 2010-02-08 15:07:33Z Kris.Wallsmith $
*/
class sfWidgetFormSelectRadioSingleable extends sfWidgetFormSelectRadio
{
public function formatChoices($name, $value, $choices, $attributes)
{
$onlyChoice = (!empty($attributes['only_choice'])) ? $attributes['only_choice'] : false; unset($attributes['only_choice']);
if($onlyChoice)
{
if(!isset($choices[$onlyChoice]))
throw new Exception("Option '$onlyChoice' doesn't exist.");
$key = $onlyChoice;
$option = $choices[$key];
$baseAttributes = array(
'name' => substr($name, 0, -2),
'type' => 'radio',
'value' => self::escapeOnce($key),
'id' => $id = $this->generateId($name, self::escapeOnce($key)),
);
if (strval($key) == strval($value === false ? 0 : $value))
{
$baseAttributes['checked'] = 'checked';
}
return $this->renderTag('input', array_merge($baseAttributes, $attributes));
}
else
{
return parent::formatChoices($name, $value, $choices, $attributes);
}
}
}
Run Code Online (Sandbox Code Playgroud)
代码笨拙,但在实践中很容易使用,并且将来不会破坏.
归档时间: |
|
查看次数: |
3870 次 |
最近记录: |