Symfony1 向symfony中的所有表单小部件添加类

Symfony1 向symfony中的所有表单小部件添加类,symfony1,symfony-forms,Symfony1,Symfony Forms,我正试图找到一种更好的方法来分配类以形成symfony中的元素。目前,我似乎无法摆脱手动分配每一个。即: $this->widgetSchema['title']->setAttribute("class","fieldInput"); $this->widgetSchema['tag_line']->setAttribute("class","fieldInput"); $this->widgetSchema['description']->setAttri

我正试图找到一种更好的方法来分配类以形成symfony中的元素。目前,我似乎无法摆脱手动分配每一个。即:

$this->widgetSchema['title']->setAttribute("class","fieldInput");
$this->widgetSchema['tag_line']->setAttribute("class","fieldInput");
$this->widgetSchema['description']->setAttribute("class","fieldInput");
// etc
我尝试过但没有成功的事情

1) 循环遍历$this->widgetSchema,将其视为数组并为每个键设置属性

2) $this->widgetSchema->setAttribute(),但这仅将类应用于生成的标签,而不是表单元素

必须有一种方法可以击中所有的领域,而无需特别指示它们

有人能给我指出正确的方向吗?

有一种方法:

在lib/widget中创建一个
sfWidgetFormSchemaFormatter
,其中包含以下内容,例如(来自的代码):

然后,您可以使用选择器
.myfieldclass input
或任何您想要的方式设置元素的样式,这是更改表单结构/外观的好方法。

有一种方法:

在lib/widget中创建一个
sfWidgetFormSchemaFormatter
,其中包含以下内容,例如(来自的代码):


然后,您可以使用选择器
.myfieldclass input
或任何您想要的样式设置元素,这是更改表单结构/外观的好方法。

将类应用于父元素,而不是单个元素:

模板:

<form class="my-form" action="" method="">
 // put widgets here
</form>
.my-form select {}
.my-form input[type=text] {}
.my-form textarea {}
.my-form input[type=submit] {}
etc...

将类应用于父元素,而不是单个元素:

模板:

<form class="my-form" action="" method="">
 // put widgets here
</form>
.my-form select {}
.my-form input[type=text] {}
.my-form textarea {}
.my-form input[type=submit] {}
etc...

我也有同样的问题

形势 我们开始认为CSS和symfony的小部件生成之间的分离对于集成商来说是一个巨大的学习曲线,我们认为必须有一种方法让集成商更加独立于开发人员

客户端总是希望有自定义样式的表单。。。然而,定制手工制作!干代码完成了。我的意思是,平面设计师不只是用输入文本和标签来设计表单,他们找到了所有创造性的方法,而我们的现实是让它在框架中工作,看起来和他们设计的一样

这就是为什么我们考虑使用sfWidgetFormSchemaFormatter,但是表单控制器都是不同的,我们希望能够从视图中注入样式。。。因为这是一个集成问题,而不是应用程序问题。就其本身而言

解决方案路径 我的团队领导和我想出了一个解决方案。主要使用partials并循环使用它们。表单视图可能如下所示


我们的解决方案并不完美,因为我们希望通过视图中的调用来确定哪个控制器可以获得哪个类名。但这比使用CSS的输入[type=text]要好,因为我们的客户机仍然使用
我也有同样的问题

形势 我们开始认为CSS和symfony的小部件生成之间的分离对于集成商来说是一个巨大的学习曲线,我们认为必须有一种方法让集成商更加独立于开发人员

客户端总是希望有自定义样式的表单。。。然而,定制手工制作!干代码完成了。我的意思是,平面设计师不只是用输入文本和标签来设计表单,他们找到了所有创造性的方法,而我们的现实是让它在框架中工作,看起来和他们设计的一样

这就是为什么我们考虑使用sfWidgetFormSchemaFormatter,但是表单控制器都是不同的,我们希望能够从视图中注入样式。。。因为这是一个集成问题,而不是应用程序问题。就其本身而言

解决方案路径 我的团队领导和我想出了一个解决方案。主要使用partials并循环使用它们。表单视图可能如下所示


我们的解决方案并不完美,因为我们希望通过视图中的调用来确定哪个控制器可以获得哪个类名。但这比使用CSS的输入[type=text]要好,因为我们的客户机仍然使用表单类中的

foreach ($this->getWidgetSchema()->getFields() as $field)
{
  $field->setAttribute('class', 'custom-class');
}
如果有许多表单类需要该代码,还可以从自定义SFWidgetFormSchemaFormat类的构造函数中调用该代码:

public function __construct(sfWidgetFormSchema $widgetSchema)
{
    parent::__construct($widgetSchema);

    foreach ($this->getWidgetSchema()->getFields() as $field)
    {
        $field->setAttribute('class', 'custom-class');
    }
}

从form类中:

foreach ($this->getWidgetSchema()->getFields() as $field)
{
  $field->setAttribute('class', 'custom-class');
}
如果有许多表单类需要该代码,还可以从自定义SFWidgetFormSchemaFormat类的构造函数中调用该代码:

public function __construct(sfWidgetFormSchema $widgetSchema)
{
    parent::__construct($widgetSchema);

    foreach ($this->getWidgetSchema()->getFields() as $field)
    {
        $field->setAttribute('class', 'custom-class');
    }
}

这已经很旧了,但对于任何试图找到它的人来说,只需进入/lib/filter/doctor/中的xxxxxFormFilter.php,然后执行以下操作:

$this->getWidget('inputname')->setAttribute('class_name','class_name/id_name');

通过这种方式,您可以单独指定和控制所有内容。

这是一种古老的方法,但对于任何试图找到它的人,只需进入/lib/filter/doctor/中的xxxxxFormFilter.php,然后执行以下操作:

$this->getWidget('inputname')->setAttribute('class_name','class_name/id_name');

通过这种方式,您可以单独指定和控制所有内容。

根据扩展的基本表单,您可以在configure方法中添加以下内容:

public function configure()
{
    foreach ($this->widgetSchema->getFields() as $field) {
        $field->setAttribute('class','my-custom-class');
    }
    parent::configure();
}

我在Baseform教条中做了我的。您可以使用相同的方法添加/覆盖字段中的任何属性,甚至根据字段类型添加自定义规则。

根据扩展的基本表单,您可以在配置方法中添加以下内容:

public function configure()
{
    foreach ($this->widgetSchema->getFields() as $field) {
        $field->setAttribute('class','my-custom-class');
    }
    parent::configure();
}

我在Baseform教条中做了我的。您可以使用相同的方法添加/覆盖字段中的任何属性,甚至根据字段类型添加自定义规则。

为什么不使用CSS来实现此目的?如果一个类应用于每个表单元素,它有什么好处呢?我不太喜欢设计实际元素(input/textarea/etc)的样式,甚至不喜欢ID。重用样式的能力较低。此外,随着项目规模的扩大,特定性可能会引起头痛。我觉得一个表单应该是相同的,而不是一个单独的表单,并且附加到它的类应该决定它的样式。输入表单的一种样式可能在今天起作用,但谁知道一个月后我什么时候需要一些不同的东西。这样我就避免了css表单变成意大利面条。Nicole Sullivan在陈述案例方面比我做得更好-我认为你错误地理解了CSS的整个概念。而且,这张幻灯片是BS。为什么不使用CSS呢?如果一个类应用于每一个f,它有什么好处
$this->getWidget('inputname')->setAttribute('class_name','class_name/id_name');
public function configure()
{
    foreach ($this->widgetSchema->getFields() as $field) {
        $field->setAttribute('class','my-custom-class');
    }
    parent::configure();
}