Rya*_*yan 1 symfony1 symfony-forms
我试图找到一种更好的方法来分配类来形成symfony中的元素.目前,我似乎无法手动分配每一个.即:
$this->widgetSchema['title']->setAttribute("class","fieldInput");
$this->widgetSchema['tag_line']->setAttribute("class","fieldInput");
$this->widgetSchema['description']->setAttribute("class","fieldInput");
// etc
Run Code Online (Sandbox Code Playgroud)
我尝试过没有成功的事情
1)循环遍历$ this-> widgetSchema,将其视为一个数组并将属性设置为每个键
2)$ this-> widgetSchema-> setAttribute()但这只是将类应用于生成的标签,而不是表单元素
必须有一种方法来击中所有的领域,而无需专门指导他们?
谁能指出我正确的方向?
有一种方法:
创建一个sfWidgetFormSchemaFormatterlib/widget,其中包含例如this(来自symfonians的代码):
class sfWidgetFormSchemaFormatterDiv extends sfWidgetFormSchemaFormatter
{
protected
$rowFormat = "<div class=\"form-row%is_error%\">\n %label%\n %error%\n %hel<div class='myfieldclass'%field%</div>\n p%\n%hidden_fields%</div>\n",
$errorRowFormat = "%errors%\n",
$helpFormat = '<div class="form-help">%help%</div>',
$decoratorFormat = "\n %content%";
public function formatRow($label, $field, $errors = array(), $help = '', $hiddenFields = null)
{
return strtr(parent::formatRow($label, $field, $errors, $help, $hiddenFields), array(
'%is_error%' => (count($errors) > 0) ? ' field_error' : '',
//'%is_required%' => $field,
));
}
}
Run Code Online (Sandbox Code Playgroud)
然后,在您的表单中,执行:
$oDecorator = new sfWidgetFormSchemaFormatterDiv($this->getWidgetSchema());
$this->getWidgetSchema()->addFormFormatter('div', $oDecorator);
$this->getWidgetSchema()->setFormFormatterName('div');
Run Code Online (Sandbox Code Playgroud)
然后,您可以使用选择器.myfieldclass input或任何您想要的样式设置元素样式,这是更改表单结构/外观的好方法.
小智 7
从表单类中:
foreach ($this->getWidgetSchema()->getFields() as $field)
{
$field->setAttribute('class', 'custom-class');
}
Run Code Online (Sandbox Code Playgroud)
如果您有许多需要它的表单类,您也可以从自定义sfWidgetFormSchemaFormatter类的构造函数中调用该代码:
public function __construct(sfWidgetFormSchema $widgetSchema)
{
parent::__construct($widgetSchema);
foreach ($this->getWidgetSchema()->getFields() as $field)
{
$field->setAttribute('class', 'custom-class');
}
}
Run Code Online (Sandbox Code Playgroud)