2010-05-21 118 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); 
    } 
    } 
}