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

cay*_*orp 4 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',
            ));
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

joh*_*rds 5

你可以做的是创建自己的表单生成器类.

class myFormGenerator extends sfDoctrineGenerator
{

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

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

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

php doctrine:build-forms --generator-class='myFormGenerator'
Run Code Online (Sandbox Code Playgroud)

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

看看下面的文件,看看我从中得出的结论:

lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/task/sfDoctrineBuildFormsTask.class.php
lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/generator/sfDoctrineFormGenerator.class.php
Run Code Online (Sandbox Code Playgroud)