2010-05-21 91 views
4

我为日期字段使用自定义窗口小部件,并且我想在所有窗体中使用它。问题是symfony使用默认的sfWidgetFormDate。我想要的是改变这个默认的小部件,以生成与我的自定义小部件窗体。我不想用手改变所有生成的表格。Symfony窗​​体:如何更改窗体生成的默认窗口小部件

我发现的唯一的方法是修改BaseFormDoctrine.php的trik:

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', 
      )); 
     } 
    } 
} 

回答

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 
+0

太棒了!我已经尝试过并且有效 – caymcorp 2010-05-26 09:43:36

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); 
    } 
    } 
}