Symfony表单:如何更改表单生成的默认小部件

时间:2010-05-21 10:48:17

标签: symfony1 widget

我正在为日期字段使用自定义Widget,我想在我的所有表单中使用它。问题是symfony使用默认的sfWidgetFormDate。我想要的是更改此默认小部件,以便使用我的自定义Widget生成表单。我不想手工更改生成的所有表格。

我找到的唯一方法是修改BaseFormDoctrine.php:

public function setup()
{
    foreach($this->getWidgetSchema()->getFields() as $name=>$widget)
    {
        if($widget instanceof sfWidgetFormDate) 
        {
            $this->widgetSchema[$name] = new sfWidgetFormJQueryDate(array(
                'config' => '{}',
                'image'=>'/images/calendar.png',
            ));
        }
    }
}

2 个答案:

答案 0 :(得分:5)

您可以做的是创建自己的表单生成器类。

class myFormGenerator extends sfDoctrineGenerator
{

  public function getWidgetClassForColumn($column)
  { 
    switch ($column->getDoctrineType())
    {
      case 'date':
        return 'sfWidgetFormJQueryDate';
        break;
      default:
        return parent::getWidgetClassForColumn($column); 
    }
  }
}

保存在lib文件夹中合理的位置,清除缓存等。

然后像这样重新运行你的发电机......

php doctrine:build-forms --generator-class='myFormGenerator'

我没有尝试过任何上述内容,但我认为这个理论很合理......

查看以下文件,了解我从中得出的结论:

lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/task/sfDoctrineBuildFormsTask.class.php
lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/generator/sfDoctrineFormGenerator.class.php

答案 1 :(得分:0)

在johnwards回答之后,由于我想为窗口小部件定义默认选项,我还会覆盖执行此操作的函数:

class myFormGenerator extents sfDoctrineFormGenerator
{

  public function getWidgetClassForColumn($column)
  { 
    ...
  }

  public function getWidgetOptionsForColumn($column)
  {
    switch ($column->getDoctrineType())
    {
      case 'date':
        return "array('config' => '{}', 'image'=>'/images/calendar.png')";
    break;
      default:
        return parent::getWidgetOptionsForColumn($column); 
    }
  }
}